Hi, I am using 2 filters 1. CompressionFilter 2. ProtocolCodecFilter
Sample code : ------------------------------------------------------------------------------------------------ acceptor.getFilterChain().addLast("compressor", new CompressionFilter()); TextLineEncoder encoder = new TextLineEncoder(serverConfig.getDataEncoding()); TextLineDecoder decoder = new TextLineDecoder(serverConfig.getDataEncoding()); decoder.setMaxLineLength(serverConfig.getBufferSize()); acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(encoder, decoder)); ------------------------------------------------------------------------------------------------ Now when I send the uncompressed data, CompressionFilter tries to decompress and throws exception. Reason: In the messageReceived method of CompressionFilter class, the first condition becomes false, and then goes for inflate method which throws exception. ------------------------------------------------------------------------------------------------ @Override public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception { if (!compressInbound || !(message instanceof IoBuffer)) { nextFilter.messageReceived(session, message); return; } Zlib inflater = (Zlib) session.getAttribute(INFLATER); if (inflater == null) { throw new IllegalStateException(); } IoBuffer inBuffer = (IoBuffer) message; IoBuffer outBuffer = inflater.inflate(inBuffer); ------------------------------------------------------------------------------------------------ compressInbound is true (set from the constructor) (message instanceof IoBuffer) is also true But if I move the CompressionFilter below ProtocolCodecFilter then (message instanceof IoBuffer) becomes false and it returns from there, without going for inflate method calls. Questions: 1. Do I need to use some other constructor to create CompressionFilter as it is always making compressInbound true? But how do I know if the incoming data is compressed or not, is it not handled by filter itself? If I know the data is not compressed then I can make compressInbound false. 2. Why the different behavior for changing the order of CompressionFilter and ProtocolCodecFilter ? -- View this message in context: http://apache-mina.10907.n7.nabble.com/Apache-Mina-CompressionFilter-always-try-to-decompress-tp47947.html Sent from the Apache MINA User Forum mailing list archive at Nabble.com.