如何强制Axis2使用HTTP 1.0进行Web服务调用?

时间:2012-01-27 11:31:19

标签: java axis2 chunking

我在访问第三方提供的网络服务时遇到问题。看看Axis2线路跟踪,我可以看到 \ r \ n3ff8 \ r \ n 在我回来的XML标签中间,这会导致Axis2在尝试解析它们时出现异议。

据我所知,这与HTTP 1.1分块有关,而Axis2的处理效果并不理想。

我遇到的问题与this forum post

中的问题相同

如何更改我的Web服务代码以使其使用HTTP 1.0来避免分块问题?据我所知,Axis默认为CommonsHTTPSender所以我不确定为什么上面链接的论坛帖子建议改为那个。

或者有更好的方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您可以直接关闭分块:

stub._getServiceClient().getOptions().setProperty(HTTPConstants.CHUNKED, false);

如果您愿意,也可以通过axis2.xml配置文件控制这两件事。找到以下部分:

<transportSender name="http"
    class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
    <parameter name="PROTOCOL">HTTP/1.1</parameter>
    <parameter name="Transfer-Encoding">chunked</parameter>
</transportSender>

您可以将PROTOCOL参数更改为“HTTP / 1.0”,或删除Transfer-Encoding参数以禁用分块。

答案 1 :(得分:0)

了解如何操作,获取您将用于调用服务的存根对象,并在其后添加以下代码:

stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.HTTP_PROTOCOL_VERSION,
                org.apache.axis2.transport.http.HTTPConstants.HEADER_PROTOCOL_10);