From 5534751c2768eb8c866f1278e5647639ae5bff81 Mon Sep 17 00:00:00 2001 From: OleksandrZharov Date: Tue, 15 Feb 2022 11:40:18 +0100 Subject: [PATCH] Remove SchemaNode#getPath from JSON writer in rfc8040 Removed deprecated SchemaNode#getPath from JsonNormalizedNodeBodyWriter class by replacing it with path created from QNames via Absolute#of method. JIRA: NETCONF-818 Change-Id: I93a2f6121d8635f5046b18c02624fb1f386e75eb Signed-off-by: OleksandrZharov Signed-off-by: Ivan Hrasko --- .../JsonNormalizedNodeBodyWriter.java | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyWriter.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyWriter.java index 15c4a829a1..c54a63023d 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyWriter.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/JsonNormalizedNodeBodyWriter.java @@ -17,6 +17,7 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; @@ -29,6 +30,8 @@ import org.opendaylight.restconf.nb.rfc8040.jersey.providers.api.RestconfNormali import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload; 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.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; @@ -44,6 +47,8 @@ import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; @Provider @Produces({ MediaTypes.APPLICATION_YANG_DATA_JSON, MediaType.APPLICATION_JSON }) @@ -66,7 +71,12 @@ public class JsonNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWrit @SuppressWarnings("unchecked") final InstanceIdentifierContext identifierCtx = (InstanceIdentifierContext) context.getInstanceIdentifierContext(); - final SchemaPath path = identifierCtx.getSchemaNode().getPath(); + final SchemaInferenceStack stack = SchemaInferenceStack.of(identifierCtx.getSchemaContext()); + identifierCtx.getInstanceIdentifier().getPathArguments().stream() + .filter(arg -> !(arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates)) + .filter(arg -> !(arg instanceof YangInstanceIdentifier.AugmentationIdentifier)) + .forEach(p -> stack.enterSchemaTree(p.getNodeType())); + final SchemaPath path = stack.toSchemaPath(); final var pretty = context.getWriterParameters().prettyPrint(); try (JsonWriter jsonWriter = createJsonWriter(entityStream, pretty == null ? false : pretty.value())) { @@ -94,12 +104,9 @@ public class JsonNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWrit * RpcDefinition is not supported as initial codec in JSONStreamWriter, * so we need to emit initial output declaration.. */ - nnWriter = createNormalizedNodeWriter( - context, - ((RpcDefinition) context.getSchemaNode()).getOutput().getPath(), - jsonWriter, - depth, - fields); + final RpcDefinition rpc = (RpcDefinition) context.getSchemaNode(); + final SchemaPath rpcPath = SchemaPath.of(Absolute.of(rpc.getQName(), rpc.getOutput().getQName())); + nnWriter = createNormalizedNodeWriter(context, rpcPath, jsonWriter, depth, fields); final Module module = context.getSchemaContext().findModule(data.getIdentifier().getNodeType().getModule()) .get(); jsonWriter.name(module.getName() + ":output"); @@ -111,8 +118,16 @@ public class JsonNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWrit * ActionDefinition is not supported as initial codec in JSONStreamWriter, * so we need to emit initial output declaration.. */ - nnWriter = createNormalizedNodeWriter(context, - ((ActionDefinition) context.getSchemaNode()).getOutput().getPath(), jsonWriter, depth, fields); + final ActionDefinition actDef = (ActionDefinition) context.getSchemaNode(); + final List qNames = context.getInstanceIdentifier().getPathArguments().stream() + .filter(arg -> !(arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates)) + .filter(arg -> !(arg instanceof YangInstanceIdentifier.AugmentationIdentifier)) + .map(PathArgument::getNodeType) + .collect(Collectors.toList()); + qNames.add(actDef.getQName()); + qNames.add(actDef.getOutput().getQName()); + final SchemaPath actPath = SchemaPath.of(Absolute.of(qNames)); + nnWriter = createNormalizedNodeWriter(context, actPath, jsonWriter, depth, fields); final Module module = context.getSchemaContext().findModule(data.getIdentifier().getNodeType().getModule()) .get(); jsonWriter.name(module.getName() + ":output"); -- 2.36.6