Used super.XXX instead of manipulating the controller directly in filters
diff --git a/coap/src/main/java/org/apache/mina/coap/retry/CoapRetryFilter.java b/coap/src/main/java/org/apache/mina/coap/retry/CoapRetryFilter.java
index 83084ad..5c6777f 100644
--- a/coap/src/main/java/org/apache/mina/coap/retry/CoapRetryFilter.java
+++ b/coap/src/main/java/org/apache/mina/coap/retry/CoapRetryFilter.java
@@ -40,13 +40,16 @@
  * An {@link IoFilter} in charge of messages retransmissions.
  * 
  * <p>
- * In case of messages to be sent to the client, the filter retransmits the <i>Confirmable</i> message at exponentially
- * increasing intervals, until it receives an acknowledgment (or <i>Reset</i> message), or runs out of attempts.
+ * In case of messages to be sent to the client, the filter retransmits the
+ * <i>Confirmable</i> message at exponentially increasing intervals, until it
+ * receives an acknowledgment (or <i>Reset</i> message), or runs out of
+ * attempts.
  * </p>
  * 
  * <p>
- * In case of received <i>Confirmable</i> messages, the filter keeps track of the acknowledged transmissions in order to
- * avoid multiple processing of duplicated messages.
+ * In case of received <i>Confirmable</i> messages, the filter keeps track of
+ * the acknowledged transmissions in order to avoid multiple processing of
+ * duplicated messages.
  * </p>
  */
 public class CoapRetryFilter extends AbstractIoFilter {
@@ -59,7 +62,10 @@
     /** The confirmable messages waiting to be acknowledged */
     private Map<String, CoapTransmission> inFlight = new ConcurrentHashMap<>();
 
-    /** The list of processed messages used to handle duplicate copies of Confirmable messages */
+    /**
+     * The list of processed messages used to handle duplicate copies of
+     * Confirmable messages
+     */
     private ExpiringMap<String, CoapMessage> processed = new ExpiringMap<String, CoapMessage>(retryExecutor);
 
     /**
@@ -75,29 +81,34 @@
         switch (coapMsg.getType()) {
         case NON_CONFIRMABLE:
             // non confirmable message, let's move to the next filter
-            controller.callReadNextFilter(coapMsg);
+            super.messageReceived(session, coapMsg, controller);
             break;
+
         case CONFIRMABLE:
             // check if this is a duplicate of a message already processed
             CoapMessage ack = processed.get(transmissionId);
+
             if (ack != null) {
-                // stop the filter chain and send again the ack since it was probably lost
+                // stop the filter chain and send again the ack since it was
+                // probably lost
                 LOGGER.debug("Duplicated messages detected with ID {} in session {}", coapMsg.requestId(), session);
                 controller.callWriteMessageForRead(ack);
             } else {
-                controller.callReadNextFilter(coapMsg);
+                super.messageReceived(session, coapMsg, controller);
             }
 
             break;
         case ACK:
         case RESET:
             CoapTransmission t = inFlight.get(transmissionId);
+
             if (t != null) {
                 // cancel the scheduled retransmission
                 t.getRetryFuture().cancel(false);
                 inFlight.remove(transmissionId);
             }
-            controller.callReadNextFilter(coapMsg);
+
+            super.messageReceived(session, coapMsg, controller);
             break;
         }
     }
@@ -106,8 +117,7 @@
      * {@inheritDoc}
      */
     @Override
-    public void messageWriting(final IoSession session, final WriteRequest message,
-            WriteFilterChainController controller) {
+    public void messageWriting(final IoSession session, final WriteRequest message, WriteFilterChainController controller) {
         LOGGER.debug("Processing a MESSAGE_WRITING for session {}", session);
 
         final CoapMessage coapMsg = (CoapMessage) message.getMessage();
@@ -120,7 +130,8 @@
             break;
         case RESET:
         case ACK:
-            // let's keep track of the message to avoid processing it again in case of duplicate copy.
+            // let's keep track of the message to avoid processing it again in
+            // case of duplicate copy.
             processed.put(transmissionId, coapMsg);
 
             controller.callWriteNextFilter(message);
@@ -141,7 +152,8 @@
                 public void run() {
                     CoapTransmission t = inFlight.get(transmissionId);
 
-                    // send again the message if the maximum number of attempts is not reached
+                    // send again the message if the maximum number of attempts
+                    // is not reached
                     if (t != null && t.timeout()) {
                         LOGGER.debug("Retry for message with ID {}", coapMsg.requestId());
                         session.write(coapMsg);
diff --git a/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java b/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
index 65974b4..04228e1 100644
--- a/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
+++ b/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
@@ -36,11 +36,16 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * An {@link IoFilter} which translates binary or protocol specific data into message objects and vice versa using
- * {@link ProtocolCodecFactory}, {@link ProtocolEncoder}, or {@link ProtocolDecoder}.
+ * An {@link IoFilter} which translates binary or protocol specific data into
+ * message objects and vice versa using {@link ProtocolCodecFactory},
+ * {@link ProtocolEncoder}, or {@link ProtocolDecoder}.
  * 
- * @param MESSAGE the kind of high level business message this filter will encode and decode.
- * @param ENCODED the kind of low level message (most of time {@link ByteBuffer}) this filter will produce of consume.
+ * @param MESSAGE
+ *            the kind of high level business message this filter will encode
+ *            and decode.
+ * @param ENCODED
+ *            the kind of low level message (most of time {@link ByteBuffer})
+ *            this filter will produce of consume.
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public class ProtocolCodecFilter<MESSAGE, ENCODED, ENCODING_STATE, DECODING_STATE> extends AbstractIoFilter {
@@ -60,7 +65,8 @@
     private static final AttributeKey<Object> DECODER = new AttributeKey<Object>(Object.class, "internal_decoder");
 
     /**
-     * Creates a new instance of ProtocolCodecFilter, with the specified encoder and decoder.
+     * Creates a new instance of ProtocolCodecFilter, with the specified encoder
+     * and decoder.
      * 
      */
     public ProtocolCodecFilter(ProtocolEncoder<MESSAGE, ENCODED, ENCODING_STATE> encoder,
@@ -72,8 +78,9 @@
     }
 
     /**
-     * Process the incoming message, calling the session decoder. As the incoming buffer might contains more than one
-     * messages, we have to loop until the decoder throws an exception. <code>
+     * Process the incoming message, calling the session decoder. As the
+     * incoming buffer might contains more than one messages, we have to loop
+     * until the decoder throws an exception. <code>
      *  while ( buffer not empty )
      *    try
      *      decode ( buffer )
@@ -92,7 +99,7 @@
         MESSAGE msg;
         try {
             while (((msg = decoder.decode((ENCODED) in, state)) != null)) {
-                controller.callReadNextFilter(msg);
+                super.messageReceived(session, msg, controller);
             }
         } catch (ProtocolDecoderException e) {
             LOGGER.debug("decoding exception : ", e);
@@ -111,7 +118,7 @@
         ENCODED encoded = encoder.encode((MESSAGE) message.getMessage(), getEncodingState(session));
         message.setMessage(encoded);
 
-        controller.callWriteNextFilter(message);
+        super.messageWriting(session, message, controller);
     }
 
     /**
@@ -126,6 +133,7 @@
 
         DECODING_STATE decodingState = decoder.createDecoderState();
         session.setAttribute(DECODER, decodingState);
+        super.sessionOpened(session);
     }
 
     /**
@@ -134,6 +142,7 @@
     @Override
     public void sessionClosed(IoSession session) {
         decoder.finishDecode(getDecodingState(session));
+        super.sessionClosed(session);
 
     }
 
diff --git a/core/src/test/java/org/apache/mina/transport/bio/BioUdpServerFilterEventTest.java b/core/src/test/java/org/apache/mina/transport/bio/BioUdpServerFilterEventTest.java
index 246eb95..96ea739 100644
--- a/core/src/test/java/org/apache/mina/transport/bio/BioUdpServerFilterEventTest.java
+++ b/core/src/test/java/org/apache/mina/transport/bio/BioUdpServerFilterEventTest.java
@@ -19,7 +19,9 @@
  */
 package org.apache.mina.transport.bio;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 import java.net.DatagramPacket;
@@ -144,13 +146,12 @@
     private class MyCodec extends AbstractIoFilter {
 
         @Override
-        public void messageReceived(final IoSession session, final Object message,
-                final ReadFilterChainController controller) {
+        public void messageReceived(final IoSession session, final Object message, final ReadFilterChainController controller) {
             if (message instanceof ByteBuffer) {
                 final ByteBuffer in = (ByteBuffer) message;
                 final byte[] buffer = new byte[in.remaining()];
                 in.get(buffer);
-                controller.callReadNextFilter(new String(buffer));
+                super.messageReceived(session, new String(buffer), controller);
             } else {
                 fail();
             }
@@ -159,7 +160,7 @@
         @Override
         public void messageWriting(IoSession session, WriteRequest writeRequest, WriteFilterChainController controller) {
             writeRequest.setMessage(ByteBuffer.wrap(writeRequest.getMessage().toString().getBytes()));
-            controller.callWriteNextFilter(writeRequest);
+            super.messageWriting(session, writeRequest, controller);
         }
     }
 
@@ -178,8 +179,7 @@
         }
 
         @Override
-        public void messageReceived(final IoSession session, final Object message,
-                final ReadFilterChainController controller) {
+        public void messageReceived(final IoSession session, final Object message, final ReadFilterChainController controller) {
             LOG.info("** message received {}", message);
             msgReadLatch.countDown();
             session.write(message.toString());
diff --git a/core/src/test/java/org/apache/mina/transport/nio/NioTcpClientFilterEventTest.java b/core/src/test/java/org/apache/mina/transport/nio/NioTcpClientFilterEventTest.java
index d0e27f5..265f19a 100644
--- a/core/src/test/java/org/apache/mina/transport/nio/NioTcpClientFilterEventTest.java
+++ b/core/src/test/java/org/apache/mina/transport/nio/NioTcpClientFilterEventTest.java
@@ -19,7 +19,10 @@
  */
 package org.apache.mina.transport.nio;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 import java.net.InetSocketAddress;
@@ -38,7 +41,6 @@
 import org.apache.mina.filterchain.ReadFilterChainController;
 import org.apache.mina.filterchain.WriteFilterChainController;
 import org.apache.mina.session.WriteRequest;
-import org.apache.mina.transport.nio.NioTcpClient;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -65,8 +67,8 @@
     private final CountDownLatch closedLatch = new CountDownLatch(CLIENT_COUNT);
 
     /**
-     * Create an old IO server and use a bunch of MINA client on it. Test if the events occurs correctly in the
-     * different IoFilters.
+     * Create an old IO server and use a bunch of MINA client on it. Test if the
+     * events occurs correctly in the different IoFilters.
      */
     @Test
     public void generate_all_kind_of_client_event() throws IOException, InterruptedException, ExecutionException {
@@ -143,13 +145,12 @@
     private class MyCodec extends AbstractIoFilter {
 
         @Override
-        public void messageReceived(final IoSession session, final Object message,
-                final ReadFilterChainController controller) {
+        public void messageReceived(final IoSession session, final Object message, final ReadFilterChainController controller) {
             if (message instanceof ByteBuffer) {
                 final ByteBuffer in = (ByteBuffer) message;
                 final byte[] buffer = new byte[in.remaining()];
                 in.get(buffer);
-                controller.callReadNextFilter(new String(buffer));
+                super.messageReceived(session, new String(buffer), controller);
             } else {
                 fail();
             }
@@ -158,7 +159,7 @@
         @Override
         public void messageWriting(IoSession session, WriteRequest writeRequest, WriteFilterChainController controller) {
             writeRequest.setMessage(ByteBuffer.wrap(writeRequest.getMessage().toString().getBytes()));
-            controller.callWriteNextFilter(writeRequest);
+            super.messageWriting(session, writeRequest, controller);
         }
     }
 
@@ -177,8 +178,7 @@
         }
 
         @Override
-        public void messageReceived(final IoSession session, final Object message,
-                final ReadFilterChainController controller) {
+        public void messageReceived(final IoSession session, final Object message, final ReadFilterChainController controller) {
             LOG.info("** message received {}", message);
             msgReadLatch.countDown();
             session.write(message.toString());
diff --git a/core/src/test/java/org/apache/mina/transport/nio/NioTcpServerFilterEventTest.java b/core/src/test/java/org/apache/mina/transport/nio/NioTcpServerFilterEventTest.java
index 1d55410..6eb2d9c 100644
--- a/core/src/test/java/org/apache/mina/transport/nio/NioTcpServerFilterEventTest.java
+++ b/core/src/test/java/org/apache/mina/transport/nio/NioTcpServerFilterEventTest.java
@@ -34,9 +34,6 @@
 import org.apache.mina.filterchain.ReadFilterChainController;
 import org.apache.mina.filterchain.WriteFilterChainController;
 import org.apache.mina.session.WriteRequest;
-import org.apache.mina.transport.nio.FixedSelectorLoopPool;
-import org.apache.mina.transport.nio.NioTcpServer;
-import org.apache.mina.transport.nio.SelectorLoopPool;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -127,8 +124,9 @@
     }
 
     /**
-     * A test that creates 50 clients, each one of them writing one message. We will check that for each client we
-     * correctly process the sessionOpened, messageReceived, messageSent and sessionClosed events. We use only one
+     * A test that creates 50 clients, each one of them writing one message. We
+     * will check that for each client we correctly process the sessionOpened,
+     * messageReceived, messageSent and sessionClosed events. We use only one
      * selector to process all the OP events.
      */
     @Test
@@ -194,13 +192,12 @@
     private class MyCodec extends AbstractIoFilter {
 
         @Override
-        public void messageReceived(final IoSession session, final Object message,
-                final ReadFilterChainController controller) {
+        public void messageReceived(final IoSession session, final Object message, final ReadFilterChainController controller) {
             if (message instanceof ByteBuffer) {
                 final ByteBuffer in = (ByteBuffer) message;
                 final byte[] buffer = new byte[in.remaining()];
                 in.get(buffer);
-                controller.callReadNextFilter(new String(buffer));
+                super.messageReceived(session, new String(buffer), controller);
             } else {
                 fail();
             }
@@ -209,7 +206,7 @@
         @Override
         public void messageWriting(IoSession session, WriteRequest writeRequest, WriteFilterChainController controller) {
             writeRequest.setMessage(ByteBuffer.wrap(writeRequest.getMessage().toString().getBytes()));
-            controller.callWriteNextFilter(writeRequest);
+            super.messageWriting(session, writeRequest, controller);
         }
     }
 
@@ -228,8 +225,7 @@
         }
 
         @Override
-        public void messageReceived(final IoSession session, final Object message,
-                final ReadFilterChainController controller) {
+        public void messageReceived(final IoSession session, final Object message, final ReadFilterChainController controller) {
             LOG.info("** message received {}", message);
             msgReadLatch.countDown();
             session.write(message.toString());
diff --git a/core/src/test/java/org/apache/mina/transport/nio/NioUdpClientFilterEventTest.java b/core/src/test/java/org/apache/mina/transport/nio/NioUdpClientFilterEventTest.java
index 4fc83a8..f6d7102 100644
--- a/core/src/test/java/org/apache/mina/transport/nio/NioUdpClientFilterEventTest.java
+++ b/core/src/test/java/org/apache/mina/transport/nio/NioUdpClientFilterEventTest.java
@@ -19,7 +19,10 @@
  */
 package org.apache.mina.transport.nio;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 import java.net.DatagramPacket;
@@ -40,7 +43,6 @@
 import org.apache.mina.filterchain.ReadFilterChainController;
 import org.apache.mina.filterchain.WriteFilterChainController;
 import org.apache.mina.session.WriteRequest;
-import org.apache.mina.transport.nio.NioUdpClient;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -69,8 +71,8 @@
     private final CountDownLatch closedLatch = new CountDownLatch(CLIENT_COUNT);
 
     /**
-     * Create an old IO server and use a bunch of MINA client on it. Test if the events occurs correctly in the
-     * different IoFilters.
+     * Create an old IO server and use a bunch of MINA client on it. Test if the
+     * events occurs correctly in the different IoFilters.
      */
     @Test
     public void generate_all_kind_of_client_event() throws IOException, InterruptedException, ExecutionException {
@@ -114,8 +116,7 @@
 
             InetAddress IPAddress = receivePacket.getAddress();
             int clientPort = receivePacket.getPort();
-            DatagramPacket sendPacket = new DatagramPacket("tata".getBytes(), "tata".getBytes().length, IPAddress,
-                    clientPort);
+            DatagramPacket sendPacket = new DatagramPacket("tata".getBytes(), "tata".getBytes().length, IPAddress, clientPort);
             serverSocket.send(sendPacket);
         }
 
@@ -144,13 +145,12 @@
     private class MyCodec extends AbstractIoFilter {
 
         @Override
-        public void messageReceived(final IoSession session, final Object message,
-                final ReadFilterChainController controller) {
+        public void messageReceived(final IoSession session, final Object message, final ReadFilterChainController controller) {
             if (message instanceof ByteBuffer) {
                 final ByteBuffer in = (ByteBuffer) message;
                 final byte[] buffer = new byte[in.remaining()];
                 in.get(buffer);
-                controller.callReadNextFilter(new String(buffer));
+                super.messageReceived(session, new String(buffer), controller);
             } else {
                 fail();
             }
@@ -159,7 +159,7 @@
         @Override
         public void messageWriting(IoSession session, WriteRequest writeRequest, WriteFilterChainController controller) {
             writeRequest.setMessage(ByteBuffer.wrap(writeRequest.getMessage().toString().getBytes()));
-            controller.callWriteNextFilter(writeRequest);
+            super.messageWriting(session, writeRequest, controller);
         }
     }
 
@@ -179,8 +179,7 @@
         }
 
         @Override
-        public void messageReceived(final IoSession session, final Object message,
-                final ReadFilterChainController controller) {
+        public void messageReceived(final IoSession session, final Object message, final ReadFilterChainController controller) {
             LOG.info("** message received {}", message);
             msgReadLatch.countDown();
         }
diff --git a/core/src/test/java/org/apache/mina/transport/nio/NioUdpServerFilterEventTest.java b/core/src/test/java/org/apache/mina/transport/nio/NioUdpServerFilterEventTest.java
index b9b2f12..8c27356 100644
--- a/core/src/test/java/org/apache/mina/transport/nio/NioUdpServerFilterEventTest.java
+++ b/core/src/test/java/org/apache/mina/transport/nio/NioUdpServerFilterEventTest.java
@@ -19,7 +19,9 @@
  */
 package org.apache.mina.transport.nio;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 import java.net.DatagramPacket;
@@ -132,13 +134,12 @@
     private class MyCodec extends AbstractIoFilter {
 
         @Override
-        public void messageReceived(final IoSession session, final Object message,
-                final ReadFilterChainController controller) {
+        public void messageReceived(final IoSession session, final Object message, final ReadFilterChainController controller) {
             if (message instanceof ByteBuffer) {
                 final ByteBuffer in = (ByteBuffer) message;
                 final byte[] buffer = new byte[in.remaining()];
                 in.get(buffer);
-                controller.callReadNextFilter(new String(buffer));
+                super.messageReceived(session, new String(buffer), controller);
             } else {
                 fail();
             }
@@ -147,7 +148,7 @@
         @Override
         public void messageWriting(IoSession session, WriteRequest writeRequest, WriteFilterChainController controller) {
             writeRequest.setMessage(ByteBuffer.wrap(writeRequest.getMessage().toString().getBytes()));
-            controller.callWriteNextFilter(writeRequest);
+            super.messageWriting(session, writeRequest, controller);
         }
     }
 
@@ -165,8 +166,7 @@
         }
 
         @Override
-        public void messageReceived(final IoSession session, final Object message,
-                final ReadFilterChainController controller) {
+        public void messageReceived(final IoSession session, final Object message, final ReadFilterChainController controller) {
             LOG.info("** message received {}", message);
             msgReadLatch.countDown();
             session.write(message.toString());