gpt4 book ai didi

xml - 获取服务器响应 500(内部服务器错误)的 xml 内容

转载 作者:数据小太阳 更新时间:2023-10-29 02:40:06 25 4
gpt4 key购买 nike

我正在尝试使用使用其 WSDL 生成的客户端来使用 Web 服务。我所有的通信都很好,没有问题(可以捕获 SOAPFault 并相应地返回错误)除了对于某些操作,例如使用错误的凭据(到目前为止已识别)时,它会返回一个响应 500 和一个 SOAPFault XML。我检查了一下,可以使用 SoapUI 应用程序查看故障 XML。我可以确认此 SOAPFault XML 的 XSD 与其他(好的)错误相同。

由于服务器响应是 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;

如何读取与服务器错误 500 一起发送的 XML?

注意:我对服务器端没有太多控制权来修改任何参数。我打算做的是作为一个正常的异常来捕获,读取其中发送的故障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 异常需要 text/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 信封了吗?

最佳答案

我花了一段时间,但我找到了解决方案。希望这会帮助其他遇到类似问题的人。首先将其定义为 WebException。然后您可以从响应流中检索错误响应。

     try
{
webResponse = (HttpWebResponse)req.GetResponse();
statusCode = webResponse.StatusCode;
Response.Write("Status code " + statusCode.ToString());

}
catch (WebException ex)
{
if (ex.Response != null)
{
StreamReader responseReader;

using (responseReader = new StreamReader(ex.Response.GetResponseStream()))
{
string exMessage = responseReader.ReadToEnd().ToString();
Response.Write("<br> Response from textkernel"+exMessage);
}
}
}

关于xml - 获取服务器响应 500(内部服务器错误)的 xml 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30368968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com