2017-05-02 4 views
0

Ich benutze netty v4.1.9final und versuche, eine Nachricht vom Client zum Server zu senden. Ich habe versucht Einstellung der Kanal Client Initialisierer mit dem Handler auf, als auf der Clientseite folgt:netty Pipelineauftrag für ausgehende Nachricht

final Bootstrap bootstrap = BootstrapGenerator.generate(); 
bootstrap.handler(new XmlClientInitializer()); 

XMLClientInitializer

public class XmlClientInitializer extends ChannelInitializer<SocketChannel> { 

    @Override 
    public void initChannel(SocketChannel ch) throws Exception { 
     final ChannelPipeline pipeline = ch.pipeline(); 

     pipeline.addLast("fileEncoder", new FileEncoder()); 
     pipeline.addLast("handler", new XmlSenderHandler()); 
    } 
} 

Fileencoder

public class FileEncoder extends MessageToByteEncoder<String> { 

XmlSenderHandler

public class XmlSenderHandler extends ChannelOutboundHandlerAdapter { 

    private static final Logger log = LogManager.getLogger(XmlSenderHandler.class.getName()); 
    private static ChannelHandlerContext ctx; 

    @Override 
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) { 
     log.info("attempting to write messages to server {}", msg.toString()); 
     ctx.write(msg, promise); 
    } 

    @Override 
    @SuppressWarnings("FutureReturnValueIgnored") 
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 
     super.exceptionCaught(ctx, cause); 
    } 
} 

Obwohl der FileEncoder zuerst in der Pipeline definiert ist, wird er nach dem XML-Handler aufgerufen (was ich nicht suche). Liegt das daran, dass der FileEncoder MessageToByteEncoder erweitert oder konfiguriere ich den Kanal falsch?

Antwort

1

Nein, die Pipeline ist korrekt konfiguriert. Der Punkt ist, dass das eingehende Ereignis vom ersten Handler zum letzten verarbeitet wird und das ausgehende Ereignis vom letzten Handler zum ersten verarbeitet wird. ChannelPipeline doc

+0

danke - das war es –