java - Apache CXF修改SOAP请求中的头元素前缀

时间:2016-03-16 15:21:32

标签: java soap cxf

我正在使用Apache CXF在与我的服务器通信时使用WSDL。 每个SOAP消息都有标题元素,以添加对ws-security的支持。问题是我的标题元素是以一种奇怪的方式生成的:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <env:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope">
   ...
   </env:Header>
   <soap:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-82d2a06c-4f23-4c0d-adc7-35acdb59cc90">
      ....
   </soap:Body>
</soap:Envelope>

它使用错误的前缀env而不是soap。 服务器期望标头采用以下格式:

<soap:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope">

但取而代之的是

<env:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope">

我真的不知道我应该发布的代码部分,这是我如何配置我的JaxWsProxyFactoryBean

JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
// Set SOAP 1.2 binding
final Soap12 soap12 = Soap12.getInstance();
BindingConfiguration config = new BindingConfiguration() {
    @Override
    public String getBindingId() {
        return soap12.getBindingId();
    }
};


jaxWsProxyFactoryBean.setBindingConfig(config);
jaxWsProxyFactoryBean.setBindingId(soap12.getBindingId());

jaxWsProxyFactoryBean.setServiceClass(Oppslagstjeneste1602.class);
jaxWsProxyFactoryBean.setAddress(serviceAddress);

// Configures WS-Security
WSS4JInterceptorHelper.addWSS4JInterceptors(jaxWsProxyFactoryBean);
contactInfoPort = (ConnectService) jaxWsProxyFactoryBean.create();

如何将命名空间更改为soap ??

0 个答案:

没有答案