1

我想通过 Spring-WS 抛出我自己的自定义异常。我这样写我的异常类:

@SoapFault(faultCode = FaultCode.CUSTOM, customFaultCode = "{http://www.myorg.com/test}INVALID_INPUT_DATA")
public class InvalidDataException extends Exception
{
    public InvalidDataException(String errorMsg)
    {
    super(errorMsg);
    }

    public InvalidDataException(Throwable t)
    {
    super(t);
    }
}

当我的服务使用 text 参数引发此异常时,我会得到一个很好的 soapFault ,其中我的 customFaultCode 作为 subCode :

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
   <env:Header/>
   <env:Body>
      <env:Fault>
         <env:Code>
            <env:Value>env:Receiver</env:Value>
            <env:Subcode>
               <env:Value xmlns:ns1="http://www.myorg.com/test">ns1:INVALID_INPUT_DATA</env:Value>
            </env:Subcode>
         </env:Code>
         <env:Reason>
            <env:Text xml:lang="en">WTF! Something wrong with your input data...</env:Text>
         </env:Reason>
      </env:Fault>
   </env:Body>
</env:Envelope>

但我不想有 faultCode env:Receiver,我想将其更改为env:Sender因为输入数据的问题出在客户端!但我不知道该怎么做。如果我在异常类中将 faultCode 更改为FaultCode.SENDER,我会得到一个env:Sender faultCode 但不考虑我的 customFaultCode,我会得到:

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
   <env:Header/>
   <env:Body>
      <env:Fault>
         <env:Code>
            <env:Value>env:Sender</env:Value>
         </env:Code>
         <env:Reason>
            <env:Text xml:lang="en">WTF! Something wrong with your input data...</env:Text>
         </env:Reason>
      </env:Fault>
   </env:Body>
</env:Envelope>

我在 SimpleSoapExceptionResolver 的 javadoc 中看到错误代码始终设置为 Receiver(对于 SOAP 1.2)。我怎样才能改变这个?

斯蒂马

4

0 回答 0