X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2FControllerContext.java;h=ad2409bfcf13be60407f853cdce454abf49c1d09;hb=097cf9e9d96e6ad94ab91728ab84c49b0eba5f61;hp=2da58a38203de35102e0cc5e7e667ec83adedeec;hpb=f96b3f1dfbd6e4a220caa84b24134600b17952ca;p=controller.git diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java index 2da58a3820..ad2409bfcf 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java @@ -153,6 +153,11 @@ public class ControllerContext implements SchemaContextListener { final InstanceIdentifierBuilder builder = YangInstanceIdentifier.builder(); final Module latestModule = globalSchema.findModuleByName(startModule, null); + + if (latestModule == null) { + throw new RestconfDocumentedException("The module named '" + startModule + "' does not exist.", ErrorType.PROTOCOL, ErrorTag.UNKNOWN_ELEMENT); + } + final InstanceIdentifierContext iiWithSchemaNode = collectPathArguments(builder, pathArgs, latestModule, null, toMountPointIdentifier); @@ -276,12 +281,12 @@ public class ControllerContext implements SchemaContextListener { if (!(element instanceof AugmentationIdentifier)) { final QName _nodeType = element.getNodeType(); final DataSchemaNode potentialNode = ControllerContext.childByQName(node, _nodeType); - if (!(element instanceof NodeIdentifier && potentialNode instanceof ListSchemaNode)) { - if (!ControllerContext.isListOrContainer(potentialNode)) { - return null; + if (!(element instanceof NodeIdentifier && potentialNode instanceof ListSchemaNode) && + !(potentialNode instanceof ChoiceSchemaNode)) { + builder.append(convertToRestconfIdentifier(element, potentialNode, mount)); + if (potentialNode instanceof DataNodeContainer) { + node = (DataNodeContainer) potentialNode; } - builder.append(convertToRestconfIdentifier(element, (DataNodeContainer) potentialNode, mount)); - node = (DataNodeContainer) potentialNode; } } } @@ -531,7 +536,7 @@ public class ControllerContext implements SchemaContextListener { if (!mountOpt.isPresent()) { LOG.debug("Instance identifier to missing mount point: {}", partialPath); throw new RestconfDocumentedException("Mount point does not exist.", ErrorType.PROTOCOL, - ErrorTag.UNKNOWN_ELEMENT); + ErrorTag.DATA_MISSING); } final DOMMountPoint mount = mountOpt.get(); @@ -862,8 +867,8 @@ public class ControllerContext implements SchemaContextListener { return null; } - private CharSequence convertToRestconfIdentifier(final PathArgument argument, final DataNodeContainer node, final DOMMountPoint mount) { - if (argument instanceof NodeIdentifier && node instanceof ContainerSchemaNode) { + private CharSequence convertToRestconfIdentifier(final PathArgument argument, final DataSchemaNode node, final DOMMountPoint mount) { + if (argument instanceof NodeIdentifier) { return convertToRestconfIdentifier((NodeIdentifier) argument, mount); } else if (argument instanceof NodeIdentifierWithPredicates && node instanceof ListSchemaNode) { return convertToRestconfIdentifierWithPredicates((NodeIdentifierWithPredicates) argument, (ListSchemaNode) node, mount);