You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by GitBox <gi...@apache.org> on 2021/10/09 14:08:13 UTC

[GitHub] [dubbo-hessian-lite] xuyanhua opened a new issue #45: com.alibaba.com.caucho.hessian.io.HessianProtocolException: com.alibaba.com.caucho.hessian.io.ObjectDeserializer: unexpected object java.lang.String (2)

xuyanhua opened a new issue #45:
URL: https://github.com/apache/dubbo-hessian-lite/issues/45


   我们使用dubbo的时候,返回的结果对象是这样的
   class Result <T>{
       int code;//错误码
       String message;//错误消息
       T module ;//保存数据
   }
   但是调用时报反序列失败,报错如下:
   `Exception in thread "main" com.alibaba.com.caucho.hessian.io.HessianFieldException: AVX$Result.data: com.alibaba.com.caucho.hessian.io.ObjectDeserializer: unexpected object java.lang.String (2)
   	at com.alibaba.com.caucho.hessian.io.JavaDeserializer.logDeserializeError(JavaDeserializer.java:163)
   	at com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:394)
   	at com.alibaba.com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:269)
   	at com.alibaba.com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:196)
   	at com.alibaba.com.caucho.hessian.io.SerializerFactory.readObject(SerializerFactory.java:527)
   	at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2743)
   	at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2683)
   	at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2657)
   	at AVX.deserialize(AVX.java:37)
   	at AVX.main(AVX.java:18)
   Caused by: com.alibaba.com.caucho.hessian.io.HessianProtocolException: com.alibaba.com.caucho.hessian.io.ObjectDeserializer: unexpected object java.lang.String (2)
   	at com.alibaba.com.caucho.hessian.io.AbstractDeserializer.error(AbstractDeserializer.java:101)
   	at com.alibaba.com.caucho.hessian.io.AbstractDeserializer.readMap(AbstractDeserializer.java:90)
   	at com.alibaba.com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2066)
   	at com.alibaba.com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:390)
   	... 8 more
   `
   
   代码如下:
   
   `
   import com.alibaba.com.caucho.hessian.io.Hessian2Input;
   import com.alibaba.com.caucho.hessian.io.Hessian2Output;
   
   import java.io.ByteArrayInputStream;
   import java.io.ByteArrayOutputStream;
   import java.io.IOException;
   import java.io.Serializable;
   import java.util.HashMap;
   
   public class AVX {
       public static void main(String[] args) throws IOException, ClassNotFoundException {
           HashMap<String, String> map = new HashMap<>();
           map.put("2", "2");
   
           Result<HashMap<String, String>> test = new Result(map);
           byte[] bytes = serialize(test);
   
           Result<HashMap<String, String>> mm = (Result<HashMap<String, String>>) deserialize(bytes);
           System.out.println(mm);
       }
   
       public static byte[] serialize(Object obj) throws IOException {
           if (obj == null) throw new NullPointerException();
   
           ByteArrayOutputStream os = new ByteArrayOutputStream();
           Hessian2Output ho = new Hessian2Output(os);
           ho.writeObject(obj);
           ho.flushBuffer();
           return os.toByteArray();
       }
   
       public static Object deserialize(byte[] by) throws IOException {
           if (by == null) throw new NullPointerException();
   
           ByteArrayInputStream is = new ByteArrayInputStream(by);
           Hessian2Input hi = new Hessian2Input(is);
           return hi.readObject();
       }
   
       static class Result<T extends Serializable> implements Serializable {
   
           public Result(T data) {
               this.data = data;
           }
   
           private T data;
   
           public T getData() {
               return data;
           }
   
           public void setData(T data) {
               this.data = data;
           }
   
           @Override
           public String toString() {
               return "Result{" +
                       "data=" + data +
                       '}';
           }
       }
   }`
   
   经过测试,如果
   `static class Result<T extends Serializable> implements Serializable {`
   改为
   `static class Result<T> implements Serializable {`
   
   则能正常反序列化出来。
   
   求大神帮助 看看


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org