Guard connectPromise not being null
[netconf.git] / netconf / netconf-netty-util / src / main / java / org / opendaylight / netconf / nettyutil / handler / NetconfMessageToEXIEncoder.java
index a9500ece2880970342e1ab88baf5897f89bbf6d9..4f27742f40906a444843e2520eb63b8d8b571627 100644 (file)
@@ -7,7 +7,8 @@
  */
 package org.opendaylight.netconf.nettyutil.handler;
 
-import com.google.common.base.Preconditions;
+import static java.util.Objects.requireNonNull;
+
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufOutputStream;
 import io.netty.channel.ChannelHandlerContext;
@@ -19,44 +20,33 @@ import javax.xml.transform.TransformerException;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.sax.SAXResult;
 import org.opendaylight.netconf.api.NetconfMessage;
-import org.openexi.proc.common.EXIOptionsException;
-import org.openexi.sax.Transmogrifier;
-import org.openexi.sax.TransmogrifierException;
+import org.opendaylight.netconf.shaded.exificient.core.exceptions.EXIException;
+import org.opendaylight.netconf.shaded.exificient.main.api.sax.SAXEncoder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.xml.sax.ContentHandler;
 
 public final class NetconfMessageToEXIEncoder extends MessageToByteEncoder<NetconfMessage> {
     private static final Logger LOG = LoggerFactory.getLogger(NetconfMessageToEXIEncoder.class);
-    /**
-     * This class is not marked as shared, so it can be attached to only a single channel,
-     * which means that {@link #encode(ChannelHandlerContext, NetconfMessage, ByteBuf)}
-     * cannot be invoked concurrently. Hence we can reuse the transmogrifier.
-     */
-    private final Transmogrifier transmogrifier;
+    private final NetconfEXICodec codec;
 
-    private NetconfMessageToEXIEncoder(final Transmogrifier transmogrifier) {
-        this.transmogrifier = Preconditions.checkNotNull(transmogrifier);
+    private NetconfMessageToEXIEncoder(final NetconfEXICodec codec) {
+        this.codec = requireNonNull(codec);
     }
 
-    public static NetconfMessageToEXIEncoder create(final NetconfEXICodec codec) throws EXIOptionsException, TransmogrifierException {
-        return new NetconfMessageToEXIEncoder(codec.getTransmogrifier());
+    public static NetconfMessageToEXIEncoder create(final NetconfEXICodec codec) {
+        return new NetconfMessageToEXIEncoder(codec);
     }
 
     @Override
-    protected void encode(final ChannelHandlerContext ctx, final NetconfMessage msg, final ByteBuf out) throws EXIOptionsException, IOException, TransformerException, TransmogrifierException {
+    protected void encode(final ChannelHandlerContext ctx, final NetconfMessage msg, final ByteBuf out)
+            throws IOException, TransformerException, EXIException {
         LOG.trace("Sent to encode : {}", msg);
 
-        try (final OutputStream os = new ByteBufOutputStream(out)) {
-            transmogrifier.setOutputStream(os);
-            final ContentHandler handler = transmogrifier.getSAXTransmogrifier();
+        try (OutputStream os = new ByteBufOutputStream(out)) {
+            final SAXEncoder encoder = codec.getWriter();
+            encoder.setOutputStream(os);
             final Transformer transformer = ThreadLocalTransformers.getDefaultTransformer();
-            transformer.transform(new DOMSource(msg.getDocument()), new SAXResult(handler));
-        } finally {
-            // Make sure we do not retain any reference to state by removing
-            // the output stream reference and resetting internal state.
-            transmogrifier.setOutputStream(null);
-            transmogrifier.getSAXTransmogrifier();
+            transformer.transform(new DOMSource(msg.getDocument()), new SAXResult(encoder));
         }
     }
 }