我正在使用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
??