序列化netty的FullHttpRequest
Serialize netty's FullHttpRequest
我的 Java 项目中有一个 netty 服务器 运行,正在侦听请求。 Netty 在将请求交给处理程序之前在内部将请求转换为 FullHttpRequest
类型。现在在我的处理程序中,我正在尝试序列化 FullHttpRequest 因为我必须将它推送到 RabbtitMQ。但看起来它是不可序列化的:
due java.io.NotSerializableException: io.netty.handler.codec.http.DefaultFullHttpRequest
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:566)
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:174)
at org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:99)
... 31 more
Caused by: org.apache.commons.lang3.SerializationException: java.io.NotSerializableException: io.netty.handler.codec.http.DefaultFullHttpRequest
at org.apache.commons.lang3.SerializationUtils.serialize(SerializationUtils.java:139)
at org.apache.commons.lang3.SerializationUtils.serialize(SerializationUtils.java:161)
at com.company.myproject.util.RequestToByteArrayConverter.convertTo(RequestToByteArrayConverter.java:28)
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:276)
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:165)
... 32 more
有几种方法可以解决这个问题。
- 扩展 FullHttpRequest/Response 以实现可序列化。这很忙,因为您可能最终会写 read/write 解析相当多的 类。
- 创建您自己的 FullHttpRequest/Response 影子 类,它从影子 类 复制有意义的位并且是可序列化的。然后写自己的适配器
我个人采用了影子方法。
我的 Java 项目中有一个 netty 服务器 运行,正在侦听请求。 Netty 在将请求交给处理程序之前在内部将请求转换为 FullHttpRequest
类型。现在在我的处理程序中,我正在尝试序列化 FullHttpRequest 因为我必须将它推送到 RabbtitMQ。但看起来它是不可序列化的:
due java.io.NotSerializableException: io.netty.handler.codec.http.DefaultFullHttpRequest
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:566)
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:174)
at org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:99)
... 31 more
Caused by: org.apache.commons.lang3.SerializationException: java.io.NotSerializableException: io.netty.handler.codec.http.DefaultFullHttpRequest
at org.apache.commons.lang3.SerializationUtils.serialize(SerializationUtils.java:139)
at org.apache.commons.lang3.SerializationUtils.serialize(SerializationUtils.java:161)
at com.company.myproject.util.RequestToByteArrayConverter.convertTo(RequestToByteArrayConverter.java:28)
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:276)
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:165)
... 32 more
有几种方法可以解决这个问题。
- 扩展 FullHttpRequest/Response 以实现可序列化。这很忙,因为您可能最终会写 read/write 解析相当多的 类。
- 创建您自己的 FullHttpRequest/Response 影子 类,它从影子 类 复制有意义的位并且是可序列化的。然后写自己的适配器
我个人采用了影子方法。