Hi there, I was writing some prototype codes that uses MINA to broadcast some message in a heterogeneous network. For simplicity and fast development time, I used ObjectSerializationEncoder/Decoder. Somehow, a exception was occurred when sending messages(serializable object) between a windows machine and a linux machine. (detailed exception stack trace is attached at the end of this post.) Messages sent from windows to windows boxes are fine. Plain strings between windows and Linux also been received normally. I just wonder if anyone has met this problem before?
Thanks in advance, Qi 13 Dec. 2007 I'm using MINA 1.1.5. The windows machine has windows XP SP2 (32bit), JRE 1.6.0 installed. The Linux machine has fedora 5 (Linux version 2.6.20-1.2320.fc5) and JRE 1.6.0. Here's the full stack trace: ExpiringMapExpirer-1 [INFO ] [/192.168.1.100:3207] CLOSE - mina.BroadcastReceiver$1 ExpiringMapExpirer-1 [INFO ] [/192.168.1.100:3207] CLOSED - mina.BroadcastReceiver$1 session closed DatagramAcceptor-0 [INFO ] [/192.168.1.21:33435] CREATED - mina.BroadcastReceiver$1 session created DatagramAcceptor-0 [INFO ] [/192.168.1.21:33435] OPENED - mina.BroadcastReceiver$1 DatagramAcceptor-0 [INFO ] [/192.168.1.21:33435] RECEIVED: HeapBuffer[pos=0 lim=106 cap=128: 00 00 00 66 AC ED 00 05 73 72 00 27 62 6F 6F 2E 63 6F 6D 6D 6F 6E 73 2E 63 61 63 68 65 2E 65 76 65 6E 74 2E 4D 6F 63 6B 59 6F 6F 62 65 72 45 76 65 6E 74 78 72 00 2B 62 6F 6F 2E 63 6F 6D 6D 6F 6E 73 2E 63 61 63 68 65 2E 65 76 65 6E 74 2E 41 62 73 74 72 61 63 74 59 6F 6F 62 65 72 45 76 65 6E 74 78 70 74 00 03 31 32 33] - mina.BroadcastReceiver$1 DatagramAcceptor-0 [WARN ] [/192.168.1.21:33435] EXCEPTION: - mina.BroadcastReceiver$1 org.apache.mina.filter.codec.ProtocolDecoderException: org.apache.mina.common.BufferDataException: java.io.EOFException (Hexdump: empty) at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:164) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648) at org.apache.mina.filter.LoggingFilter.messageReceived(LoggingFilter.java:89) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648) at org.apache.mina.common.support.AbstractIoFilterChain$HeadFilter.messageReceived(AbstractIoFilterChain.java:499) at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299) at org.apache.mina.common.support.AbstractIoFilterChain.fireMessageReceived(AbstractIoFilterChain.java:293) at org.apache.mina.transport.socket.nio.support.DatagramAcceptorDelegate.readSession(DatagramAcceptorDelegate.java:400) at org.apache.mina.transport.socket.nio.support.DatagramAcceptorDelegate.processReadySessions(DatagramAcceptorDelegate.java:368) at org.apache.mina.transport.socket.nio.support.DatagramAcceptorDelegate.access$1200(DatagramAcceptorDelegate.java:61) at org.apache.mina.transport.socket.nio.support.DatagramAcceptorDelegate$Worker.run(DatagramAcceptorDelegate.java:320) at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51) at java.lang.Thread.run(Unknown Source) Caused by: org.apache.mina.common.BufferDataException: java.io.EOFException at org.apache.mina.common.ByteBuffer.getObject(ByteBuffer.java:1530) at org.apache.mina.filter.codec.serialization.ObjectSerializationDecoder.doDecode(ObjectSerializationDecoder.java:92) at org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:133) at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:157) ... 16 more Caused by: java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(Unknown Source) at java.io.ObjectInputStream$BlockDataInputStream.readUTF(Unknown Source) at java.io.ObjectInputStream.readUTF(Unknown Source) at java.io.ObjectStreamClass.readNonProxy(Unknown Source) at java.io.ObjectInputStream.readClassDescriptor(Unknown Source) at org.apache.mina.common.ByteBuffer$3.readClassDescriptor(ByteBuffer.java:1516) at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source) at java.io.ObjectInputStream.readClassDesc(Unknown Source) at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at org.apache.mina.common.ByteBuffer.getObject(ByteBuffer.java:1528) ... 19 more Exception caught ExpiringMapExpirer-1 [INFO ] [/192.168.1.21:33435] CLOSE - mina.BroadcastReceiver$1 ExpiringMapExpirer-1 [INFO ] [/192.168.1.21:33435] CLOSED - mina.BroadcastReceiver$1 session closed /**************************************** The acceptor code: BroadcastReceiver.java *******************************************/ package mina; import java.io.IOException; import java.net.InetSocketAddress; import org.apache.mina.common.ByteBuffer; import org.apache.mina.common.IoHandlerAdapter; import org.apache.mina.common.IoSession; import org.apache.mina.common.PooledByteBufferAllocator; import org.apache.mina.common.SimpleByteBufferAllocator; import org.apache.mina.common.ThreadModel; import org.apache.mina.filter.LoggingFilter; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.transport.socket.nio.DatagramAcceptor; import org.apache.mina.transport.socket.nio.DatagramAcceptorConfig; public class BroadcastReceiver { public static void main(String[] args) throws IOException { ByteBuffer.setUseDirectBuffers(false); ByteBuffer.setAllocator(new SimpleByteBufferAllocator()); DatagramAcceptor receiver = new DatagramAcceptor(); DatagramAcceptorConfig config = new DatagramAcceptorConfig(); config.setThreadModel(ThreadModel.MANUAL); config.getSessionConfig().setBroadcast(true); config.getSessionConfig().setReuseAddress(true); config.getFilterChain().addLast("log", new LoggingFilter()); ObjectSerializationCodecFactory oscf = new ObjectSerializationCodecFactory(); oscf.setDecoderMaxObjectSize(1048576); config.getFilterChain().addLast("codec", new ProtocolCodecFilter(oscf)); receiver.bind(new InetSocketAddress(7500), new IoHandlerAdapter() { @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { System.out.println("Exception caught"); cause.printStackTrace(); } @Override public void messageReceived(IoSession session, Object message) throws Exception { System.out.println("message received:" + message.toString()); } @Override public void sessionClosed(IoSession session) throws Exception { System.out.println("session closed"); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("session created"); } }, config); } } /******************************************* *The connector side code: BroadcastSender.java *******************************************/ package mina; import java.net.InetSocketAddress; import org.apache.mina.common.ByteBuffer; import org.apache.mina.common.ConnectFuture; import org.apache.mina.common.IoHandlerAdapter; import org.apache.mina.common.IoSession; import org.apache.mina.common.PooledByteBufferAllocator; import org.apache.mina.common.ThreadModel; import org.apache.mina.common.WriteFuture; import org.apache.mina.filter.LoggingFilter; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.transport.socket.nio.DatagramConnector; import org.apache.mina.transport.socket.nio.DatagramConnectorConfig; public class BroadcastSender { public static void main(String[] args) { ByteBuffer.setUseDirectBuffers(false); ByteBuffer.setAllocator(new PooledByteBufferAllocator()); DatagramConnector sender = new DatagramConnector(); DatagramConnectorConfig config = new DatagramConnectorConfig(); config.getFilterChain().addFirst("log", new LoggingFilter()); config.getFilterChain().addFirst("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory())); config.getSessionConfig().setBroadcast(true); config.setConnectTimeout(2); config.setThreadModel(ThreadModel.MANUAL); config.getSessionConfig().setReuseAddress(true); ConnectFuture cf = sender.connect(new InetSocketAddress("192.168.1.255", 7500), new IoHandlerAdapter() { @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { cause.printStackTrace(); System.out.println("exceptionCaught"); } @Override public void messageSent(IoSession session, Object message) throws Exception { System.out.println("messageSent"); } @Override public void sessionClosed(IoSession session) throws Exception { System.out.println("sessionClosed"); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("sessionCreated"); } @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("sessionOpened"); } }, config); cf.join(); if (cf.isConnected()) { IoSession session = cf.getSession(); WriteFuture wf = session.write(new MockEvent("123")); wf.join(); session.close(); session.getCloseFuture().join(); } } } /************************* MockEvent.java ************************/ package mina; public class MockEvent implements Serializable { private static final long serialVersionUID = -147055975212279720L; private String message; public MockEvent (String message) { this.message = message; } public String toString() { return message; } } -- View this message in context: http://www.nabble.com/Problem-when-use-ObjectSerializationCodecFactory-in-Datagram-broadcasting-between-linux-and-window-tp14311279s16868p14311279.html Sent from the Apache MINA Support Forum mailing list archive at Nabble.com.