+ return restconfStrategy;
+ }
+
+ return RestconfStrategy.forMountPoint(mountPoint).orElseThrow(() -> {
+ LOG.warn("Mount point {} does not expose a suitable access interface", mountPoint.getIdentifier());
+ return new RestconfDocumentedException("Could not find a supported access interface in mount point "
+ + mountPoint.getIdentifier());
+ });
+ }
+
+ /**
+ * Invoke Action operation.
+ *
+ * @param payload {@link NormalizedNodePayload} - the body of the operation
+ * @return {@link NormalizedNodePayload} wrapped in {@link Response}
+ */
+ public Response invokeAction(final NormalizedNodePayload payload) {
+ final InstanceIdentifierContext context = payload.getInstanceIdentifierContext();
+ final YangInstanceIdentifier yangIIdContext = context.getInstanceIdentifier();
+ final NormalizedNode data = payload.getData();
+
+ if (yangIIdContext.isEmpty() && !NETCONF_BASE_QNAME.equals(data.getIdentifier().getNodeType())) {
+ throw new RestconfDocumentedException("Instance identifier need to contain at least one path argument",
+ ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE);
+ }
+
+ final DOMMountPoint mountPoint = context.getMountPoint();
+ final Absolute schemaPath = context.inference().toSchemaInferenceStack().toSchemaNodeIdentifier();
+ final DOMActionResult response;
+ if (mountPoint != null) {
+ response = invokeAction((ContainerNode) data, schemaPath, yangIIdContext, mountPoint);