如何从HTTP内容类型的SOAP请求中删除action参数?

时间:2015-07-01 15:04:06

标签: java web-services soap wsdl

我有第三方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中的空动作参数?

1 个答案:

答案 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()));