8

faulString を設定できるのに、SOAPFault でカスタム エラー コードを設定できないのはなぜですか? 例外をスローすると、"Code X" というテキストが SoapFaultException に表示されません。誰かが理由を教えてくれますか?ありがとう。

SOAPFault soapFault = SOAPFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL).createFault();
soapFault.setFaultString("String Y")
soapFault.setFaultCode("Code X");

throw new SOAPFaultException(soapFault);
4

2 に答える 2

6

次の例では、SOAP 応答で障害コードを取得できます。

String faultString = "String Y";
String faultCodeValue = "Code X";
QName faultCode = new QName("nameSpaceURI", faultCodeValue);
SOAPFault soapFault = null;
try {
    soapFault = SOAPFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL).createFault(faultString, faultCode);
    throw new javax.xml.ws.soap.SOAPFaultException(soapFault);
} catch (SOAPException e1) {
    //
}

次の SOAP 障害が返されます。

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope" xmlns="">
        <faultcode xmlns:ns0="nameSpaceURI">ns0:Code X</faultcode>
        <faultstring>String Y</faultstring>
        </S:Fault>
    </S:Body>
</S:Envelope>
于 2017-03-08T16:36:18.153 に答える
4

ドキュメントから:

障害に関する情報を提供する障害コードは、SOAP 1.1 仕様で定義されています。この要素は、SOAP 1.1 では必須です。障害コードは QName である必要があるため、このメソッドの setFaultCode(Name) 形式を使用することをお勧めします。

faultCode-String設定する障害コードを指定します。"prefix:localName"名前空間宣言でプレフィックスが定義されている形式である必要があります。

設定している障害コードは、次の形式にする必要があることに注意してくださいprefix:localName。設定しています: Code X、それが表示されない理由です。この方法を使用すると、すべて問題ありません。

于 2012-09-24T13:54:36.857 に答える