使用hessian over HTTP的Spring RPC在maven tomcat插件上工作正常,但在Tomcat服务器上返回http 500错误

时间:2021-03-31 16:52:38

I work with Spring RPC with hessian over HTTP, it works fine when I tried it on maven tomcat-plugin(Servlet Engine: Apache Tomcat/6.0.29, Java 7).

我使用带有hessian over HTTP的Spring RPC,当我在maven tomcat-plugin(Servlet Engine:Apache Tomcat / 6.0.29,Java 7)上尝试它时,它工作正常。

But after I packaged it with maven-war plugin and deployed on a tomcat server.(I have tried both 6.0.36 and 7.0.37), the RPC call returns 500 error.

但是在我用maven-war插件打包并部署在tomcat服务器上之后(我已经尝试了6.0.36和7.0.37),RPC调用返回500错误。

I'm not sure what's the difference between these two usage of tomcat. RPC call is from same procedure to it's HTTP service, I mean they use same code. Two parameters are both String.

我不确定这两种tomcat的用法有什么区别。 RPC调用是从相同的过程到它的HTTP服务,我的意思是他们使用相同的代码。两个参数都是String。

I have tried to add a MIME-TYPE as "application/x-hessian" to tomcat server, 500 is still there.

我试图将一个MIME-TYPE添加为“application / x-hessian”到tomcat服务器,500仍然存在。

Anyone knows what's wrong with my tomcat server?

谁知道我的tomcat服务器出了什么问题?

update question:

Thank you @Ralf, you are right, the old log didn't show the server error, I added new logs.

谢谢@Ralf,你是对的,旧的日志没有显示服务器错误,我添加了新的日志。

The server side log shows error about HessianProtocolException, and I found a method to resolve this: down grade the hessian version to 3.1.5, now the RPC works.

服务器端日志显示有关HessianProtocolException的错误,我找到了解决此问题的方法:将粗体版本降级到3.1.5,现在RPC工作。

But, the question is still there, why when I use 4.0.33, the tomcat started by maven plugin works fine, the stand alone tomcat shows error?

但是,问题仍然存在,为什么当我使用4.0.33时,由maven插件启动的tomcat工作正常,独立的tomcat显示错误?

My interface is

public interface RemoteMessage {
    public boolean callMethod(String number, String content);
}

dependencies like this:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>3.1.3.RELEASE</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>3.1.3.RELEASE</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-remoting</artifactId>
  <version>2.0.8</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>com.caucho</groupId>
  <artifactId>hessian</artifactId>
  <version>4.0.33</version>
  <scope>compile</scope>
</dependency>

error log from server side:

org.springframework.web.util.NestedServletException: Hessian skeleton invocation failed; nested exception is com.caucho.hessian.io.HessianProtocolException: expected string at 0x6d
    at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:150)
    at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    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.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:139)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    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:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:722)
Caused by: com.caucho.hessian.io.HessianProtocolException: expected string at 0x6d
    at com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:2943)
    at com.caucho.hessian.io.Hessian2Input.expect(Hessian2Input.java:2891)
    at com.caucho.hessian.io.Hessian2Input.readString(Hessian2Input.java:1398)
    at com.caucho.hessian.io.Hessian2Input.readMethod(Hessian2Input.java:308)
    at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:245)
    at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:217)
    at org.springframework.remoting.caucho.Hessian2SkeletonInvoker.invoke(Hessian2SkeletonInvoker.java:67)
    at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:147)
    ... 53 more

error log is this:

 com.sun.xml.ws.server.sei.EndpointMethodHandler invoke
 SEVERE: 500: java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/test/rpc/callMethod
 com.caucho.hessian.client.HessianConnectionException: 500: java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/test/rpc/callMethod
      at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:145)
      at com.caucho.hessian.client.HessianProxy.sendRequest(HessianProxy.java:296)
      at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:171)
      at $Proxy92.sengMessage(Unknown Source)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:601)
      at org.springframework.remoting.caucho.HessianClientInterceptor.invoke(HessianClientInterceptor.java:165)
      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
      at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
      at $Proxy93.sengMessage(Unknown Source)
      at com.sample.test.service.impl.ServiceImpl.callMethod(ServiceImpl.java:887)
      at com.sample.test.service.impl.ServiceImpl$$FastClassByCGLIB$$d60c9e4c.invoke(<generated>)
      at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
      at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:618)
      at com.sample.test.service.impl.ServiceImpl$$EnhancerByCGLIB$$cf1025d0.callMethod(<generated>)
      at com.sample.test.service.impl.BPUserCardProcServiceImpl.handle(BPUserCardProcServiceImpl.java:39)
      at com.sample.test.ws.TestWebServiceImpl.BPUserCardProc(TestWebServiceImpl.java:76)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:601)
      at com.sun.xml.ws.api.server.InstanceResolver$1.invoke(InstanceResolver.java:250)
      at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:150)
      at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:261)
      at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:100)
      at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:641)
      at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:600)
      at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585)
      at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:482)
      at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:314)
      at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:608)
      at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:259)
      at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:207)
      at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:159)
      at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:194)
      at com.sun.xml.ws.transport.http.servlet.WSSpringServlet.doPost(WSSpringServlet.java:52)
      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.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:186)
      at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
      at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
      at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
      at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
      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:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
      at java.lang.Thread.run(Thread.java:722)
 Caused by: java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/test/rpc/callMethod
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
      at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1674)
      at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1672)
      at java.security.AccessController.doPrivileged(Native Method)
      at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1670)
      at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1243)
      at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:125)
      ... 61 more
 Caused by: java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/test/rpc/callMethod
      at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1625)
      at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
      at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:112)
      ... 61 more

2 个解决方案

#1


0  

Remove spring-remoting dependency. It conflicts with latest version of hessian library. I faced the same problem & after googling I found this HessianConnectionException: (HTTP) 500 error when using Hessian 4.0.7 & Spring 3.1.1 .

删除spring-remoting依赖项。它与最新版本的粗麻布库相冲突。我遇到了同样的问题,谷歌搜索后,我发现使用Hessian 4.0.7和Spring 3.1.1时出现HessianConnectionException:(HTTP)500错误。

#2


-2  

Try this command:

试试这个命令:

mvn clean install -DskipTests

#1


0  

Remove spring-remoting dependency. It conflicts with latest version of hessian library. I faced the same problem & after googling I found this HessianConnectionException: (HTTP) 500 error when using Hessian 4.0.7 & Spring 3.1.1 .

删除spring-remoting依赖项。它与最新版本的粗麻布库相冲突。我遇到了同样的问题,谷歌搜索后,我发现使用Hessian 4.0.7和Spring 3.1.1时出现HessianConnectionException:(HTTP)500错误。

#2


-2  

Try this command:

试试这个命令:

mvn clean install -DskipTests