【发布时间】:2012-02-22 11:54:09
【问题描述】:
我正在使用 Axis 1.4 连接到 Web 服务。此服务通过使用带有错误描述和 HTTP 状态代码 202 的 SOAP 信封响应来发出错误信号。响应如下所示:
<soap:Envelope>
<soap:Body>
<TestResponse>
<TestResult>wrong format</TestResult>
</TestResponse>
</soap:Body>
</soap:Envelope>
测试响应在 WSDL 中描述:
<s:element name="TestResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="TestResult" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
所以,在我看来,一切都很好。问题是,我没有收到 Axis 生成的存根的错误消息,而是收到 null。当我调试时,我在HTTPSender class line 705 中找到了该行:
if ((returnCode > 199) && (returnCode < 300)) {
if (returnCode == 202) {
return inp;
}
// SOAP return is OK - so fall through
}
它跳过了解码 SOAP 信封的代码。所以,最后,我发送了错误的请求(它可以是任何运行时,例如用户密码过期),我收到错误描述,但是因为我使用 Axis,我无法访问它并且只收到null,这使得调试非常困难(我发布的响应是我使用 Wireshark 找到的)。
我的问题是,它是错误还是功能?是否让 Web 服务滥用 HTTP 状态 202 或标准允许它的公司和 Axis 太原始而无法支持它?充其量我想避免使用来自apache的HttpClient或类似的东西手动编码通信......
【问题讨论】:
标签: java web-services wsdl axis http-status-codes