Spring WS Отправить SOAPFault с другим статусом HTTP, чем 500 - PullRequest
0 голосов
/ 10 июля 2019

В бизнес-случае я пытаюсь отправить исключение, которое заменяет ответ SoapFault.

Для бизнес-целей я должен каждый раз отправлять ответ Fault с другим статусом HTTP.

Мои проблемы:

  1. Каждый раз, когда я меняю статус HTTP, исключение «WebServiceTransportException» вызывается Spring WS.
  2. Даже если я меняю статус 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...