使用netty解析XML字符串

时间:2018-04-11 07:16:12

标签: java xml tcp netty

我正在以标准xml格式通过TCP获取消息,我正在通过我的netty客户端收听。我应该如何编写管道,以便我可以解析以<abc>....</abc>开头和结尾的字符串?

我猜测应该有一个String解码器和另一个自定义处理程序(netty定义或其他)处理从TCP流解析XML。

如下所示?

public Bootstrap createBootstrap(final Bootstrap b, EventLoopGroup eventLoop) {
    b.group(workerGroup);
    b.channel(NioSocketChannel.class);
    ReconnectionClient reconnectionClient = new ReconnectionClient(this);
    b.handler(new ChannelInitializer<SocketChannel>() {
        @Override
        public void initChannel(SocketChannel ch) throws Exception {
            ChannelPipeline pipeline = ch.pipeline();
            pipeline.addLast(reconnectionClient);
            pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));             
            pipeline.addLast(new ClientHandler()); // deals with String parsing                
        }
    });

    // Use command line arguments to pass the socket
    b.connect(serverIP, serverPort).addListener(new ConnectionListener(this));
    return b;
}

我的问题的第二部分是如何解析通过TCP传输的各个XML字符串?如在,ClientHandler()中应该编写哪些代码来实现此功能?

1 个答案:

答案 0 :(得分:2)

如果您只想使用netty解码XML,可以使用inbuild XML-decoder(此处理程序不需要StringDecoder)。如果要在<abc>标记之后开始处理XML文档,只需等待名称为abc的{​​{3}}对象即可。关闭标记也是如此,但使用XmlElementStart对象。