Мне нужно получить XML-ответ от веб-службы. Проблема заключается в том, что статус заголовка этого ответа установлен на HTTP/1.1 400 Bad Request
, и это состояние вызывает исключение WebServiceException в Java, что делает невозможным перехват ответа xml (в SoapUI я ясно вижу ответ xml и всю его информацию).
public RegistryResponseType sendRequest(SubmitObjectsRequest submitObjectsRequest) {
RegistryResponseType r = null;
SomeService service = new SomeService();
try {
r = service.do(submitObjectsRequest);
} catch (WebServiceException e) {
//do something to retrieve xml response
}
return r;
}
response.xml
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:To>xxx</wsa:To>
<wsa:MessageID>xxx</wsa:MessageID>
<wsa:Action>http://www.w3.org/2005/08/addressing/soap/fault</wsa:Action>
<wsa:RelatesTo>5c47a3df-12e5-4599-a5aa-0e70457a76e7</wsa:RelatesTo>
</soapenv:Header>
<soapenv:Body>
<soapenv:Fault>
<soapenv:Code>
<soapenv:Value>soapenv:Sender</soapenv:Value>
</soapenv:Code>
<soapenv:Reason>
<soapenv:Text xml:lang="en-US">Missing upload consent</soapenv:Text>
</soapenv:Reason>
<axis2ns1:Detail xmlns:axis2ns1="http://www.w3.org/2003/05/soap-envelope">
<wsse:InvalidSecurityToken xmlns:wsse="http://docs.oasisopen.org/wsrf/bf-2 bf-2.xsd">
<wsrf-bf:Timestamp xmlns:wsrf-bf="http://docs.oasis-open.org/wsrf/bf-2">2018-08-08T09:43:19.212CEST</wsrf-bf:Timestamp>
<wsrf-bf:ErrorCode xmlns:wsrf-bf="http://docs.oasis-open.org/wsrf/bf-2">PFA12</wsrf-bf:ErrorCode>
<wsrf-bf:Description xmlns:wsrf-bf="http://docs.oasis-open.org/wsrf/bf-2">Missing upload consent</wsrf-bf:Description>
</wsse:InvalidSecurityToken>
</axis2ns1:Detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Добавление catch(SOAPFaultException e)
не решает проблему. Возможно ли обработать исключение и получить XML?
UPDATE:
Как я уже говорил, проблема связана со статусом заголовка, и этот статус зависит от SOAP 1.2 (Проводя некоторые исследования, я обнаружил, что для той же проблемы в SOAP 1.1 статус заголовка был 500)
Исключение выдает MessageSenderInterceptor
Apache CXF.
Есть ли способ переопределить перехватчик?