gpt4 book ai didi

java - 使用netty 4.1.9进行xml消息处理

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:03 31 4
gpt4 key购买 nike

我正在服务器上使用 netty 4.1.9,从 Netty 客户端接收 XML 消息。客户端可以将 xml 消息发送到服务器。但是,在服务器端,我需要能够将它们解码为单个 xml 消息(而不是一系列字节)。我查看了 xml 帧解码器,但无法找出最佳方法。希望您指出正确的方向。

初始化器:

    @Override
public void initChannel(SocketChannel ch) throws Exception {
log.info("init channel called");
ChannelPipeline pipeline = ch.pipeline();
//add decoder for combining bytes for xml message
pipeline.addLast("decoder", new XmlMessageDecoder());

// handler for business logic.
pipeline.addLast("handler", new XmlServerHandler());
}

我无法使用 xml 帧解码器。如果我尝试在 mxl 消息解码器中扩展 xml 帧解码器,则会收到编译错误“xmlframedecoder 中没有可用的默认构造函数”。

最佳答案

我最终在 channel 初始值设定项中使用了 XmlFrameDecoder,并将其输出传递到处理程序,在处理程序中我能够从 ByteBuf 读取 XML 消息。

初始化器

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

// idle state handler
pipeline.addLast("idleStateHandler", new IdleStateHandler(60,
30, 0));
pipeline.addLast("myHandler", new IdleHandler());

//add decoder for combining bytes for xml message
pipeline.addLast("decoder", new XmlFrameDecoder(1048576));

// handler for business logic.
pipeline.addLast("handler", new ServerReceiverHandler());
}

处理程序

public class ServerReceiverHandler extends ChannelInboundHandlerAdapter {

ChannelHandlerContext ctx;

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
final ByteBuf buffer = (ByteBuf)msg;
//prints out String representation of xml doc
log.info("read : {}" + buffer.toString((CharsetUtil.UTF_8)));
ReferenceCountUtil.release(msg);
}
}

关于java - 使用netty 4.1.9进行xml消息处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43172430/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com