获取403:在java中使用apache cxf使用SOAP服务时禁止使用

时间:2016-07-12 11:28:53

标签: java apache soap cxf

在尝试使用apache cxf 3.1.6和java 8来使用SOAP服务时,通过更改有效负载内容,我得到'200 OK'或'403 Forbidden'。

奇怪的是,如果我打印出有效载荷并放上SOAPUI,那么我总是得到200 OK。

你遇到过类似的问题吗?怎么解决这个?

1 个答案:

答案 0 :(得分:3)

所以你不要像我一样陷入困境,摸不着头脑,想着为什么到底发生了什么,这里是解决的问题和解决方案。

问题出现是因为默认情况下apach cxf使用“Chunking”,一旦达到定义的阈值,它基本上会向端点发送小块数据。这导致SOAP消息在未完成时发送,导致'403'(假设服务器不支持'分块')!解决方案是通过将spring-config.xml更改为:

来禁用“Chunking”
  <http-conf:conduit name="*.http-conduit">
<http-conf:client Connection="Keep-Alive"
                  MaxRetransmits="1"
                  AllowChunking="false" />

其他信息:

on org.apache.cxf.transport.http.HTTPConduit,对于“prepare”方法,这一位解释了所有:

// DELETE does not work and empty PUTs cause misleading exceptions
        // if chunking is enabled
        // TODO : ensure chunking can be enabled for non-empty PUTs - if requested
        if (csPolicy.isAllowChunking() 
            && isChunkingSupported(message, httpRequestMethod)) {
            //TODO: The chunking mode be configured or at least some
            // documented client constant.
            //use -1 and allow the URL connection to pick a default value
            isChunking = true;
            chunkThreshold = csPolicy.getChunkingThreshold();
        }
        cookies.writeToMessageHeaders(message);