弹簧& Web 服务客户端 - 故障详细信息

发布于 2024-07-04 17:19:43 字数 1490 浏览 8 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

街角卖回忆 2024-07-11 17:19:43

我还遇到了 getFaultDetail() 返回 null 的问题(对于 SharePoint Web 服务)。 我可以使用与此类似的方法获取详细信息元素:

private Element getDetail(SoapFaultClientException e) throws TransformerException {
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMResult result = new DOMResult();
    transformer.transform(e.getSoapFault().getSource(), result);
    NodeList nl = ((Document)result.getNode()).getElementsByTagName("detail");
    return (Element)nl.item(0);
}

之后,您可以对返回的元素或任何您想要的内容调用 getTextContent() 。

I also had the problem that getFaultDetail() returned null (for a SharePoint web service). I could get the detail element out by using a method similar to this:

private Element getDetail(SoapFaultClientException e) throws TransformerException {
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMResult result = new DOMResult();
    transformer.transform(e.getSoapFault().getSource(), result);
    NodeList nl = ((Document)result.getNode()).getElementsByTagName("detail");
    return (Element)nl.item(0);
}

After that, you can call getTextContent() on the returned Element or whatever you want.

海拔太高太耀眼 2024-07-11 17:19:43

检查接收到 Soap Failure 时收到的 HTTP 响应类型。 当 SOAP 错误响应使用 HTTP 200 而不是 HTTP 500 时,我遇到了同样的问题。然后您会得到:

JAXB 解组异常; 嵌套异常是
javax.xml.bind.UnmarshalException

当您如下更改 WebServiceTemplate 连接故障设置时:

WebServiceTemplate webServiceTemplate = getWebServiceTemplate();
webServiceTemplate.setCheckConnectionForFault(false);

那么您可以正确捕获 SoapFaultClientException

Check out what type of HTTP response you get when receiving Soap Fault. I had the same problem when SOAP Fault responses using HTTP 200 instead of HTTP 500. Then you get:

JAXB unmarshalling exception; nested exception is
javax.xml.bind.UnmarshalException

When you change WebServiceTemplate connection fault settings as below:

WebServiceTemplate webServiceTemplate = getWebServiceTemplate();
webServiceTemplate.setCheckConnectionForFault(false);

then you can properly catch SoapFaultClientException

亚希 2024-07-11 17:19:43

来自 marshalSendAndReceive 方法
看起来 catch 块中的 SoapFaultClientException 永远不会发生。

从 API 来看,确定故障详细信息的最佳选择是设置自定义 故障消息接收器

From the Javadocs for the marshalSendAndReceive method
it looks like the SoapFaultClientException in the catch block will never happen.

From the API it looks like the best bet for determining the details of the fault is to set a custom Fault Message Receiver.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文