Hessian2ObjectInput.readObject : hessian 反序列化空指標異常
阿新 • • 發佈:2018-12-17
java.lang.NullPointerException at sun.reflect.GeneratedConstructorAccessor329.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.alibaba.com.caucho.hessian.io.JavaDeserializer.instantiate(JavaDeserializer.java:312) at com.alibaba.com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:201) at com.alibaba.com.caucho.hessian.io.SerializerFactory.readObject(SerializerFactory.java:526) at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2810) at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2750) at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2279) at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2724) at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2279) at com.alibaba.dubbo.common.serialize.hessian2.Hessian2ObjectInput.readObject(Hessian2ObjectInput.java:84) at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcResult.decode(DecodeableRpcResult.java:92) at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcResult.decode(DecodeableRpcResult.java:113) at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:89) at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:124) at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:84) at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:46) at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:133) at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75) at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:565) at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:560) at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:84) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:465) at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:332) at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35) at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:102) at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
問題描述:
dubbo服務在進行服務間的遠端呼叫時,通過hessain進行物件的序列化;出現了反序列化異常;
思路:
hessain反序列化異常有幾種場景:
1. 兩個jar中所引用的某個物件不是同一個導致,比如:物件A,之前有欄位 name,sex, 後面將A物件加入age欄位,而反序列化所在的服務中所引用的jar包還是舊的A物件,沒有age欄位,導致物件反序列化失敗(此種情況一般會直接提示那個物件反序列失敗);
2. dubbo服務提供者和消費者版本不對,會導致反序列化失敗;類似於1;
3. 就是上面說的這種;呼叫其他的服務,被呼叫的服務底層出現了空指標異常,導致異常往上拋; 此時建議排查反序列化失敗的這個方法呼叫的方法棧,依次排查被呼叫的服務是否存在錯誤日誌;
純屬個人收集平時遇到的錯誤備份,也希望能幫助到大家;