В бизнес-случае я пытаюсь отправить исключение, которое заменяет ответ SoapFault.
Для бизнес-целей я должен каждый раз отправлять ответ Fault с другим статусом HTTP.
Мои проблемы:
- Каждый раз, когда я меняю статус HTTP, исключение «WebServiceTransportException» вызывается Spring WS.
- Даже если я меняю статус HTTP, оновходит в содержимое ошибки SOAP в сообщении «WebServiceTransportException», но в SOAPUi состояние HTTP равно 500. Каждый раз при возникновении исключения возникает состояние HTTP, равное 500, игнорируя состояние HTTP, которое я установил вручную.
I Использовал «HttpResponseInterceptor» для изменения кода ответа, а после этого «ClientInterceptor» с методом «afterCompletion» для изменения статуса HTTP.
WebServiceTemplate webServiceTemplate = new WebServiceTemplate(webServiceMessageFactory) {
@Override
protected Object handleError(WebServiceConnection connection, WebServiceMessage request) throws IOException {
HttpResponse httpResponse = ((HttpComponentsConnection) connection).getHttpResponse();
String statusAndCode = httpResponse.getStatusLine().getReasonPhrase() + " - "
+ httpResponse.getStatusLine().getStatusCode();
Charset charset = httpResponse.getEntity().getContentEncoding() != null
&& httpResponse.getEntity().getContentEncoding().getValue() != null ? Charset
.forName(httpResponse.getEntity().getContentEncoding().getValue()) : Charset.defaultCharset();
String response = httpResponse.getEntity() != null ? StreamUtils.copyToString(httpResponse.getEntity()
.getContent(), charset) : "N/A";
throw new SoapFaultException(statusAndCode);
}
};
Ошибка SOAP:
<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:Code>
<env:Reason>
<env:Text xml:lang="en"><![CDATA[Error communicating with upstream server. Exception:[org.springframework.ws.client.WebServiceTransportException: [Status: Payment Required - 402]
HTTP-статус в SOAPUI
SOAPAction
Accept application/soap+xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection close
#status# HTTP/1.1 500
Content-Length 4625
Date Wed, 10 Jul 2019 07:50:17 GMT
Content-Type application/soap+xml;charset=utf-8