代码之家  ›  专栏  ›  技术社区  ›  mikek

SpringHTTP调用程序返回空代理,需要调试帮助

  •  1
  • mikek  · 技术社区  · 15 年前

    我已经追随 the spring http proxying tutorial 尽可能接近,但我仍然不能让它在运行时工作(我的配置基本上是相同的,所以除非我错过了一个打字错误,否则没有必要发布它)。

    客户机启动得很好,服务器也很好(我已经验证了服务器上的对象是实例化的),但是一旦我尝试访问代理对象的函数(以及服务器对象上的方法从未被访问的事实),就会得到一个空指针异常。这使我相信我没有正确地访问代理。

    所以,我的问题是:

    1. Spring文档中是否有未提到的常见错误源?
    2. 除了从客户端访问之外,还有其他方法来测试是否在服务器上正确设置了代理吗?

    来自客户端的StackTrace:

    2009-07-28 16:29:57,270    ERROR  ig.ApplicationLifecycleAdvisor | Could not access HTTP invoker remote service at [http:/127.0.0.1:8080/<servlet-context>/<servlet-name>/Server]; nested exception is java.lang.NullPointerException
    org.springframework.remoting.RemoteAccessException: Could not access HTTP invoker remote service at [http:/127.0.0.1:8080/<servlet-context>/<servlet-name>/Server]; nested exception is java.lang.NullPointerException
        at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.convertHttpInvokerAccessException(HttpInvokerClientInterceptor.java:211)
        at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:144)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at $Proxy0.logon(Unknown Source)
        at se.<companyname>.client.connection.HttpServerConnection.logon(HttpServerConnection.java:55)
        at se.<companyname>.client.command.logon.LoginDialog$LoginOkCommand.doExecuteCommand(LoginDialog.java:134)
        at org.springframework.richclient.command.ActionCommand.execute(ActionCommand.java:219)
        at org.springframework.richclient.command.ActionCommand$1.actionPerformed(ActionCommand.java:132)
        at org.springframework.richclient.command.SwingActionAdapter.actionPerformed(SwingActionAdapter.java:71)
        at javax.swing.SwingUtilities.notifyAction(Unknown Source)
        at javax.swing.JComponent.processKeyBinding(Unknown Source)
        at javax.swing.JComponent.processKeyBindings(Unknown Source)
        at javax.swing.JComponent.processKeyEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.Dialog$1.run(Unknown Source)
        at java.awt.Dialog$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.Dialog.show(Unknown Source)
        at java.awt.Component.show(Unknown Source)
        at java.awt.Component.setVisible(Unknown Source)
        at java.awt.Window.setVisible(Unknown Source)
        at java.awt.Dialog.setVisible(Unknown Source)
        at org.springframework.richclient.dialog.ApplicationDialog.showDialog(ApplicationDialog.java:405)
        at se.<companyname>.client.jide.docking.JideLifecycleAdvisor.onPreWindowOpen(JideLifecycleAdvisor.java:47)
        at org.springframework.richclient.application.support.AbstractApplicationWindow.showPage(AbstractApplicationWindow.java:187)
        at org.springframework.richclient.application.support.AbstractApplicationWindow.showPage(AbstractApplicationWindow.java:158)
        at se.<companyname>.client.jide.docking.JideApplicationWindow.showPage(JideApplicationWindow.java:131)
        at org.springframework.richclient.application.Application.openWindow(Application.java:172)
        at org.springframework.richclient.application.Application.start(Application.java:254)
        at org.springframework.richclient.application.ApplicationLauncher$1.run(ApplicationLauncher.java:308)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
    Caused by: java.lang.NullPointerException
        at sun.net.www.ParseUtil.toURI(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
        at org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor.writeRequestBody(SimpleHttpInvokerRequestExecutor.java:129)
        at org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor.doExecuteRequest(SimpleHttpInvokerRequestExecutor.java:64)
        at org.springframework.remoting.httpinvoker.AbstractHttpInvokerRequestExecutor.executeRequest(AbstractHttpInvokerRequestExecutor.java:136)
        at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.executeRequest(HttpInvokerClientInterceptor.java:191)
        at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.executeRequest(HttpInvokerClientInterceptor.java:173)
        at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:141)
        ... 54 more
    

    当我尝试使用下面的Gregory Mostizky代码在Web浏览器或单独的应用程序中打开代理地址时,客户端会给我505,而服务器会打印以下堆栈跟踪:

    2009-07-29 10:52:49,023 ERROR ([serverExporter]) [http-127.0.0.1-8080-1] Servlet.service() for servlet serverExporter threw exception
    java.io.EOFException
        at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
        at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2748)
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
        at org.springframework.core.ConfigurableObjectInputStream.<init>(ConfigurableObjectInputStream.java:47)
        at org.springframework.remoting.rmi.CodebaseAwareObjectInputStream.<init>(CodebaseAwareObjectInputStream.java:81)
        at org.springframework.remoting.rmi.RemoteInvocationSerializingExporter.createObjectInputStream(RemoteInvocationSerializingExporter.java:105)
        at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.readRemoteInvocation(HttpInvokerServiceExporter.java:115)
        at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.readRemoteInvocation(HttpInvokerServiceExporter.java:96)
        at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.handleRequest(HttpInvokerServiceExporter.java:73)
        at org.springframework.web.context.support.HttpRequestHandlerServlet.service(HttpRequestHandlerServlet.java:65)
        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.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        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:230)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
        at java.lang.Thread.run(Thread.java:619)
    

    我仍然不知道问题是什么:/

    2 回复  |  直到 15 年前
        1
  •  1
  •   Gregory Mostizky    15 年前

    根据您发布的跟踪,您在客户端使用的服务URL存在一些问题。我将尝试打开到指定URL的手动连接,以尝试调试该问题。

    类似:

        URL url = new URL("your_service_url");
        int i = url.openConnection().getInputStream().read();
    

    编辑:

    505在客户机上,EOF在服务器上意味着您正在获取从客户机到服务器的连接。它失败了,因为我们发送垃圾,所以这是预期的,实际上是正常的。

    您确定在测试和Spring配置中使用了相同的URL吗? 可以发布client context.xml的相关部分吗? 尤其是原始异常的这一行看起来很奇怪:

    [http:/127.0.0.1:8080/<servlet context>/<servlet name>/server]

        2
  •  0
  •   Arjan    15 年前

    您确定URL是正确的吗?堆栈跟踪在http后面缺少一个斜杠:

    Could not access HTTP invoker remote service
      at [http:/127.0.0.1:8080/<servlet-context>/<servlet-name>/Server]