- [ ] 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]

Reply via email to