- [ ] I have searched the [issues](https://github.com/apache/dubbo/issues) of
this repository and believe that this is not a duplicate.
- [ ] I have checked the
[FAQ](https://github.com/apache/dubbo/blob/master/FAQ.md) of this repository
and believe that this is not a duplicate.
### Environment
* Dubbo version: 2.7.3
* Operating System version: Red Hat Enterprise Linux Server release 6.5
* Java version: jdk1.8.0_201
### Steps to reproduce this issue
1. 使用kryo序列化,消费者与提供者参数结构修改成不一致时进行服务调用。
Pls. provide [GitHub address] to reproduce this issue.
### Expected Result
希望应用层有捕获解码异常的方法,并进行相关的告警。
### Actual Result
What actually happens?
没有找到良好的办法捕获解码异常。对序列化进行扩展可以勉强实现。
If there is an exception, please attach the exception trace:
```
WARN :20191011.162324579:NettyServerWorker-4-8: [DUBBO] Decode argument failed:
com.esotericsoftware.kryo.KryoException: Unable to find class: NY
Serialization trace:
exrate (com.xx.yy.dto.XXXNotityMsg)
body (com.xx.yy.dto.ZZTopMsg), dubbo version: 2.7.3, current host:
172.16.10.27:DecodeableRpcInvocation.java:119
java.io.IOException: com.esotericsoftware.kryo.KryoException: Unable to find
class: NY
Serialization trace:
exrate (com.xx.yy.dto.XXXNotityMsg)
body (com.xx.yy.dto.ZZTopMsg)
at
org.apache.dubbo.common.serialize.kryo.KryoObjectInput.readObject(KryoObjectInput.java:138)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.common.serialize.kryo.KryoObjectInput.readObject(KryoObjectInput.java:147)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:116)
[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:73)
[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:132)
[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:122)
[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:82)
[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:48)
[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalDecoder.decode(NettyCodecAdapter.java:90)
[dubbo-2.7.3.jar:2.7.3]
at
io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:489)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:428)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:265)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:628)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:563)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:480)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:442)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
[netty-all-4.1.29.Final.jar:4.1.29.Final]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
Caused by: com.esotericsoftware.kryo.KryoException: Unable to find class: NY
Serialization trace:
exrate (com.xx.yy.dto.XXXNotityMsg)
body (com.xx.yy.dto.ZZTopMsg)
at
com.esotericsoftware.kryo.util.DefaultClassResolver.readName(DefaultClassResolver.java:160)
~[kryo-4.0.0.jar:?]
at
com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:133)
~[kryo-4.0.0.jar:?]
at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:693)
~[kryo-4.0.0.jar:?]
at
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:118)
~[kryo-4.0.0.jar:?]
at
com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:540)
~[kryo-4.0.0.jar:?]
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
~[kryo-4.0.0.jar:?]
at
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
~[kryo-4.0.0.jar:?]
at
com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:540)
~[kryo-4.0.0.jar:?]
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813)
~[kryo-4.0.0.jar:?]
at
org.apache.dubbo.common.serialize.kryo.KryoObjectInput.readObject(KryoObjectInput.java:136)
~[dubbo-2.7.3.jar:2.7.3]
... 26 more
Caused by: java.lang.ClassNotFoundException: NY
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
~[?:1.8.0_201]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_201]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
~[?:1.8.0_201]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_201]
at java.lang.Class.forName0(Native Method) ~[?:1.8.0_201]
at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_201]
at
com.esotericsoftware.kryo.util.DefaultClassResolver.readName(DefaultClassResolver.java:154)
~[kryo-4.0.0.jar:?]
at
com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:133)
~[kryo-4.0.0.jar:?]
at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:693)
~[kryo-4.0.0.jar:?]
at
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:118)
~[kryo-4.0.0.jar:?]
at
com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:540)
~[kryo-4.0.0.jar:?]
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
~[kryo-4.0.0.jar:?]
at
com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
~[kryo-4.0.0.jar:?]
at
com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:540)
~[kryo-4.0.0.jar:?]
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813)
~[kryo-4.0.0.jar:?]
at
org.apache.dubbo.common.serialize.kryo.KryoObjectInput.readObject(KryoObjectInput.java:136)
~[dubbo-2.7.3.jar:2.7.3]
```
[ Full content available at: https://github.com/apache/dubbo/issues/5175 ]
This message was relayed via gitbox.apache.org for
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]