2016-11-25 14 views
1

spring-ws-testでSoapFaultDetailをモックして、予期されるエラーペイロードを返すにはどうすればよいですか?spring-ws-test:SoapFaultDetailをモックする方法

ResponseCreatorsはfaultStringの/のFaultReasonをサポートしているようだ:

mockServer.expect(anything()).andRespond(withClientOrSenderFault(faultStringOrReason, Locale.GERMAN)); 

詳細要素が設定されていません。しかし、私は自分のカスタムペイロードを含むことが必要です。

これを行うための高度なAPIはありますか?

答えて

2

あなたはResponseCreatorswithPayloadメソッドを使用して、以下のようにカスタムペイロードを含むSOAPフォルトでそれを提供することができます。

Source faultPayload = new StringSource(
      "<SOAP-ENV:Fault xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:v1=\"http://domain/schema/common/fault\">" 
        + "<faultcode>SOAP-ENV:Server</faultcode>" 
        + "<faultstring xml:lang=\"en\">fault</faultstring>" 
        + "<detail>" 
        + "<v1:custompayload>" 
        + "<v1:element1>element1</v1:element1>" 
        + "<v1:element2>element2</v1:element2>" 
        + "</v1:custompayload>" 
        + "</detail>" 
        + "</SOAP-ENV:Fault>"); 

    mockWebServiceServer.expect(payload(requestPayload)) 
      .andRespond(withPayload(faultPayload)); 
+0

これは間違っているペイロードとしてエンベロープを設定しているようです。 – Puce

+0

withSoapEnvelopeを使用することはできますが – Puce

+0

上記が間違っている理由を説明できますか? 'withPayload'はエンベロープをペイロードとして設定せず、ペイロード応答(SOAP本体要素のコンテンツ)として指定されたResource XMLを設定します。 SOAP障害の場合、これはsoapエンベロープ名前空間内のSOAP Fault要素です(上記のように)。私のUnitテストのケースでは、上記でSoapFaultClientExceptionがトリガされ、FaultDetailを取得して、カスタムコンテンツを正しいオブジェクトに非マーシャルすることができます。 – CodeNotFound

関連する問題