Hi folks,I am trying to develop a small POC using MINA, using IoHandler, and I am getting this exception:
java.lang.IllegalStateException: Write requests must be transformed to class org.apache.mina.common.ByteBuffer: [Claudio Miranda | QE 28, cj. L, casa 3 | 30 | 9876.54 | [Tying code sucks | 23 | teste array 1, teste array 2, teste array 3, ]] at org.apache.mina.common.support.AbstractIoFilterChain$1.filterWrite(AbstractIoFilterChain.java:128)
See the attached code: ProtocolEchoHandler is the server part and there is the Client class. The exception is throw when the Client class is invoked. The MyVO is a POJO class (not serializable).
I see at Tennis example, the session.write(new TennisBall(10)); and the TennisBall is not serializable, but I thing this doesn't matter.
http://svn.apache.org/viewvc/directory/trunks/mina/examples/src/main/java/org/apache/mina/examples/tennis/Main.java?revision=400068&view=markup So, how can I use IoHandler and use session to write POJO classes ? Thanks in advance -- Claudio Miranda ___________________________________________________________________ http://www.claudius.com.br/blog claudio|em|claudius.com.br http://www.summa-tech.com Summa Technologies do Brasil http://www.soujava.org.br
package claudius;
import java.net.InetSocketAddress;
import org.apache.mina.common.ConnectFuture;
import org.apache.mina.common.IoConnectorConfig;
import org.apache.mina.common.IoSession;
import org.apache.mina.transport.socket.nio.SocketConnector;
public class Client {
public static void main(String[] args) throws Exception {
SocketConnector connector = new SocketConnector();
// Set connect timeout.
( ( IoConnectorConfig ) connector.getDefaultConfig()).setConnectTimeout( 30 );
// Start communication.
InetSocketAddress address = new InetSocketAddress("localhost",9999);
ConnectFuture connectClient = connector.connect(address, new ProtocolEchoHandler());
connectClient.join();
IoSession session = connectClient.getSession();
MyVO vo = new MyVO();
vo.setName("Claudio Miranda");
vo.setAddress("Wes Side, 274");
vo.setAge(30);
vo.setSalary(9876.54);
NotSoComplexObject complex = new NotSoComplexObject();
complex.setS1("Playing is better than typing code");
complex.setI2(new Integer(23));
complex.setArr3(new String[]{"teste array 1", "teste array 2", "teste array 3"});
vo.setObject(complex);
session.write(vo);
// Wait until the match ends.
session.getCloseFuture().join();
}
}
package claudius;
import java.net.InetSocketAddress;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.DefaultIoFilterChainBuilder;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.common.IoAcceptorConfig;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.TransportType;
import org.apache.mina.filter.LoggingFilter;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
import org.apache.mina.transport.socket.nio.SocketSessionConfig;
public class ProtocolEchoHandler extends IoHandlerAdapter {
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("messageSent");
System.out.println("messageSent ! message type: " + message.getClass().getName());
}
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println("message type: " + message.getClass().getName());
if (message instanceof ByteBuffer) {
ByteBuffer buf = (ByteBuffer) message;
String cmd = buf.toString();
System.out.println("cmd = " + cmd);
ByteBuffer wb = ByteBuffer.allocate(buf.remaining());
wb.put(buf);
wb.flip();
session.write(wb);
} else {
System.out.println("message type: " + message.getClass().getName());
}
}
public void sessionCreated(IoSession session) throws Exception {
if( session.getTransportType() == TransportType.SOCKET ) {
( ( SocketSessionConfig ) session.getConfig() ).setReceiveBufferSize( 2048 );
}
session.setIdleTime( IdleStatus.BOTH_IDLE, 10 );
}
public void sessionIdle( IoSession session, IdleStatus status ) {
System.out.println("*** IDLE #" +session.getIdleCount( IdleStatus.BOTH_IDLE ) + " ***" );
}
public void exceptionCaught( IoSession session, Throwable cause ) {
cause.printStackTrace();
session.close();
}
public static void main(String[] args) throws Exception {
int PORT = 9999;
IoAcceptor acceptor = new SocketAcceptor();
IoAcceptorConfig config = new SocketAcceptorConfig();
((SocketAcceptorConfig) config).setReuseAddress(true);
DefaultIoFilterChainBuilder chain = config.getFilterChain();
chain.addLast( "logger", new LoggingFilter() );
System.out.println( "Logging ON" );
// Bind
acceptor.bind(new InetSocketAddress(PORT), new ProtocolEchoHandler(), config);
System.out.println( "Listening on port " + PORT );
}
}
smime.p7s
Description: S/MIME Cryptographic Signature
