From aa230a6000c4544583d63278bbbcb5458cea1c61 Mon Sep 17 00:00:00 2001 From: Ivan Hrasko Date: Fri, 18 Feb 2022 20:12:31 +0100 Subject: [PATCH] Check error conditions before processing First we have to check if yangIIdContext empty content does not mean the error and only then we can use it in further processing. JIRA: NETCONF-818 Change-Id: I81593f323a48ea47d91f5aeb424729408efed2ad Signed-off-by: Ivan Hrasko --- .../services/impl/RestconfDataServiceImpl.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java index 5434ac373d..f50951d5d7 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java @@ -320,20 +320,21 @@ public class RestconfDataServiceImpl implements RestconfDataService { public Response invokeAction(final NormalizedNodePayload payload) { final InstanceIdentifierContext context = payload.getInstanceIdentifierContext(); final DOMMountPoint mountPoint = context.getMountPoint(); - final List qNames = context.getInstanceIdentifier().getPathArguments().stream() + + 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 List qNames = yangIIdContext.getPathArguments().stream() .filter(arg -> !(arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates)) .filter(arg -> !(arg instanceof YangInstanceIdentifier.AugmentationIdentifier)) .map(PathArgument::getNodeType) .collect(Collectors.toList()); qNames.add(context.getSchemaNode().getQName()); final Absolute schemaPath = Absolute.of(qNames); - 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 DOMActionResult response; final EffectiveModelContext schemaContextRef; @@ -367,7 +368,6 @@ public class RestconfDataServiceImpl implements RestconfDataService { .build(); } - /** * Invoking Action via mount point. * -- 2.36.6