Hide EXIMessage{Decoder,Encoder} 00/113000/4
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 6 Aug 2024 18:03:28 +0000 (20:03 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 6 Aug 2024 21:31:18 +0000 (23:31 +0200)
There is no need to expose these classes, as we have a common interface
for both.

JIRA: NETCONF-944
Change-Id: I9e5b4cda75431ab584f193818af3a9a475b7c193
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 files changed:
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/AbstractNetconfExiSession.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/EXIMessageDecoder.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/EXIMessageEncoder.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/NetconfEXICodec.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/AbstractNetconfSessionTest.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/TestingNetconfSession.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/handler/NetconfEXIHandlersTest.java
protocol/netconf-client/src/main/java/org/opendaylight/netconf/client/NetconfClientSession.java
protocol/netconf-client/src/test/java/org/opendaylight/netconf/client/NetconfClientSessionNegotiatorTest.java
protocol/netconf-client/src/test/java/org/opendaylight/netconf/client/NetconfClientSessionTest.java
protocol/netconf-server/src/main/java/org/opendaylight/netconf/server/NetconfServerSession.java
protocol/netconf-server/src/test/java/org/opendaylight/netconf/server/NetconfServerSessionTest.java

index d51e8ed7d41a36f3ee9b719e1c23b21a31a16d4d..28d553861b6f6d55797b931e2284d1c73e6785f5 100644 (file)
@@ -9,16 +9,13 @@ package org.opendaylight.netconf.nettyutil;
 
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandler;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToByteEncoder;
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.netconf.api.NetconfExiSession;
 import org.opendaylight.netconf.api.NetconfSessionListener;
 import org.opendaylight.netconf.api.messages.NetconfMessage;
 import org.opendaylight.netconf.api.xml.XmlElement;
 import org.opendaylight.netconf.codec.MessageDecoder;
 import org.opendaylight.netconf.codec.MessageEncoder;
-import org.opendaylight.netconf.nettyutil.handler.EXIMessageDecoder;
-import org.opendaylight.netconf.nettyutil.handler.EXIMessageEncoder;
 import org.opendaylight.netconf.nettyutil.handler.NetconfEXICodec;
 import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
 import org.opendaylight.netconf.shaded.exificient.core.exceptions.EXIException;
@@ -50,10 +47,10 @@ public abstract class AbstractNetconfExiSession<
         }
 
         final var exiCodec = NetconfEXICodec.forParameters(exiParams);
-        final var exiEncoder = EXIMessageEncoder.create(exiCodec);
-        final EXIMessageDecoder exiDecoder;
+        final var exiEncoder = exiCodec.newMessageEncoder();
+        final MessageDecoder exiDecoder;
         try {
-            exiDecoder = EXIMessageDecoder.create(exiCodec);
+            exiDecoder = exiCodec.newMessageDecoder();
         } catch (EXIException e) {
             LOG.warn("Failed to instantiate EXI decodeer for {} on session {}", exiCodec, this, e);
             throw new IllegalStateException("Cannot instantiate encoder for options", e);
@@ -69,7 +66,8 @@ public abstract class AbstractNetconfExiSession<
      * @param decoder EXI decoder
      * @param encoder EXI encoder
      */
-    protected abstract void addExiHandlers(ByteToMessageDecoder decoder, MessageToByteEncoder<NetconfMessage> encoder);
+    @NonNullByDefault
+    protected abstract void addExiHandlers(MessageDecoder decoder, MessageEncoder encoder);
 
     protected final void replaceMessageDecoder(final ChannelHandler handler) {
         replaceChannelHandler(MessageDecoder.HANDLER_NAME, handler);
index 800870a0fac18d81faf0ef0242dea204b7517d8f..19afa43d04e1f255eb183fbff37da4cca6b6cc31 100644 (file)
@@ -14,17 +14,14 @@ import io.netty.buffer.ByteBufInputStream;
 import io.netty.buffer.ByteBufUtil;
 import io.netty.channel.ChannelHandlerContext;
 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.TransformerFactoryConfigurationError;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.sax.SAXTransformerFactory;
-import javax.xml.transform.sax.TransformerHandler;
 import org.opendaylight.netconf.api.messages.NetconfMessage;
 import org.opendaylight.netconf.codec.MessageDecoder;
-import org.opendaylight.netconf.shaded.exificient.core.exceptions.EXIException;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,7 +29,7 @@ import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
-public final class EXIMessageDecoder extends MessageDecoder {
+final class EXIMessageDecoder extends MessageDecoder {
     private static final Logger LOG = LoggerFactory.getLogger(EXIMessageDecoder.class);
 
     private static final SAXTransformerFactory FACTORY;
@@ -48,20 +45,15 @@ public final class EXIMessageDecoder extends MessageDecoder {
     }
 
     /**
-     * This class is not marked as shared, so it can be attached to only a single channel,
-     * which means that {@link #decode(ChannelHandlerContext, ByteBuf, List)}
-     * cannot be invoked concurrently. Hence we can reuse the reader.
+     * This class is not marked as shared, so it can be attached to only a single channel, which means that
+     * {@link #decode(ChannelHandlerContext, ByteBuf, List)} cannot be invoked concurrently. Hence we can reuse the
+     * reader.
      */
+    private final DocumentBuilder documentBuilder = UntrustedXML.newDocumentBuilder();
     private final ThreadLocalSAXDecoder reader;
-    private final DocumentBuilder documentBuilder;
 
-    private EXIMessageDecoder(final ThreadLocalSAXDecoder reader) {
+    EXIMessageDecoder(final ThreadLocalSAXDecoder reader) {
         this.reader = requireNonNull(reader);
-        documentBuilder = UntrustedXML.newDocumentBuilder();
-    }
-
-    public static EXIMessageDecoder create(final NetconfEXICodec codec) throws EXIException {
-        return new EXIMessageDecoder(codec.getReader());
     }
 
     @Override
@@ -84,13 +76,13 @@ public final class EXIMessageDecoder extends MessageDecoder {
             LOG.trace("Received to decode: {}", ByteBufUtil.hexDump(in));
         }
 
-        final TransformerHandler handler = FACTORY.newTransformerHandler();
+        final var handler = FACTORY.newTransformerHandler();
         reader.setContentHandler(handler);
 
-        final DOMResult domResult = new DOMResult(documentBuilder.newDocument());
+        final var domResult = new DOMResult(documentBuilder.newDocument());
         handler.setResult(domResult);
 
-        try (InputStream is = new ByteBufInputStream(in)) {
+        try (var is = new ByteBufInputStream(in)) {
             // Performs internal reset before doing anything
             reader.parse(new InputSource(is));
         }
index 88156aea7f3a2deb18b8db44c819fe4fd6f8eece..cadf61193a3847dfa3e6abd6fa703d30e581060e 100644 (file)
@@ -13,28 +13,23 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufOutputStream;
 import io.netty.channel.ChannelHandlerContext;
 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;
 import org.opendaylight.netconf.api.messages.NetconfMessage;
 import org.opendaylight.netconf.codec.MessageEncoder;
 import org.opendaylight.netconf.shaded.exificient.core.exceptions.EXIException;
-import org.opendaylight.netconf.shaded.exificient.main.api.sax.SAXEncoder;
+import org.opendaylight.netconf.shaded.exificient.main.api.sax.SAXFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class EXIMessageEncoder extends MessageEncoder {
+final class EXIMessageEncoder extends MessageEncoder {
     private static final Logger LOG = LoggerFactory.getLogger(EXIMessageEncoder.class);
-    private final NetconfEXICodec codec;
 
-    private EXIMessageEncoder(final NetconfEXICodec codec) {
-        this.codec = requireNonNull(codec);
-    }
+    private final SAXFactory factory;
 
-    public static EXIMessageEncoder create(final NetconfEXICodec codec) {
-        return new EXIMessageEncoder(codec);
+    EXIMessageEncoder(final SAXFactory factory) {
+        this.factory = requireNonNull(factory);
     }
 
     @Override
@@ -42,10 +37,10 @@ public final class EXIMessageEncoder extends MessageEncoder {
             throws IOException, TransformerException, EXIException {
         LOG.trace("Sent to encode : {}", msg);
 
-        try (OutputStream os = new ByteBufOutputStream(out)) {
-            final SAXEncoder encoder = codec.getWriter();
+        try (var os = new ByteBufOutputStream(out)) {
+            final var encoder = factory.createEXIWriter();
             encoder.setOutputStream(os);
-            final Transformer transformer = ThreadLocalTransformers.getDefaultTransformer();
+            final var transformer = ThreadLocalTransformers.getDefaultTransformer();
             transformer.transform(new DOMSource(msg.getDocument()), new SAXResult(encoder));
         }
     }
index 415afe3d0abad056a01a6b6301ec05f972177025..ad64a78c34caec61de96b8492eb63706cf8e7033 100644 (file)
@@ -9,13 +9,16 @@ package org.opendaylight.netconf.nettyutil.handler;
 
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.netconf.codec.MessageDecoder;
+import org.opendaylight.netconf.codec.MessageEncoder;
 import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
 import org.opendaylight.netconf.shaded.exificient.core.EXIFactory;
 import org.opendaylight.netconf.shaded.exificient.core.exceptions.EXIException;
-import org.opendaylight.netconf.shaded.exificient.main.api.sax.SAXEncoder;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 
@@ -30,8 +33,8 @@ public final class NetconfEXICodec {
      * Since we have a limited number of options we can have, instantiating a weak cache
      * will allow us to reuse instances where possible.
      */
-    private static final LoadingCache<EXIParameters, NetconfEXICodec> CODECS =
-            CacheBuilder.newBuilder().weakValues().build(new CacheLoader<EXIParameters, NetconfEXICodec>() {
+    private static final LoadingCache<EXIParameters, @NonNull NetconfEXICodec> CODECS =
+            CacheBuilder.newBuilder().weakValues().build(new CacheLoader<>() {
                 @Override
                 public NetconfEXICodec load(final EXIParameters key) {
                     return new NetconfEXICodec(key.getFactory());
@@ -44,17 +47,22 @@ public final class NetconfEXICodec {
         this.exiFactory = new ThreadLocalSAXFactory(requireNonNull(exiFactory));
     }
 
-    public static NetconfEXICodec forParameters(final EXIParameters parameters) {
+    public static @NonNull NetconfEXICodec forParameters(final EXIParameters parameters) {
         return CODECS.getUnchecked(parameters);
     }
 
-    ThreadLocalSAXDecoder getReader() throws EXIException {
-        final ThreadLocalSAXDecoder reader = exiFactory.createEXIReader();
+    public @NonNull MessageDecoder newMessageDecoder() throws EXIException {
+        final var reader = exiFactory.createEXIReader();
         reader.setEntityResolver(ENTITY_RESOLVER);
-        return reader;
+        return new EXIMessageDecoder(reader);
     }
 
-    SAXEncoder getWriter() throws EXIException {
-        return exiFactory.createEXIWriter();
+    public @NonNull MessageEncoder newMessageEncoder() {
+        return new EXIMessageEncoder(exiFactory);
+    }
+
+    @VisibleForTesting
+    ThreadLocalSAXFactory exiFactory() {
+        return exiFactory;
     }
 }
index 60358ed36ad874dd2c0e18c40939fcff384bd774..426bc6e1078fcb3ebc26b84a8c2e88f0ee0e6dba 100644 (file)
@@ -25,8 +25,6 @@ import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelPipeline;
 import io.netty.channel.ChannelPromise;
 import io.netty.channel.EventLoop;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToByteEncoder;
 import java.io.EOFException;
 import java.util.Optional;
 import java.util.Set;
@@ -133,7 +131,7 @@ class AbstractNetconfSessionTest {
         testingNetconfSession = spy(testingNetconfSession);
 
         testingNetconfSession.startExiCommunication(NetconfStartExiMessageProvider.create(EXIParameters.empty(), "4"));
-        verify(testingNetconfSession).addExiHandlers(any(ByteToMessageDecoder.class), any(MessageToByteEncoder.class));
+        verify(testingNetconfSession).addExiHandlers(any(MessageDecoder.class), any(MessageEncoder.class));
     }
 
     @Test
index bda83699ddaffc3a292574641f83ec03ee808ce3..58e69cdf6dc3564a2eb15bfa3b9170b637fdaa97 100644 (file)
@@ -8,10 +8,9 @@
 package org.opendaylight.netconf.nettyutil;
 
 import io.netty.channel.Channel;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToByteEncoder;
 import org.opendaylight.netconf.api.NetconfSessionListener;
-import org.opendaylight.netconf.api.messages.NetconfMessage;
+import org.opendaylight.netconf.codec.MessageDecoder;
+import org.opendaylight.netconf.codec.MessageEncoder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.SessionIdType;
 
 class TestingNetconfSession
@@ -27,11 +26,12 @@ class TestingNetconfSession
     }
 
     @Override
-    protected void addExiHandlers(final ByteToMessageDecoder decoder,
-                                  final MessageToByteEncoder<NetconfMessage> encoder) {
+    protected void addExiHandlers(final MessageDecoder decoder, final MessageEncoder encoder) {
+        // No-op
     }
 
     @Override
     public void stopExiCommunication() {
+        // No-op
     }
 }
index 7877210d86b280b58c582eb76a5f804124f07ac7..34e2b77961eef74540430eb95180cb1d1ebb8f57 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.netconf.nettyutil.handler;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 
 import io.netty.buffer.Unpooled;
 import java.io.ByteArrayOutputStream;
@@ -27,16 +28,16 @@ import org.xmlunit.builder.DiffBuilder;
 class NetconfEXIHandlersTest {
     private final String msgAsString = "<netconf-message/>";
 
-    private EXIMessageEncoder netconfMessageToEXIEncoder;
-    private EXIMessageDecoder netconfEXIMessageDecoder;
+    private EXIMessageEncoder exiEncoder;
+    private EXIMessageDecoder exiDecoder;
     private NetconfMessage msg;
     private byte[] msgAsExi;
 
     @BeforeEach
     void setUp() throws Exception {
         final var codec = NetconfEXICodec.forParameters(EXIParameters.empty());
-        netconfMessageToEXIEncoder = EXIMessageEncoder.create(codec);
-        netconfEXIMessageDecoder = EXIMessageDecoder.create(codec);
+        exiEncoder = assertInstanceOf(EXIMessageEncoder.class, codec.newMessageEncoder());
+        exiDecoder = assertInstanceOf(EXIMessageDecoder.class, codec.newMessageDecoder());
 
         msg = new NetconfMessage(XmlUtil.readXmlToDocument(msgAsString));
         msgAsExi = msgToExi(msg, codec);
@@ -44,7 +45,7 @@ class NetconfEXIHandlersTest {
 
     private static byte[] msgToExi(final NetconfMessage msg, final NetconfEXICodec codec) throws Exception {
         final var bos = new ByteArrayOutputStream();
-        final var encoder = codec.getWriter();
+        final var encoder = codec.exiFactory().createEXIWriter();
         encoder.setOutputStream(bos);
         ThreadLocalTransformers.getDefaultTransformer().transform(new DOMSource(msg.getDocument()),
             new SAXResult(encoder));
@@ -54,7 +55,7 @@ class NetconfEXIHandlersTest {
     @Test
     void testEncodeDecode() throws Exception {
         final var buffer = Unpooled.buffer();
-        netconfMessageToEXIEncoder.encode(null, msg, buffer);
+        exiEncoder.encode(null, msg, buffer);
         final int exiLength = msgAsExi.length;
         // array from buffer is cca 256 n length, compare only subarray
         assertArrayEquals(msgAsExi, Arrays.copyOfRange(buffer.array(), 0, exiLength));
@@ -65,7 +66,7 @@ class NetconfEXIHandlersTest {
         }
 
         final var out = new ArrayList<>();
-        netconfEXIMessageDecoder.decode(null, buffer, out);
+        exiDecoder.decode(null, buffer, out);
 
         final var diff = DiffBuilder.compare(msg.getDocument())
             .withTest(((NetconfMessage) out.get(0)).getDocument())
index 56ef3659d8b43955b17837d0f6349b9ea832939e..8dee1be30d25457e0fad751eb7f23d2a7e29e935 100644 (file)
@@ -10,10 +10,9 @@ package org.opendaylight.netconf.client;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.channel.Channel;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToByteEncoder;
 import java.util.Collection;
-import org.opendaylight.netconf.api.messages.NetconfMessage;
+import org.opendaylight.netconf.codec.MessageDecoder;
+import org.opendaylight.netconf.codec.MessageEncoder;
 import org.opendaylight.netconf.codec.XMLMessageDecoder;
 import org.opendaylight.netconf.nettyutil.AbstractNetconfExiSession;
 import org.opendaylight.netconf.nettyutil.handler.XMLMessageEncoder;
@@ -53,8 +52,7 @@ public class NetconfClientSession
     }
 
     @Override
-    protected void addExiHandlers(final ByteToMessageDecoder decoder,
-                                  final MessageToByteEncoder<NetconfMessage> encoder) {
+    protected void addExiHandlers(final MessageDecoder decoder, final MessageEncoder encoder) {
         // TODO used only in negotiator, client supports only auto start-exi
         replaceMessageDecoder(decoder);
         replaceMessageEncoder(encoder);
index 176509f13b2baefac6dd74a33a18be4e0aff676f..30b5d311eae5cc8151950897d622610d76c1835d 100644 (file)
@@ -41,12 +41,14 @@ import org.opendaylight.netconf.api.messages.NetconfMessage;
 import org.opendaylight.netconf.api.messages.RpcMessage;
 import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.netconf.codec.ChunkedFrameEncoder;
+import org.opendaylight.netconf.codec.MessageDecoder;
 import org.opendaylight.netconf.codec.XMLMessageDecoder;
 import org.opendaylight.netconf.common.impl.DefaultNetconfTimer;
-import org.opendaylight.netconf.nettyutil.handler.EXIMessageDecoder;
 import org.opendaylight.netconf.nettyutil.handler.HelloXMLMessageDecoder;
+import org.opendaylight.netconf.nettyutil.handler.NetconfEXICodec;
 import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
 import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessageProvider;
+import org.opendaylight.netconf.shaded.exificient.core.exceptions.EXIException;
 import org.opendaylight.netconf.test.util.XmlFileLoader;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.SessionIdType;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -108,7 +110,15 @@ class NetconfClientSessionNegotiatorTest {
         doReturn(pipeline).when(pipeline).replace(any(ChannelHandler.class), anyString(),
             any(NetconfClientSession.class));
         doReturn(null).when(pipeline).replace(anyString(), anyString(), any(MessageToByteEncoder.class));
-        doReturn(null).when(pipeline).replace(anyString(), anyString(), any(EXIMessageDecoder.class));
+
+        Class<? extends MessageDecoder> exiClass;
+        try {
+            exiClass = NetconfEXICodec.forParameters(EXIParameters.empty()).newMessageDecoder().getClass();
+        } catch (EXIException e) {
+            throw new AssertionError(e);
+        }
+
+        doReturn(null).when(pipeline).replace(anyString(), anyString(), any(exiClass));
         return pipeline;
     }
 
index c85693a6e03398c14fd37f787fd001dc24061594..94d8fd7de4fa4803b85adb3f56339b73c76b2bc1 100644 (file)
@@ -21,8 +21,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.jupiter.MockitoExtension;
-import org.opendaylight.netconf.nettyutil.handler.EXIMessageDecoder;
-import org.opendaylight.netconf.nettyutil.handler.EXIMessageEncoder;
 import org.opendaylight.netconf.nettyutil.handler.NetconfEXICodec;
 import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.SessionIdType;
@@ -50,9 +48,7 @@ class NetconfClientSessionTest {
         Mockito.doReturn(channelHandler).when(pipeline).replace(anyString(), anyString(), any(ChannelHandler.class));
 
         final NetconfClientSession session = new NetconfClientSession(sessionListener, channel, sessId, caps);
-        final EXIMessageEncoder exiEncoder = EXIMessageEncoder.create(codec);
-        final EXIMessageDecoder exiDecoder = EXIMessageDecoder.create(codec);
-        session.addExiHandlers(exiDecoder, exiEncoder);
+        session.addExiHandlers(codec.newMessageDecoder(), codec.newMessageEncoder());
         session.stopExiCommunication();
 
         assertEquals(caps, session.getServerCapabilities());
index 716ab24260533b7b34226e5320f173c61e2dcfba..0bd20c98801a375cfc55f02cf770d94f60a75333 100644 (file)
@@ -13,8 +13,6 @@ import static com.google.common.base.Verify.verify;
 import com.google.common.net.InetAddresses;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelFuture;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToByteEncoder;
 import java.net.Inet4Address;
 import java.net.InetAddress;
 import java.time.Instant;
@@ -25,6 +23,8 @@ import java.util.regex.Pattern;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
 import org.opendaylight.netconf.api.messages.NetconfMessage;
 import org.opendaylight.netconf.api.messages.NotificationMessage;
+import org.opendaylight.netconf.codec.MessageDecoder;
+import org.opendaylight.netconf.codec.MessageEncoder;
 import org.opendaylight.netconf.codec.XMLMessageDecoder;
 import org.opendaylight.netconf.nettyutil.AbstractNetconfExiSession;
 import org.opendaylight.netconf.nettyutil.handler.XMLMessageEncoder;
@@ -159,8 +159,7 @@ public final class NetconfServerSession extends AbstractNetconfExiSession<Netcon
     }
 
     @Override
-    protected void addExiHandlers(final ByteToMessageDecoder decoder,
-                                  final MessageToByteEncoder<NetconfMessage> encoder) {
+    protected void addExiHandlers(final MessageDecoder decoder, final MessageEncoder encoder) {
         replaceMessageDecoder(decoder);
         replaceMessageEncoderAfterNextMessage(encoder);
     }
index 6ac0786e3f753437a3d7e304f66c4d82b374b70c..bbc7f191e81236369ca6dda524a551a4a667bc76 100644 (file)
@@ -30,8 +30,6 @@ import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.netconf.codec.MessageDecoder;
 import org.opendaylight.netconf.codec.MessageEncoder;
 import org.opendaylight.netconf.codec.XMLMessageDecoder;
-import org.opendaylight.netconf.nettyutil.handler.EXIMessageDecoder;
-import org.opendaylight.netconf.nettyutil.handler.EXIMessageEncoder;
 import org.opendaylight.netconf.nettyutil.handler.NetconfEXICodec;
 import org.opendaylight.netconf.nettyutil.handler.XMLMessageEncoder;
 import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
@@ -179,7 +177,7 @@ class NetconfServerSessionTest {
         channel.pipeline().addLast(MessageDecoder.HANDLER_NAME, new XMLMessageDecoder());
         channel.pipeline().addLast(MessageEncoder.HANDLER_NAME, new XMLMessageEncoder());
         final var codec = NetconfEXICodec.forParameters(EXIParameters.empty());
-        session.addExiHandlers(EXIMessageDecoder.create(codec), EXIMessageEncoder.create(codec));
+        session.addExiHandlers(codec.newMessageDecoder(), codec.newMessageEncoder());
     }
 
     @Test