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 );
    }
    
    
    
}

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to