我正在以标准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()中应该编写哪些代码来实现此功能?
答案 0 :(得分:2)
如果您只想使用netty解码XML,可以使用inbuild XML-decoder(此处理程序不需要StringDecoder)。如果要在<abc>
标记之后开始处理XML文档,只需等待名称为abc
的{{3}}对象即可。关闭标记也是如此,但使用XmlElementStart对象。