我有第三方Web服务,这是WSDL的一部分:
<wsdl:operation name="PerformOperation">
<soap12:operation soapAction=""/>
<wsdl:input name="PerformOperationRequest">
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output name="PerformOperationResponse">
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
请注意,soapAction为空,但由于某种原因,服务无法处理Content-type包含action =“”的请求,第三方支持表示请求不应包含要处理的action参数。
我已经使用JAX-WS通过WSDL生成必要的对象,现在我的请求在HTTP头中有下一个Content-type:
Content-type: application/soap+xml;charset="utf-8";action=""
我想知道如何摆脱Content-type中的空动作参数?
答案 0 :(得分:0)
我找到了解决方案。
首先,我尝试使用WSDL文件的本地副本,但没有这个恼人的操作描述行:<soap12:operation soapAction=""/>
它没有帮助,action=""
仍然存在于Content-Type中。
但后来我想起了SOAPHandler
界面。
我写了这样的话:
class RemoveActionHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext context) {
if ("".equals(context.get(BindingProvider.SOAPACTION_URI_PROPERTY)))
context.put(BindingProvider.SOAPACTION_URI_PROPERTY, null);
return true;
}
...
}
然后以这种方式使用它:
((BindingProvider)soapServicePort).getBinding()
.setHandlerChain(Collections.<Handler>singletonList(new RemoveActionHandler()));