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);
    }
}

私のサービスがテキスト パラメーターでこの例外をスローすると、 customFaultCode を subCode として使用して適切な soapFault を取得します。

<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