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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to