Bug 5581: Minor Exi decoder optimization 48/51848/1
authorAndrej Mak <andrej.mak@pantheon.tech>
Tue, 14 Feb 2017 08:01:40 +0000 (09:01 +0100)
committerRobert Varga <nite@hq.sk>
Tue, 14 Feb 2017 09:35:08 +0000 (09:35 +0000)
Initialize DomSource with new document. Otherwise new
document is created by SAX2DOM class, which is more
expensive as it includes creating new
DocumentBuilderFactory etc.

Change-Id: I8511f39c5ae099d55c07fe3844e4aae5b3bd9bbb
Signed-off-by: Andrej Mak <andrej.mak@pantheon.tech>
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfEXIToMessageDecoder.java

index 22c8137b576b6e91553c6aa502e53a920fd72f43..6d2508757a4e3138c5f3effe1cb7a2e08c757dd3 100644 (file)
@@ -16,6 +16,7 @@ import io.netty.handler.codec.ByteToMessageDecoder;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
+import javax.xml.parsers.DocumentBuilder;
 import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.TransformerFactoryConfigurationError;
@@ -23,6 +24,7 @@ import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.sax.TransformerHandler;
 import org.opendaylight.netconf.api.NetconfMessage;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.openexi.proc.common.EXIOptionsException;
 import org.openexi.sax.EXIReader;
 import org.slf4j.Logger;
@@ -50,9 +52,11 @@ public final class NetconfEXIToMessageDecoder extends ByteToMessageDecoder {
      * cannot be invoked concurrently. Hence we can reuse the reader.
      */
     private final EXIReader reader;
+    private final DocumentBuilder documentBuilder;
 
     private NetconfEXIToMessageDecoder(final EXIReader reader) {
         this.reader = Preconditions.checkNotNull(reader);
+        this.documentBuilder = UntrustedXML.newDocumentBuilder();
     }
 
     public static NetconfEXIToMessageDecoder create(final NetconfEXICodec codec) throws EXIOptionsException {
@@ -81,7 +85,7 @@ public final class NetconfEXIToMessageDecoder extends ByteToMessageDecoder {
         final TransformerHandler handler = FACTORY.newTransformerHandler();
         reader.setContentHandler(handler);
 
-        final DOMResult domResult = new DOMResult();
+        final DOMResult domResult = new DOMResult(documentBuilder.newDocument());
         handler.setResult(domResult);
 
         try (final InputStream is = new ByteBufInputStream(in)) {