Dubbo序列化与反序列化问题、服务端获取到的请求参数类型转换异常(变成了Map类型的对象)

文章描述了一个在使用Dubbo框架时遇到的异常情况,具体表现为`java.io.StreamCorruptedException:invalidstreamheader:77D30000`。该问题与序列化有关,特别是客户端和服务端的`dubbo.protocol.serialization`配置不一致导致。解决方案是确保两端配置相同,并推荐使用成熟的序列化方式如json。此外,文章还提到当客户端使用服务端未知的子类作为参数时,会导致类型转换异常,需避免这种情况并保持接口定义的一致性。

java.io.StreamCorruptedException: invalid stream header: 77D30000 ; Decode rpc invocation failed

现象

2023-02-14 09:49:32.251 [NettyServerWorker-4-2] [] [WARN] o.a.d.r.exchange.codec.ExchangeCodec-130  [DUBBO] Skip input stream 634, dubbo version: 2.7.0, current host: 10.10.1.44
2023-02-14 09:49:36.858 [NettyServerWorker-4-1] [] [WARN] o.a.d.r.p.d.DecodeableRpcInvocation-73  [DUBBO] Decode rpc invocation failed: invalid stream header: 77D30000, dubbo version: 2.7.0, current host: 10.10.1.44
java.io.StreamCorruptedException: invalid stream header: 77D30000
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:899)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:357)
        at org.apache.dubbo.common.serialize.java.JavaObjectInput.<init>(JavaObjectInput.java:33)
        at org.apache.dubbo.common.serialize.java.JavaSerialization.deserialize(JavaSerialization.java:47)
        at org.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:91)
        at org.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:70)
        at org.apache.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:132)
        at org.apache.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:125)
        at org.apache.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:85)
        at org.apache.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:46)
        at org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalDecoder.decode(NettyCodecAdapter.java:95)
        at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501)
        at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:440)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
        at io.netty.channel.Abstr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IccBoY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值