Я пытаюсь использовать веб-службу, используя клиент, сгенерированный с использованием WSDL. Все мои сообщения хороши без каких-либо проблем (SOAPFault можно поймать и вернуть ошибку соответственно), за исключением того, что для определенной операции, например, при использовании неправильных учетных данных (пока что они определены), он возвращает ответ 500 и SOAPFault XML вместе с ним. Я проверил и увидел XML-файл Fault, используя приложение SoapUI. Я могу подтвердить, что XSD для этого SOAPFault XML такой же, как и для других (хороших) сбоев.Получить xml-содержимое ответа сервера 500 (ошибка внутреннего сервера)
Поскольку ответ сервера 500 (мое предположение), я не могу уловить это как исключение SOAPException, но как нормальное исключение. Как нормальное исключение, e.getMessage() не помогает мне точно знать, что такое ошибка.
Итак, это то, что я делаю в данный момент,
try {
outResponse = port.Service(input);
if (condition = true)
result = "SUCCESS";
else
result = "FAILURE";
} catch (SOAPFaultException ex) {
result = faultReader(ex);
/* fault reader will strip the fault xml and get the error accordingly.*/
} catch (Exception e){
logger.info(e.getMessage());
logger.info("Possible cause may be wrong user credentials.");
/* I am expecting to read the SOAPFault XML here */
result = "FAILURE";
}
return result;
Как я могу прочитать этот XML посланный вместе с ошибкой сервера 500?
примечание: у меня нет большого контроля над серверной частью для изменения любых параметров. То, что я намереваюсь сделать, - это поймать как нормальное исключение, прочитать отправленный код ошибки xml и прочитать сообщение об ошибке и соответственно вернуть его.
Заранее спасибо.
[обновление] Это строка ошибка выборки я получаю вместе с ответом сервера 500. (это не связано с учетными данными, но похоже)
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>null</faultstring>
<detail>
<IBResponse type="error">
<DefaultTitle>Response</DefaultTitle>
<StatusCode>20</StatusCode>
<MessageID>505</MessageID>
<DefaultMessage>Unable to find a Routing corresponding to the incoming request message.</DefaultMessage>
<MessageParameters/>
</IBResponse>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
[обновление] я обнаружил, что, когда серверный ответный код равен 500, тип содержимого установлен в text/html, тогда как исключение SOAPFault ожидает текст/xml.
HTTP/1.1 500 Internal Server Error
Date: Fri, 22 May 2015 06:30:40 GMT
Content-Length: 634
Content-Type: text/html
Connection: Close
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>null</faultstring>
<detail>
<IBResponse type="error">
<DefaultTitle>Integration Broker Response</DefaultTitle>
<StatusCode>20</StatusCode>
<MessageID>535</MessageID>
<DefaultMessage><![CDATA[User Password required for Service Operation CI_SH_USERMAINT_CI_UP. (158,535)]]></DefaultMessage>
<MessageParameters>
<Parameter><![CDATA[CI_SH_USERMAINT_CI_UP]]></Parameter>
</MessageParameters>
</IBResponse>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Так что, возможно ли это даже прочитать этот конверт SOAP?
Можете ли вы опубликовать строку xml? – jdweng
обновил мой запрос с помощью строки ответа xml. – Vimal
Это ответ «SOAP». Используйте клиент SOAP! – hek2mgl