gpt4 book ai didi

java - 当 HTTP 状态为 202 时,Axis 1.4 不解码 SOAP 信封 - 错误还是功能?

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:51 24 4
gpt4 key购买 nike

我正在使用 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 生成的 stub 的错误消息,而是收到 null 。在调试时,我在 HTTPSender 类第 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手动编码通信......

最佳答案

这看起来像是一个错误。 HTTP 202 Accepted 状态代码用于指示请求已被接受,但需要进一步处理才能完成。响应应该有一个Location header ,表示可以对服务进行的回调,以检查请求状态,以及一个带有描述性消息的可选正文。

对于 Web 服务,我希望服务实现者能够处理主体响应,只要其内容与服务契约(在本例中为 WSDL)相匹配。但 Axis 的实现者可能有不同的感受。

无论如何,供应商错误地使用 202 状态代码来返回错误,这是问题的一个(大)部分。

关于java - 当 HTTP 状态为 202 时,Axis 1.4 不解码 SOAP 信封 - 错误还是功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9394258/

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