2016-11-25 17 views
1

С помощью spring-ws-test, как я могу издеваться над SoapFaultDetail, чтобы вернуть ожидаемую полезную нагрузку?spring-ws-test: Как издеваться над SoapFaultDetail

ResponseCreators, кажется, поддерживает только faultString/faultReason:

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

Элемент деталь не установлен. Однако мне нужна ошибка, чтобы содержать мою пользовательскую полезную нагрузку.

Есть ли API высокого уровня для этого?

ответ

2

Вы можете использовать withPayload метод ResponseCreators и обеспечить его с ошибкой 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' не устанавливает оболочку в качестве полезной нагрузки, она задает данный XML-ресурс как ответ полезной нагрузки (содержимое элемента тела SOAP). В случае ошибки SOAP это будет элемент SOAP Fault в пространстве имен оболочки мыла (как показано выше). В моих тестовых примерах с модулями выше приведено исключение SoapFaultClientException, и я могу получить FaultDetail и развязать пользовательский контент с правильным объектом. – CodeNotFound