Hello,

I think you did not call the decodeBody() method in the decode() of the 
AbstractClass.

Please review below:
===============================================
public MessageDecoderResult decode(IoSession session, ByteBuffer in,
   ProtocolDecoderOutput out) throws Exception  {
  
  System.out.println("333");

  decodeBody(session, in);
}

 protected abstract String decodeBody(IoSession session, ByteBuffer in);
===================================================

Thanks & best regards,
Hieu Phan.


> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, October 11, 2006 4:20 PM
> To: [email protected]
> Subject: Re: I cann't work with ProtocolCodecFilter normally,asking for
> your help!!
> 
> Jeroen Brattinga thank you for your instructions
> But no matter MessageDecoderResult is OK or NOT,even the first
> statement:System.out.println(some characters) had not be reached.It's so
> confused!
> ----- Original Message -----
> From: "Jeroen Brattinga" <[EMAIL PROTECTED]>
> To: <[email protected]>
> Sent: Wednesday, October 11, 2006 5:11 PM
> Subject: Re: I cann't work with ProtocolCodecFilter normally,asking for
> your
> help!!
> 
> 
> > You should look closer to the SumUp example. But in a nutshell it comes
> > down
> > to this:
> > - for every incoming data the decoder classes are called
> > - for every decoder class the --decodable-- method is checked. If the
> > return
> > value is MessageDecoderResult.OK then the --decode-- method is called.
> > - the --decodeBody-- method is never called from the framework (!), but
> in
> > the SumUp example it is called from the --decode-- method from the
> > abstract
> > class (to provide easier subclasses that only have to implement the
> > --decodeBody-- method.
> >
> > In your case you have forgotten to return the MessageDecoderResult code
> > and
> > don't call the --decodeBody-- method from the --decode-- method.
> >
> >
> > Jeroen Brattinga
> >
> > 2006/10/11, 凌晨 <[EMAIL PROTECTED]>:
> >>
> >> Hello Everyone:
> >> I cann't work with ProtocolCodecFilter normally,asking for your help!!
> >>
> >> First the add filter in Main Class code segment:
> >> public static void main(String[] args) throws Exception
> >> {
> >>   acceptor = new SocketAcceptor();
> >>   IoAcceptorConfig config = new SocketAcceptorConfig();
> >>   ((SocketAcceptorConfig) config).setReuseAddress(true);
> >>   config.setDisconnectOnUnbind(true);
> >>   config.getFilterChain().addLast("codec",
> >>     new ProtocolCodecFilter(new ServerProtocolCodecFactory()));
> >>   acceptor.bind(new InetSocketAddress(PORT), new ProtocolHandler(),
> >>     config);
> >>   System.out.println("Listening on port " + PORT);
> >> }
> >>
> >> Second The AbstractStringDecoder
> >> public abstract class AbstractStringDecoder implements MessageDecoder
> >> {
> >> protected AbstractStringDecoder()
> >> {
> >>   System.out.println("AbstractStringDecoder");
> >> }
> >>
> >> public MessageDecoderResult decodable(IoSession session, ByteBuffer in)
> >> {
> >>   System.out.println("decodable");
> >>    }
> >>
> >> public MessageDecoderResult decode(IoSession session, ByteBuffer in,
> >>    ProtocolDecoderOutput out) throws Exception
> >> {
> >>   System.out.println("333");
> >>    }
> >>
> >> protected abstract String decodeBody(IoSession session, ByteBuffer in);
> >> }
> >>
> >> The Third StringDecoder
> >> public class StringDecoder extends AbstractStringDecoder
> >> {
> >> public StringDecoder()
> >> {
> >>   System.out.println("decode");
> >> }
> >>
> >> public String decodeBody(IoSession session, ByteBuffer in)
> >> {
> >>   System.out.println("111");
> >>    }
> >>
> >> public void dispose() throws Exception
> >> {
> >>   System.out.println("333");
> >> }
> >>
> >> public void finishDecode(IoSession arg0, ProtocolDecoderOutput arg1)
> >>    throws Exception
> >> {
> >>   System.out.println("222");
> >> }
> >> }
> >>
> >> Then the ServerProtocolCodecFactory
> >> public class ServerProtocolCodecFactory extends
> >> DemuxingProtocolCodecFactory
> >> implements ProtocolCodecFactory
> >> {
> >> public ServerProtocolCodecFactory()
> >> {
> >>   super.register(StringDecoder.class);
> >>   super.register(StringEncoder.class);
> >> }
> >> }
> >> But When I send Message to the server,StringDecoder.decodeBody() never
> be
> >> invoked.I biult the server on MINA1.0 JDK1.5
> >> Thanks In Advance!
> >>
> >>
> >
> >
> > --
> > Jeroen Brattinga
> >
> 


Reply via email to