【问题标题】:How do I get a Java WebService to actually show me exceptions from the proxy object?如何让 Java WebService 真正向我显示代理对象的异常?
【发布时间】:2010-11-01 15:06:11
【问题描述】:

我正在寻找应该是一个简单的 NullPointerException,但 Web 服务代理不断吞下错误。

WS 通过一个简单的客户端库公开,然后该客户端调用 WS。在 WS 的某个地方有一个 NPE,我找不到它,因为堆栈跟踪只显示“$Proxy.someMethod”而不是问题的原因。

如何从代理对象获取堆栈跟踪?是否有记录或处理这些异常的好策略?

...
Caused by: javax.xml.ws.soap.SOAPFaultException: java.lang.NullPointerException
    at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:187)
    at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:116)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:254)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:224)
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:117)
******** I need the trace from this line *********
    at $Proxy43.myMethod(Unknown Source) 
*****************
    at com.mypackage.client.MyClient.aMethod(MyClient.java:70)
    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.mozilla.javascript.MemberBox.invoke(MemberBox.java:161)
    ... 17 more

我已经阅读了一些内容,这似乎与已检查与未检查的异常有关。所以如果我抛出一个 IOException 我会得到堆栈跟踪,但是由于有一个 NullPointerException 冒泡它没有给我跟踪。

【问题讨论】:

    标签: java web-services proxy


    【解决方案1】:

    将您的服务包装在一个 try/catch 块中,并抛出在您的 WSDL 中定义为被调用服务的错误元素的异常。这样,客户端将获得可用的堆栈跟踪。

    【讨论】:

    • 我们处于开发/测试阶段,因此有助于在客户端获得完整的堆栈跟踪。我们的测试人员可以只向我们发送客户端错误,而不是向我们发送无用的跟踪,竭力为我提供时间戳,然后让我的团队通过日志进行钓鱼。
    • @Freiheit - 我已经重新完成了我的答案并检查了它是否有效。希望这会有所帮助。
    • 听起来可以。公认。这也让我更接近返回有用的错误代码/消息,而不是仅仅喷出堆栈跟踪。
    猜你喜欢
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多