Mantis - Hessian
Viewing Issue Advanced Details
3030 major always 10-30-08 01:43 04-21-10 05:37
shawnchain  
 
normal  
new 3.1.5  
open  
none    
none  
0003030: Server side exception could not be serialized to cilent side.
I have a service setup and exposed with Spring-Remoting/Hessian.
The server side API might throw some IOException or FileNotFoundException.

But at client side, I got the HessianProtocolException instead of the desired IOException.

The problem is gone after revert back to hessian 3.1.3.


Below is the error stack trace

com.caucho.hessian.io.HessianProtocolException: readObject: unexpected end of file
    at com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:2701)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2010)
    at com.caucho.hessian.io.AbstractMapDeserializer.readObject(AbstractMapDeserializer.java:67)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1756)
    at com.caucho.hessian.io.ArrayDeserializer.readList(ArrayDeserializer.java:95)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1703)
    at com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:387)
    at com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:233)
    at com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:157)
    at com.caucho.hessian.io.SerializerFactory.readObject(SerializerFactory.java:376)
    at com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2054)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1980)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1972)
    at com.caucho.hessian.io.Hessian2Input.readFault(Hessian2Input.java:1629)
    at com.caucho.hessian.io.Hessian2Input.prepareFault(Hessian2Input.java:428)
    at com.caucho.hessian.io.Hessian2Input.startReply(Hessian2Input.java:417)
    at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:218)
    at $Proxy0.createFile(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.springframework.remoting.caucho.HessianClientInterceptor.invoke(HessianClientInterceptor.java:219)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy1.createFile(Unknown Source)
    at com.alibaba.platform.aranda.client.HessianClientTest.testCreateFile(HessianClientTest.java:62)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at junit.framework.TestCase.runTest(TestCase.java:164)
    at junit.framework.TestCase.runBare(TestCase.java:130)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:120)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
org.springframework.remoting.RemoteAccessException: Cannot access Hessian remote service at [http://localhost:8080/aranda/service/hessian]; [^] nested exception is com.caucho.hessian.io.HessianFieldException: java.lang.Throwable.stackTrace: readObject: unexpected end of file
    at org.springframework.remoting.caucho.HessianClientInterceptor.convertHessianAccessException(HessianClientInterceptor.java:254)
    at org.springframework.remoting.caucho.HessianClientInterceptor.invoke(HessianClientInterceptor.java:225)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy1.createFile(Unknown Source)
    at com.alibaba.platform.aranda.client.HessianClientTest.testCreateFile(HessianClientTest.java:62)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at junit.framework.TestCase.runTest(TestCase.java:164)
    at junit.framework.TestCase.runBare(TestCase.java:130)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:120)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: com.caucho.hessian.io.HessianFieldException: java.lang.Throwable.stackTrace: readObject: unexpected end of file
    at com.caucho.hessian.io.JavaDeserializer.logDeserializeError(JavaDeserializer.java:590)
    at com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:391)
    at com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:233)
    at com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:157)
    at com.caucho.hessian.io.SerializerFactory.readObject(SerializerFactory.java:376)
    at com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2054)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1980)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1972)
    at com.caucho.hessian.io.Hessian2Input.readFault(Hessian2Input.java:1629)
    at com.caucho.hessian.io.Hessian2Input.prepareFault(Hessian2Input.java:428)
    at com.caucho.hessian.io.Hessian2Input.startReply(Hessian2Input.java:417)
    at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:218)
    at $Proxy0.createFile(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.springframework.remoting.caucho.HessianClientInterceptor.invoke(HessianClientInterceptor.java:219)
    ... 20 more
Caused by: com.caucho.hessian.io.HessianProtocolException: readObject: unexpected end of file
    at com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:2701)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2010)
    at com.caucho.hessian.io.AbstractMapDeserializer.readObject(AbstractMapDeserializer.java:67)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1756)
    at com.caucho.hessian.io.ArrayDeserializer.readList(ArrayDeserializer.java:95)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1703)
    at com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:387)
    ... 36 more

Notes
(0004538)
schatterjee   
04-21-10 05:37   
I found a possible solution to this and have attached my proposed fix to bug no. 4011 ( http://bugs.caucho.com/view.php?id=4011 [^] )