Hello,
I test the new release of mina (2.0.3) and an error occurs on serial
transport when I send a message (Encoding). Here is the error:
Exception in thread "Thread-13" java.lang.ClassCastException:
com.intesens.communication.messages.network.dongle.outgoing.DetectDongleMessage
cannot be cast to org.apache.mina.core.buffer.IoBuffer
at
org.apache.mina.transport.serial.SerialSessionImpl.flushWrites(SerialSessionImpl.java:178)
at
org.apache.mina.transport.serial.SerialSessionImpl.access$200(SerialSessionImpl.java:50)
at
org.apache.mina.transport.serial.SerialSessionImpl$WriteWorker.run(SerialSessionImpl.java:154)
My context is a 3 layer codec:
connector.getFilterChain().addLast(PROTOCOL_NAME_TRANSPORT,
new ProtocolCodecFilter(new TransportProtocolCodecFactory()));
connector.getFilterChain().addLast(PROTOCOL_NAME_INTERMEDIATE,
new ProtocolCodecFilter(new DongleProtocolCodecFactory()));
connector.getFilterChain().addLast(PROTOCOL_NAME_BUSINESS,
new ProtocolCodecFilter(new BusinessProtocolCodecFactory()));
After some research in code, it appears that when a message is encoded, the
first layer to encode is the Business protocol. That's OK.
When it write to output, instead of given it to the intermediate layer, it is given to
the "Next Layer" which is appears to be nothing because business layer is the
last one.
org.apache.mina.filter.codec.AbstractProtocolEncoderOutput.java:56
messageQueue.offer(encodedMessage);
org.apache.mina.filter.codec.ProtocolCodecFilter:461
nextFilter.filterWrite(session, new EncodedWriteRequest(encodedMessage,
future, writeRequest.getDestination()));
Do you know if it's a normal behavior? Do you see what changes could
have cause this issue?
Cordialy,
Francois