Hessian版本问题

今天尝试了一下Hessian与Spring的结合,选取版本为:hessian3.2.1;spring2.5。出现了莫名的异常如下:

com.caucho.hessian.io.HessianProtocolException: expected string at 0x6d
at com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:
2714)
at com.caucho.hessian.io.Hessian2Input.expect(Hessian2Input.java:
2695)
at com.caucho.hessian.io.Hessian2Input.readString(Hessian2Input.java:
1322)
at com.caucho.hessian.io.Hessian2Input.readMethod(Hessian2Input.java:
267)
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:
138)
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:
110)
at org.springframework.remoting.caucho.Hessian2SkeletonInvoker.invoke(Hessian2SkeletonInvoker.java:
94)
at org.springframework.remoting.caucho.HessianExporter.invoke(HessianExporter.java:
142)
at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:
70)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:
49)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:
875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:
807)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:
571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:
511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:
583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
447)
at java.lang.Thread.run(Thread.java:
619)

在网上搜索了以后,发现是spring2.0.7之后对客户端请求协议的处理发生了变化导致的。引用:

      It has been like that since Spring 2.0.7. Means regardless in which protocol (hessian 1 or hessian 2) that the client requests, 
          the Hessian2Input will always be used 
if the class is available in the classpath. It's still quite abnormal to me
     
Nevertheless, I found that the problem comes from hessian 3.2.1. In that version, Hessian2Input does not understand hessian 1 input!
      So, my solution is to use the earlier version: 
3.1.6. It works! 
      I noticed that hessian 3.2.1 (and 3.2.0) was delivered without the hessian-test.jar. It probably was not tested, that may cause the problem :-

所以,更换为hessian3.1.6就解决了

posted on 2009-04-10 11:13 桑之兮(CS-LIN) 阅读(2874) 评论(0)  编辑  收藏 所属分类: 远程访问


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年6月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

留言簿(3)

随笔分类

文章分类(1)

文章档案(1)

搜索

最新评论