X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=netconf%2Fnetconf-netty-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fnettyutil%2Fhandler%2FNetconfMessageToEXIEncoder.java;h=6d6adacec3010994e8fca374eb98c2eb98f453ae;hb=9a42076866ac48394163722b6ca95821a6cce876;hp=e874ab3a4062db96b41f16f76d6dbce91e3c7c0e;hpb=43c4082d01072162e93f9b7f9101e0d68e892704;p=netconf.git diff --git a/netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfMessageToEXIEncoder.java b/netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfMessageToEXIEncoder.java index e874ab3a40..6d6adacec3 100644 --- a/netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfMessageToEXIEncoder.java +++ b/netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfMessageToEXIEncoder.java @@ -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; @@ -18,47 +19,34 @@ import javax.xml.transform.Transformer; 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.api.messages.NetconfMessage; +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 { 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 { + throws IOException, TransformerException, EXIException { LOG.trace("Sent to encode : {}", msg); try (OutputStream os = new ByteBufOutputStream(out)) { - transmogrifier.setOutputStream(os); - final ContentHandler handler = transmogrifier.getSAXTransmogrifier(); + 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)); } } }