Java 如何获取SOAP错误';处理自定义故障异常时的错误代码

Java 如何获取SOAP错误';处理自定义故障异常时的错误代码,java,soap,jax-ws,soapfault,jbossws,Java,Soap,Jax Ws,Soapfault,Jbossws,我们的系统使用SOAPWeb服务,使用基于服务的WSDL生成的JAX-WS客户端存根。如果出现错误,服务器将返回如下SOAP错误: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Header /> <s:Body> <s:Fault> <faultcode>SomeErrorCode</faultcode>

我们的系统使用SOAPWeb服务,使用基于服务的WSDL生成的JAX-WS客户端存根。如果出现错误,服务器将返回如下SOAP错误:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header />
  <s:Body>
    <s:Fault>
      <faultcode>SomeErrorCode</faultcode>
      <faultstring xml:lang="en-US">Some error message</faultstring>
      <detail>
        <ApiFault xmlns="http://somenamespace.com/v1.0" xmlns:a="http://somenamespace.com/v1.0" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
          <a:RequestId>123456789</a:RequestId>
          <a:CanRetry>true</a:CanRetry>
        </ApiFault>
      </detail>
    </s:Fault>
  </s:Body>

如您所见,此自定义故障异常扩展了
异常
而不是。Hovewer我需要得到SOAP fault的faultcode,它只能通过使用方法来检索。您能告诉我如何在捕获上述自定义故障异常的地方访问或SOAP fault的故障代码吗?

您可以实现JAX-WS并将其添加到您的客户机web服务引用中。这将有机会处理请求消息和响应消息或通知故障

创建一个
SOAPHandler
,您的
handleFault()
方法将被传递给
SOAPMessageContext
。从中可以
getMessage().getSOAPBody().getFault()
获取
SOAPFault
,其中包含
getFaultCode()
getDetail()


将新的故障处理程序分配给web服务引用。一种方法是通过
@HandlerChain
。它将在您的
catch
子句之前调用。

您是否有权访问返回的SOAPMessage本身?否。我只抛出了在代码中捕获的异常
@WebFault(name = "ApiFault", targetNamespace = "http://services.altasoft.ge/orders/v1.0")
public class SomeCustomFault
    extends Exception
{
    private ApiFault faultInfo;

    public SomeCustomFault(String message, ApiFault faultInfo) {
        super(message);
        this.faultInfo = faultInfo;
    }

    public SomeCustomFault(String message, ApiFault faultInfo, Throwable cause) {
        super(message, cause);
        this.faultInfo = faultInfo;
    }

    public ApiFault getFaultInfo() {
        return faultInfo;
    }
}