Announcement Announcement Module
Collapse
No announcement yet.
Spring 3.0.6 + Hessian 4.0.7 + strange errors Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • Spring 3.0.6 + Hessian 4.0.7 + strange errors

    Hi Guys,

    I'm currently working on a project which allows a non-spring client to transfer data to and from a Tomcat/Spring Server.

    I decided to use Hessian because it sounded quite neat but it creates crazy exceptions which I do not understand.

    So first i show some of my code

    So i use
    Spring 3.0.6
    Tomcat 7
    Hessian 4.0.7


    Client:

    Code:
    HessianProxyFactory factory = new HessianProxyFactory();
    IConnector basic = (IConnector) factory.create(IConnector.class, "http://localhost:8080/HessianTest/remoting/RemoteService");
    basic.getData2(new long[]{1,2});
    basic.getData(new long[]{1,2});

    Server:


    web.xml
    Code:
    <web-app>
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>WEB-INF/beans.xml</param-value>
    	</context-param>
    	<listener>
    		<listener-class>
    			org.springframework.web.context.ContextLoaderListener
    		</listener-class>
    	</listener>
    	<servlet>
    		<servlet-name>remoting</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet
    		</servlet-class>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>remoting</servlet-name>
    		<url-pattern>/remoting/*</url-pattern>
    	</servlet-mapping>
    </web-app>
    remoting.xml

    Code:
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
    
    	<bean name="/RemoteService"
    		class="org.springframework.remoting.caucho.HessianServiceExporter">
    		<property name="service" ref="Connector" />
    		<property name="serviceInterface" value="xxx.IConnector" />
    	</bean>
    
    </beans>

    The code of the Connector is very simple. It just calls a dao with to deal with the data

    Code:
    int getData(long[] data);
    int getData2(long[] data);

    So now the Exception I keep getting:

    Client:
    Code:
    Exception in thread "main" com.caucho.hessian.client.HessianRuntimeException: com.caucho.hessian.io.HessianProtocolException: '?' is an unknown code
    	at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:221)
    	at $Proxy0.getDatasetHeader(Unknown Source)
    	at de.rusch.client.Main.main(Main.java:45)
    Caused by: com.caucho.hessian.io.HessianProtocolException: '?' is an unknown code
    	at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:219)
    	... 2 more
    Server:

    Code:
    Feb 15, 2012 5:38:08 PM org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet [remoting] in context with path [/HessianTest] threw exception [Hessian skeleton invocation failed; nested exception is java.lang.UnsupportedOperationException: com.caucho.hessian.io.BasicDeserializer@31987298] with root cause
    java.lang.UnsupportedOperationException: com.caucho.hessian.io.BasicDeserializer@31987298
    	at com.caucho.hessian.io.BasicDeserializer.readList(BasicDeserializer.java:512)
    	at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:1052)
    	at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:300)
    	at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:221)
    	at org.springframework.remoting.caucho.HessianExporter.doInvoke(HessianExporter.java:198)
    	at org.springframework.remoting.caucho.HessianExporter.invoke(HessianExporter.java:118)
    	at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:66)
    	at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)
    	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:585)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    	at java.lang.Thread.run(Thread.java:680)
    The strange thing about this error is that I get it when using getData but not when using getData2.

    I tried playing a bit with the HessianFactory in the client and setting Hessian2Reply and Hessian2Request to true with the effect that a long[] was translated into a String[] (There is another method getData(String[] data)) or I got some of the "long expected 0xd java.lang.String".


    So from what I see from the BasicDeserializer source the Exception is thrown because readList checks with a switch if the datatype is readable or otherwise throws this exception. And during debugging i saw that Hessian does not see a long[] as datatype but a simple String.

    I guess this is a problem with me using Hessian in a wrong way and can be solved very easy :-).

    Can u please also help me to make Hessian2 work on my Service.

    Best and thx a lot

    hajoru

    (Sorry for the repost. Accidently postet the same thread into web services and have no idea how to change the folder)
Working...
X