Same with 3.1.5. It *DOES* work with 3.1.3 though and we rollbacked to that version.
(But I think it may be because that version uses protocol V1 by default or something). S. On Fri, Jul 4, 2008 at 12:09 PM, Borer Reynald <[EMAIL PROTECTED]> wrote: > Hello, > > I can confirm that I have the same problem of exception deserialization. > I tried multiple way of defining my exception objects, and I haven't > found a solution so far. I traced the problem directly in the hessian > library, when the deserializer tries to recreate the Java stack strace. > > A temporary solution, as you already guessed, is to force the protocol > 1.0 to avoid these problem. Is it already known from Hessian developpers > or should we fill a bug report ? > > Regards, > Reynald > > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of > [EMAIL PROTECTED] > Sent: mercredi, 2. juillet 2008 13:47 > To: [email protected] > Subject: [Hessian-interest] Hessian 3.1.6 protocol 2.0 does not work > whenremote exceptions are thrown > > Hello, > > We have been using hessian 3.0.20 and protocol 1.0 for some time now > with > no big issues. However I am trying to move to hessian 3.1.6 and protocol > > 2.0 and I can not get it to work. > > Normal calls work fine and a lot faster, but when an exception happens > in > the remote side, I get deserialization errors as shown below. > > I tried to directly serialise and deserialise an Exception object and it > > worked fine, therefore the problem is not in the serialization code but > the data which is transmitted back to the client when an exception > arises > which I think it would be a fault map. > > > web.xml declares the remoting servlet like this: > > <servlet> > <servlet-name>remoting</servlet-name> > > <servlet-class>org.springframework.web.servlet.DispatcherServlet</servle > t-class> > <load-on-startup>1</load-on-startup> > </servlet> > > <servlet-mapping> > <servlet-name>remoting</servlet-name> > <url-pattern>/remoting/*</url-pattern> > </servlet-mapping> > > > > and remoting-servlet.xml contains: > > <!-- Mapping servlet URL to different remoting handlers --> > <bean > class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> > <property name="urlMap"> > <map> > <entry key="/hessianProxyService"> > <ref > bean="hessianProxyService"/> > </entry> > <!-- Other mappings here --> > </map> > </property> > </bean> > > <!-- Exposing service with Hessian --> > <bean id="hessianProxyService" > class="org.springframework.remoting.caucho.HessianServiceExporter"> > <property name="service" ref="proxyService"/> > <property name="serviceInterface" > value="uk.nominet.proxyservice.InternalProxyServiceIF"/> > </bean> > > > In the client side, Hessian proxy bean is configured as follows. > <beans> > > <bean id="proxyClient" > class="uk.nominet.proxyservice.client.TestProxyClient"> > <property name="proxyService" > ref="hessianProxyService"/> > </bean> > > <bean id="hessianProxyService" > class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> > <!-- This URL binds to the service, it must be > changed as an ant substitution --> > <property name="serviceUrl" value=" > http://localhost:8080/proxyservice/remoting/hessianProxyService"/> > <property name="serviceInterface" > value="uk.nominet.proxyservice.InternalProxyServiceIF"/> > <property name="proxyFactory" > ref="proxyFactory"/> > </bean> > > <bean id="proxyFactory" > class="com.caucho.hessian.client.HessianProxyFactory"> > <property name="hessian2Request" value="true" /> > <property name="hessian2Reply" value="true" /> > <property name="debug" value="false" /> > </bean> > > </beans> > > For testing purposes I just define one method in InternalProxyServiceIF > which is forced to throw an exception: > > public String testHessian2(String str) throws Exception{ > System.out.println("You passed: " + str); > throw new Exception("Testing"); > // return str; > } > > > Calls work for normal cases, when the exception is not thrown and the > string is returned, but when an exception is thrown I always get the > following problem: > > > org.springframework.remoting.RemoteAccessException: Cannot access > Hessian > remote service at [http:// > localhost:8080/proxyservice/remoting/hessianProxyService]; nested > exception is com.caucho.hessian.io > .HessianFieldException: java.lang.StackTraceElement.lineNumber: expected > > integer at end of file > at > org.springframework.remoting.caucho.HessianClientInterceptor.convertHess > ianAccessException(Hessi > anClientInterceptor.java:254) > at > org.springframework.remoting.caucho.HessianClientInterceptor.invoke(Hess > ianClientInterceptor.jav > a:225) > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Ref > lectiveMethodInvocation. > java:171) > at > org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAo > pProxy.java:204) > at $Proxy1.testHessian2(Unknown Source) > at > uk.nominet.proxyservice.client.TestProxyClient.main(TestProxyClient.java > :42) > Caused by: com.caucho.hessian.io.HessianFieldException: > java.lang.StackTraceElement.lineNumber: expe > cted integer at end of file > at > com.caucho.hessian.io.JavaDeserializer.logDeserializeError(JavaDeseriali > zer.java:590) > at > com.caucho.hessian.io.JavaDeserializer$IntFieldDeserializer.deserialize( > JavaDeserializer.java:48 > 3) > 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.Hessian2Input.readObjectInstance(Hessian2Input.jav > a:2048) > at > com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1689) > at > com.caucho.hessian.io.ArrayDeserializer.readList(ArrayDeserializer.java: > 95) > at > com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1700) > at > com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deseriali > ze(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.jav > a:376) > at > com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.jav > a:2051) > at > com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1977) > at > com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1969) > at > com.caucho.hessian.io.Hessian2Input.readFault(Hessian2Input.java:1626) > at > com.caucho.hessian.io.Hessian2Input.prepareFault(Hessian2Input.java:425) > at > com.caucho.hessian.io.Hessian2Input.startReply(Hessian2Input.java:414) > at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:218) > at $Proxy0.testHessian2(Unknown Source) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav > a:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor > Impl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.springframework.remoting.caucho.HessianClientInterceptor.invoke(Hess > ianClientInterceptor.jav > a:219) > ... 4 more > Caused by: com.caucho.hessian.io.HessianProtocolException: expected > integer at end of file > at com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:2705) > at com.caucho.hessian.io.Hessian2Input.expect(Hessian2Input.java:2668) > at com.caucho.hessian.io.Hessian2Input.readInt(Hessian2Input.java:845) > at > com.caucho.hessian.io.JavaDeserializer$IntFieldDeserializer.deserialize( > JavaDeserializer.java:47 > 9) > ... 27 more > > > > I tried to set debug to true in the factory to see what is being > returned, > > <bean id="proxyFactory" > class="com.caucho.hessian.client.HessianProxyFactory"> > <property name="hessian2Request" value="true" /> > <property name="hessian2Reply" value="true" /> > <property name="debug" value="true" /> > </bean> > > A different exception is thrown when debuging. the output in this case > is > shown below. > > reply 2.0 > fault map (#0) > "code" => "ServiceException" > "message" => "Testing" > "detail" => /* defun java.lang.Exception [detailMessage, cause, > stackTrace] */ > object java.lang.Exception (#0) > detailMessage: "Testing" > cause: ref(#0) > stackTrace: list [java.lang.StackTraceElement(#1) > 0: 0.0 > 1: binary(14) > 2: > 3: > 4: > 5: 4 > 6: "declaringClass" > 7: "methodName" > 8: "fileName" > 9: "lineNumber" > 10: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 > at java.util.ArrayList.RangeCheck(ArrayList.java:547) > at java.util.ArrayList.get(ArrayList.java:322) > at > com.caucho.hessian.io.HessianDebugState$ObjectState.shift(HessianDebugSt > ate.java:1188) > at > com.caucho.hessian.io.HessianDebugState$State.nextObject(HessianDebugSta > te.java:277) > at > com.caucho.hessian.io.HessianDebugState$ObjectState.next(HessianDebugSta > te.java:1214) > at > com.caucho.hessian.io.HessianDebugState.next(HessianDebugState.java:93) > at > com.caucho.hessian.io.HessianDebugInputStream.read(HessianDebugInputStre > am.java:106) > at java.io.InputStream.read(InputStream.java:163) > at > com.caucho.hessian.io.Hessian2Input.readBuffer(Hessian2Input.java:2644) > at com.caucho.hessian.io.Hessian2Input.read(Hessian2Input.java:2624) > at > com.caucho.hessian.io.Hessian2Input.startReply(Hessian2Input.java:386) > at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:218) > at $Proxy0.testHessian2(Unknown Source) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav > a:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor > Impl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.springframework.remoting.caucho.HessianClientInterceptor.invoke(Hess > ianClientInterceptor.jav > a:219) > at > org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Ref > lectiveMethodInvocation. > java:171) > at > org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAo > pProxy.java:204) > at $Proxy1.testHessian2(Unknown Source) > at > uk.nominet.proxyservice.client.TestProxyClient.main(TestProxyClient.java > :42) > > > Can somebody help on this? > > Kind regards > Miquel > > > _______________________________________________ > hessian-interest mailing list > [email protected] > http://maillist.caucho.com/mailman/listinfo/hessian-interest > > > _______________________________________________ > hessian-interest mailing list > [email protected] > http://maillist.caucho.com/mailman/listinfo/hessian-interest > -- Large Systems Suck: This rule is 100% transitive. If you build one, you suck" -- S.Yegge
_______________________________________________ hessian-interest mailing list [email protected] http://maillist.caucho.com/mailman/listinfo/hessian-interest
