在尝试使用apache cxf 3.1.6和java 8来使用SOAP服务时,通过更改有效负载内容,我得到'200 OK'或'403 Forbidden'。
奇怪的是,如果我打印出有效载荷并放上SOAPUI,那么我总是得到200 OK。
你遇到过类似的问题吗?怎么解决这个?
答案 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);