由于昨天做了一个远程调用架构的项目工程模板demo,虽然大体上可以跑起来了,但有些地方还是有异常。今天决定找出原因。
在办公室的电脑里,我只有spring1.2.9。可能跟之前的spring2.0有点差距,但在spring1.29上也有一点问题。先把这些问题搞定再说。
问题是这样的,登陆的时候老是抛出异常。见如下:
2008
-
3
-
24
1
:
48
:
26
org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet remoting threw exception
com.caucho.hessian.io.HessianProtocolException: expected string at z
at com.caucho.hessian.io.HessianInput.error(HessianInput.java: 1226 )
at com.caucho.hessian.io.HessianInput.expect(HessianInput.java: 1221 )
at com.caucho.hessian.io.HessianInput.readString(HessianInput.java: 543 )
at com.caucho.hessian.io.BasicDeserializer.readObject(BasicDeserializer.java: 166 )
at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java: 699 )
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java: 181 )
at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java: 91 )
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java: 44 )
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java: 740 )
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java: 684 )
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java: 394 )
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java: 358 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 710 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 803 )
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: 230 )
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 175 )
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128 )
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 104 )
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 261 )
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844 )
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java: 581 )
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447 )
at java.lang.Thread.run(Thread.java: 619 )
2008 - 3 - 24 1 : 48 : 26 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet petstore threw exception
com.caucho.hessian.io.HessianProtocolException:
at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java: 171 )
at $Proxy0.getAccount(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: 597 )
at org.springframework.remoting.caucho.HessianClientInterceptor.invoke(HessianClientInterceptor.java: 115 )
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: 169 )
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java: 169 )
at $Proxy1.getAccount(Unknown Source)
at org.springframework.samples.jpetstore.web.spring.OrderFormController.formBackingObject(OrderFormController.java: 45 )
at org.springframework.web.servlet.mvc.AbstractFormController.getErrorsForNewForm(AbstractFormController.java: 341 )
at org.springframework.web.servlet.mvc.AbstractFormController.showNewForm(AbstractFormController.java: 322 )
at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java: 262 )
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java: 153 )
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java: 44 )
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java: 740 )
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java: 684 )
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java: 394 )
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java: 348 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 690 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 803 )
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: 230 )
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 175 )
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128 )
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 104 )
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 261 )
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844 )
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java: 581 )
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447 )
at java.lang.Thread.run(Thread.java: 619 )
严重: Servlet.service() for servlet remoting threw exception
com.caucho.hessian.io.HessianProtocolException: expected string at z
at com.caucho.hessian.io.HessianInput.error(HessianInput.java: 1226 )
at com.caucho.hessian.io.HessianInput.expect(HessianInput.java: 1221 )
at com.caucho.hessian.io.HessianInput.readString(HessianInput.java: 543 )
at com.caucho.hessian.io.BasicDeserializer.readObject(BasicDeserializer.java: 166 )
at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java: 699 )
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java: 181 )
at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java: 91 )
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java: 44 )
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java: 740 )
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java: 684 )
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java: 394 )
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java: 358 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 710 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 803 )
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: 230 )
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 175 )
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128 )
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 104 )
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 261 )
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844 )
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java: 581 )
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447 )
at java.lang.Thread.run(Thread.java: 619 )
2008 - 3 - 24 1 : 48 : 26 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet petstore threw exception
com.caucho.hessian.io.HessianProtocolException:
at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java: 171 )
at $Proxy0.getAccount(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: 597 )
at org.springframework.remoting.caucho.HessianClientInterceptor.invoke(HessianClientInterceptor.java: 115 )
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java: 169 )
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java: 169 )
at $Proxy1.getAccount(Unknown Source)
at org.springframework.samples.jpetstore.web.spring.OrderFormController.formBackingObject(OrderFormController.java: 45 )
at org.springframework.web.servlet.mvc.AbstractFormController.getErrorsForNewForm(AbstractFormController.java: 341 )
at org.springframework.web.servlet.mvc.AbstractFormController.showNewForm(AbstractFormController.java: 322 )
at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java: 262 )
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java: 153 )
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java: 44 )
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java: 740 )
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java: 684 )
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java: 394 )
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java: 348 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 690 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 803 )
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: 230 )
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 175 )
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128 )
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 104 )
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 261 )
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844 )
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java: 581 )
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447 )
at java.lang.Thread.run(Thread.java: 619 )
百思不得其解!为什么总是执行getAccount(String username, String password)时候抛出异常!?
由于对aop不是很了解,只能是我猜,我猜,我猜猜!是不是代理类出现问题了?再看看源代码,发现方法getAccount被重载了。而且异常信息中有at $Proxy0.getAccount(Unknown Source)。 我想是不是把一个重命名,比如getNewAccount。
一试,果然是这样!
我想,如果存在这样的问题。我们是不是可以参考spring的org.springframework.web.servlet.DispatcherServlet设计,给每个远程业务接口分配一个serviceId,只代理一个叫远程请求分发器的接口RemoteRequestDispatcher,在服务器端RemoteRequestDispatcher的实现类负责根据serviceId将请求转发给相应的类处理。
我的文章列表>>