X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-netty-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fnettyutil%2Fhandler%2FNetconfMessageToEXIEncoder.java;fp=opendaylight%2Fnetconf%2Fnetconf-netty-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fnettyutil%2Fhandler%2FNetconfMessageToEXIEncoder.java;h=aceb6ac520f5568120c8538fb320f72f2c8418e4;hp=e90bc7916dc03fd210e2b69048161d944fda10e4;hb=e37c603e7d8b4d54a5d55463a1c69ec170898faf;hpb=81b58527159d1ae07e7042372ca78b7dc769a7c7 diff --git a/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfMessageToEXIEncoder.java b/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfMessageToEXIEncoder.java index e90bc7916d..aceb6ac520 100644 --- a/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfMessageToEXIEncoder.java +++ b/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfMessageToEXIEncoder.java @@ -14,6 +14,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; import java.io.IOException; import java.io.OutputStream; +import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.sax.SAXResult; @@ -23,13 +24,23 @@ import org.openexi.sax.Transmogrifier; import org.openexi.sax.TransmogrifierException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.xml.sax.ContentHandler; public final class NetconfMessageToEXIEncoder extends MessageToByteEncoder { private static final Logger LOG = LoggerFactory.getLogger(NetconfMessageToEXIEncoder.class); - private final NetconfEXICodec codec; + /** + * 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; - public NetconfMessageToEXIEncoder(final NetconfEXICodec codec) { - this.codec = Preconditions.checkNotNull(codec); + private NetconfMessageToEXIEncoder(final Transmogrifier transmogrifier) { + this.transmogrifier = Preconditions.checkNotNull(transmogrifier); + } + + public static NetconfMessageToEXIEncoder create(final NetconfEXICodec codec) throws EXIOptionsException, TransmogrifierException { + return new NetconfMessageToEXIEncoder(codec.getTransmogrifier()); } @Override @@ -37,10 +48,15 @@ public final class NetconfMessageToEXIEncoder extends MessageToByteEncoder