Java Glassfish抛出com.sun.xml.ws.client.ClientTransportException:服务器发送了HTTP状态代码500:内部服务器错误

Java Glassfish抛出com.sun.xml.ws.client.ClientTransportException:服务器发送了HTTP状态代码500:内部服务器错误,java,jax-ws,glassfish-3,Java,Jax Ws,Glassfish 3,我已经将jax ws web服务部署到glassfish 3.1中。我的客户端请求返回5000到10000个对象列表的服务方法 com.sun.xml.ws.client.ClientTransportException: The server sent HTTP status code 500: Internal Server Error at com.sun.xml.ws.transport.http.client.HttpTransportPipe.createResponsePacket

我已经将jax ws web服务部署到glassfish 3.1中。我的客户端请求返回5000到10000个对象列表的服务方法

com.sun.xml.ws.client.ClientTransportException: The server sent HTTP status code 500: Internal Server Error
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:314)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:265)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:184)
at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:109)
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.client.Stub.process(Stub.java:323)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:161)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:113)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:93)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:144)
at $Proxy190.webservicemethodcall(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
我试图监视glassfish请求,但它在请求统计信息中显示errorcount 1,但它没有为我提供任何errorcount的正确原因。 在多次测试中都观察到了这一点,我在客户端得到了客户端传输,但在服务器上,方法线程一直正常工作到最后一行。它没有发现断开的连接。 我认为连接已断开,因此线程最终无法返回响应

注意:如果返回响应很小,比如多达3000个对象,它就可以正常工作。但我不认为这是大小问题。这是超时问题。在创建响应之前,我的请求连接已断开


请帮助我HTTP 500表示内部服务器错误,这不是您的客户端的错误。您的请求在服务器上失败。你应该在那里寻找更多信息。您的客户端堆栈跟踪没有任何帮助。

您可以尝试以下任意组合:

  • 当您的请求正在运行时,从客户端运行连续ping。您应该看到ping的中断(或者TTL的增加,至少可以证实这个理论)

  • 为服务器和客户端之间HTTP消息交换的转储设置以下JVM属性

    -Dcom.sun.xml.ws.transport.http.HttpAdapter.dump=true
    
  • 试一试

  • 实现一个JAX-WS来捕获管道干燥的确切时刻。这可能有额外的好处,当处理程序试图记录一条消息并被不存在的消息烧坏时,会抛出一个有意义的异常


  • 若您的日志策略并没有明确定义,那个么您的异常可能会在服务器端被默默地吞没

    我会尝试添加一个try/catch块来检测发生这种情况的地方(如果您改进了日志策略,最终会删除它)


    查看服务器日志。你应该在那里看到堆栈跟踪。@MayurB-对不起,我想我在回答这个问题。欢迎您担心客户端堆栈跟踪问题,但这不是问题所在。jetty服务器上不会出现相同的错误
    public returnType yourMethod(){
        try {
        .... all your code
        }catch (final Throwable t) {
          log.error("Failed to wait for device update: " + t.getMessage());
          //eventually re-throw the error
        }
    }