From 0f99f8d6a6aaa6db06a50e123f1395b5a9254638 Mon Sep 17 00:00:00 2001 From: OleksandrZharov Date: Mon, 14 Feb 2022 11:27:34 +0100 Subject: [PATCH] Remove SchemaNode#getPath usage from RestconfDocumentedExceptionMapper Removed deprecated SchemaNode#getPath from RestconfDocumentedExceptionMapper class and replaced by new logic of getting path via QNames and Absolute path. Added YangInstanceIdentifier into NormalizedNodeContext instaed of null. It used later for getting SchemaPath from QNames. JIRA: NETCONF-818 Change-Id: I636ab83e4c1b89500d8face06777d2e931639035 Signed-off-by: OleksandrZharov --- .../RestconfDocumentedExceptionMapper.java | 55 +++++++++++++------ 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java index 9370aaebb2..b6ad9da112 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java @@ -10,6 +10,7 @@ package org.opendaylight.netconf.sal.rest.impl; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; +import static org.opendaylight.netconf.sal.rest.api.Draft02.RestConfModule.ERRORS_CONTAINER_QNAME; import com.google.common.collect.Iterables; import com.google.gson.stream.JsonWriter; @@ -19,6 +20,7 @@ import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; @@ -31,7 +33,7 @@ import javax.xml.stream.FactoryConfigurationError; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; -import org.opendaylight.netconf.sal.rest.api.Draft02; +import org.opendaylight.netconf.sal.rest.api.Draft02.RestConfModule; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.restconf.common.ErrorTags; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; @@ -39,8 +41,11 @@ import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.restconf.common.errors.RestconfError; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.XMLNamespace; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; @@ -64,6 +69,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -80,6 +86,11 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper schemaList = ControllerContext.findInstanceDataChildrenByName(errorsSchemaNode, - Draft02.RestConfModule.ERROR_LIST_SCHEMA_NODE); + RestConfModule.ERROR_LIST_SCHEMA_NODE); final DataSchemaNode errListSchemaNode = Iterables.getFirst(schemaList, null); checkState(errListSchemaNode instanceof ListSchemaNode, "Found Error SchemaNode isn't ListSchemaNode"); final CollectionNodeBuilder listErorsBuilder = SchemaAwareBuilders @@ -143,7 +154,7 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper(null, + final NormalizedNodeContext errContext = new NormalizedNodeContext(new InstanceIdentifierContext<>(ERRORS, (DataSchemaNode) errorsSchemaNode, null, controllerContext.getGlobalSchema()), errContBuild.build()); Object responseBody; @@ -197,7 +208,7 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper context = errorsNode.getInstanceIdentifierContext(); final DataSchemaNode schema = (DataSchemaNode) context.getSchemaNode(); - SchemaPath path = context.getSchemaNode().getPath(); final OutputStreamWriter outputWriter = new OutputStreamWriter(outStream, StandardCharsets.UTF_8); if (data == null) { throw new RestconfDocumentedException(Response.Status.NOT_FOUND); @@ -221,11 +231,17 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper qNames = context.getInstanceIdentifier().getPathArguments().stream() + .filter(arg -> !(arg instanceof NodeIdentifierWithPredicates)) + .filter(arg -> !(arg instanceof AugmentationIdentifier)) + .map(PathArgument::getNodeType) + .collect(Collectors.toList()); + path = SchemaPath.of(Absolute.of(qNames)).getParent(); } if (!schema.isAugmenting() && !(schema instanceof SchemaContext)) { initialNs = schema.getQName().getNamespace(); @@ -251,9 +267,9 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper qNames = pathContext.getInstanceIdentifier().getPathArguments().stream() + .filter(arg -> !(arg instanceof NodeIdentifierWithPredicates)) + .filter(arg -> !(arg instanceof AugmentationIdentifier)) + .map(PathArgument::getNodeType) + .collect(Collectors.toList()); + schemaPath = SchemaPath.of(Absolute.of(qNames)).getParent(); } final NormalizedNodeStreamWriter xmlStreamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, @@ -344,11 +365,11 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper