- final var databind = databindProvider.currentContext();
- final var reqPath = server.bindRequestPath(databind, identifier);
-
- final ContainerNode input;
- try {
- input = body.toContainerNode(reqPath.inference());
- } catch (IOException e) {
- LOG.debug("Error reading input", e);
- throw new RestconfDocumentedException("Error parsing input: " + e.getMessage(), ErrorType.PROTOCOL,
- ErrorTag.MALFORMED_MESSAGE, e);
- }
-
- hackInvokeRpc(databind, reqPath, uriInfo, input).addCallback(new JaxRsRestconfCallback<>(ar) {
- @Override
- Response transform(final Optional<ContainerNode> result) {
- return result
- .filter(output -> !output.isEmpty())
- .map(output -> Response.ok().entity(new NormalizedNodePayload(reqPath.inference(), output)).build())
- .orElseGet(() -> Response.noContent().build());
- }
- });
- }
-
- private RestconfFuture<Optional<ContainerNode>> hackInvokeRpc(final DatabindContext localDatabind,
- final InstanceIdentifierContext reqPath, final UriInfo uriInfo, final ContainerNode input) {
- // RPC type
- final var type = reqPath.getSchemaNode().getQName();
- final var mountPoint = reqPath.getMountPoint();
- if (mountPoint == null) {
- // Hacked-up integration of streams
- if (CreateDataChangeEventSubscription.QNAME.equals(type)) {
- return listenersBroker.createDataChangeNotifiStream(input, localDatabind.modelContext());
- } else if (CreateNotificationStream.QNAME.equals(type)) {
- return listenersBroker.createNotificationStream(input, localDatabind.modelContext());
- } else if (SubscribeDeviceNotification.QNAME.equals(type)) {
- return listenersBroker.createDeviceNotificationListener(input,
- listenersBroker.prepareUriByStreamName(uriInfo, "").toString(), mountPointService);
- }
- }
-
- return server.getRestconfStrategy(reqPath.getSchemaContext(), mountPoint).invokeRpc(type, input);
+ server.invokeRpc(uriInfo.getBaseUri(), identifier, body)
+ .addCallback(new JaxRsRestconfCallback<OperationOutput>(ar) {
+ @Override
+ Response transform(final OperationOutput result) {
+ final var body = result.output();
+ return body == null ? Response.noContent().build()
+ : Response.ok().entity(new NormalizedNodePayload(result.operation(), body)).build();
+ }
+ });