Refactor StreamWriterWithDisabledValidation 02/103202/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 10 Nov 2022 17:40:23 +0000 (18:40 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 10 Nov 2022 17:41:48 +0000 (18:41 +0100)
We are unnecessarily passing things to each instance, where these
are static knowledge. Reduce the footprint of each instance by moving
these constants around and adjusting instantiation accordingly.

Change-Id: I72fe28699fdd55325126b5930b77e151293582eb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/JsonStreamWriterWithDisabledValidation.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/RestconfDocumentedExceptionMapper.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/StreamWriterWithDisabledValidation.java
restconf/restconf-nb/src/main/java/org/opendaylight/restconf/nb/rfc8040/jersey/providers/errors/XmlStreamWriterWithDisabledValidation.java

index d84415d11b1e2f47599cc3b75726923a58c36f51..982ff3abc9d052eea5b1296f866bef2200041ca8 100644 (file)
@@ -11,10 +11,9 @@ import com.google.gson.stream.JsonWriter;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
-import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.rev170126.Errors;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter;
@@ -24,8 +23,8 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JsonWriterFactory;
  * JSON stream-writer with disabled leaf-type validation for specified QName.
  */
 final class JsonStreamWriterWithDisabledValidation extends StreamWriterWithDisabledValidation {
-
     private static final int DEFAULT_INDENT_SPACES_NUM = 2;
+    private static final XMLNamespace IETF_RESTCONF_URI = Errors.QNAME.getModule().getNamespace();
 
     private final JsonWriter jsonWriter;
     private final NormalizedNodeStreamWriter jsonNodeStreamWriter;
@@ -33,21 +32,16 @@ final class JsonStreamWriterWithDisabledValidation extends StreamWriterWithDisab
     /**
      * Creation of the custom JSON stream-writer.
      *
-     * @param excludedQName        QName of the element that is excluded from type-check.
-     * @param outputWriter         Output stream that is used for creation of JSON writers.
-     * @param schemaPath           Schema-path of the {@link NormalizedNode} to be written.
-     * @param initialNs            Initial namespace derived from schema node of the data that are serialized.
      * @param schemaContextHandler Handler that holds actual schema context.
+     * @param outputWriter         Output stream that is used for creation of JSON writers.
      */
-    JsonStreamWriterWithDisabledValidation(final QName excludedQName, final OutputStreamWriter outputWriter,
-            final XMLNamespace initialNs, final SchemaContextHandler schemaContextHandler) {
-        super(excludedQName);
+    JsonStreamWriterWithDisabledValidation(final SchemaContextHandler schemaContextHandler,
+            final OutputStreamWriter outputWriter) {
         jsonWriter = JsonWriterFactory.createJsonWriter(outputWriter, DEFAULT_INDENT_SPACES_NUM);
-
         final var inference = errorsContainerInference(schemaContextHandler);
         jsonNodeStreamWriter = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
             JSONCodecFactorySupplier.RFC7951.getShared(inference.getEffectiveModelContext()),
-            inference, initialNs, jsonWriter);
+            inference, IETF_RESTCONF_URI, jsonWriter);
     }
 
     @Override
index f82a5012873dde1c479c3f30cc73f8efc6ea2e9e..5823da3cdb146a9a8ea09fbb64a7f53d20127ffc 100644 (file)
@@ -37,7 +37,6 @@ import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.rev170126.errors.Errors;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.rev170126.errors.errors.Error;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -61,9 +60,8 @@ public final class RestconfDocumentedExceptionMapper implements ExceptionMapper<
     private static final QName ERROR_TAG_QNAME = qnameOf("error-tag");
     private static final QName ERROR_APP_TAG_QNAME = qnameOf("error-app-tag");
     private static final QName ERROR_MESSAGE_QNAME = qnameOf("error-message");
-    private static final QName ERROR_INFO_QNAME = qnameOf("error-info");
     private static final QName ERROR_PATH_QNAME = qnameOf("error-path");
-    private static final XMLNamespace IETF_RESTCONF_URI = Errors.QNAME.getModule().getNamespace();
+    static final QName ERROR_INFO_QNAME = qnameOf("error-info");
 
     @Context
     private HttpHeaders headers;
@@ -171,8 +169,8 @@ public final class RestconfDocumentedExceptionMapper implements ExceptionMapper<
         try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
              OutputStreamWriter streamStreamWriter = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8);
         ) {
-            return writeNormalizedNode(errorsContainer, outputStream, new JsonStreamWriterWithDisabledValidation(
-                ERROR_INFO_QNAME, streamStreamWriter, IETF_RESTCONF_URI, schemaContextHandler));
+            return writeNormalizedNode(errorsContainer, outputStream,
+                new JsonStreamWriterWithDisabledValidation(schemaContextHandler, streamStreamWriter));
         } catch (IOException e) {
             throw new IllegalStateException("Cannot close some of the output JSON writers", e);
         }
@@ -186,8 +184,8 @@ public final class RestconfDocumentedExceptionMapper implements ExceptionMapper<
      */
     private String serializeErrorsContainerToXml(final ContainerNode errorsContainer) {
         try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
-            return writeNormalizedNode(errorsContainer, outputStream, new XmlStreamWriterWithDisabledValidation(
-                ERROR_INFO_QNAME, outputStream, schemaContextHandler));
+            return writeNormalizedNode(errorsContainer, outputStream,
+                new XmlStreamWriterWithDisabledValidation(schemaContextHandler, outputStream));
         } catch (IOException e) {
             throw new IllegalStateException("Cannot close some of the output XML writers", e);
         }
index 8a8579bfa34ba9fd0ecd5ce37fb973623ccca019..652a83cb78b7f762b72f37639744ab15eccb08dd 100644 (file)
@@ -10,9 +10,7 @@ package org.opendaylight.restconf.nb.rfc8040.jersey.providers.errors;
 import java.io.IOException;
 import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.rev170126.Errors;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.ForwardingNormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
@@ -24,22 +22,11 @@ import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference
  * we override the leafNode behavior for error-info.
  */
 abstract class StreamWriterWithDisabledValidation extends ForwardingNormalizedNodeStreamWriter {
-    private final QName excludedQName;
-
     private boolean inOurLeaf;
 
-    /**
-     * Creation of the {@link NormalizedNode} stream-writer with {@link QName} that is excluded from type-check.
-     *
-     * @param excludedQName QName of the element that is excluded from type-check.
-     */
-    StreamWriterWithDisabledValidation(final QName excludedQName) {
-        this.excludedQName = excludedQName;
-    }
-
     @Override
     public final void startLeafNode(final NodeIdentifier name) throws IOException {
-        if (name.getNodeType().equals(excludedQName)) {
+        if (RestconfDocumentedExceptionMapper.ERROR_INFO_QNAME.equals(name.getNodeType())) {
             inOurLeaf = true;
             startLeafNodeWithDisabledValidation(name);
         } else {
index 720e5203b377fdf23fe4892158a92792fdcf2bb5..fbf2a09a88cfd19360a393a8966ac2fab23c8268 100644 (file)
@@ -16,9 +16,7 @@ import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter;
 
@@ -39,15 +37,11 @@ final class XmlStreamWriterWithDisabledValidation extends StreamWriterWithDisabl
     /**
      * Creation of the custom XML stream-writer.
      *
-     * @param excludedQName        QName of the element that is excluded from type-check.
-     * @param outputStream         Output stream that is used for creation of JSON writers.
-     * @param schemaPath           Schema-path of the {@link NormalizedNode} to be written.
      * @param schemaContextHandler Handler that holds actual schema context.
+     * @param outputStream         Output stream that is used for creation of JSON writers.
      */
-    XmlStreamWriterWithDisabledValidation(final QName excludedQName, final OutputStream outputStream,
-            final SchemaContextHandler schemaContextHandler) {
-        super(excludedQName);
-
+    XmlStreamWriterWithDisabledValidation(final SchemaContextHandler schemaContextHandler,
+            final OutputStream outputStream) {
         try {
             xmlWriter = XML_FACTORY.createXMLStreamWriter(outputStream, StandardCharsets.UTF_8.name());
         } catch (final XMLStreamException | FactoryConfigurationError e) {