SOAP/WSDL、AXIS2和数字签名SOAP消息

SOAP/WSDL、AXIS2和数字签名SOAP消息,soap,wsdl,certificate,axis2,soapheader,Soap,Wsdl,Certificate,Axis2,Soapheader,我们需要向Web服务发送SOAP消息。这是一个新领域,所以我们有点困惑。。。甚至在搜索和阅读有关主题的信息时。以下是我们所知道/做的: 1我们必须通过使用Base64中的数字证书进行身份验证,并发出CSR–证书签名请求 2 SOAP消息必须包含安全标头wss:Security xmlns:wss=http://schemas.xmlsoap.org/ws/2002/12/secext 还有一具尸体 3 WSDL文件不包含头部分,但我们有头字段结构 4我们决定使用Axis2/xmlbeans,并使

我们需要向Web服务发送SOAP消息。这是一个新领域,所以我们有点困惑。。。甚至在搜索和阅读有关主题的信息时。以下是我们所知道/做的:

1我们必须通过使用Base64中的数字证书进行身份验证,并发出CSR–证书签名请求

2 SOAP消息必须包含安全标头wss:Security xmlns:wss=http://schemas.xmlsoap.org/ws/2002/12/secext 还有一具尸体

3 WSDL文件不包含头部分,但我们有头字段结构

4我们决定使用Axis2/xmlbeans,并使用

5我们可以使用提供的sync/async register存根方法轻松创建存根并发送WSDL主体元素,我假设Axis2将生成正确的SOAP消息

问题
1如何将WS-Security标头添加到SOAP消息中。我们必须操作AXIS2生成的代码吗

ServiceClient client = stub._getServiceClient();
SOAP11Factory factory = new SOAP11Factory();
OMNamespace SecurityElementNamespace = factory.createOMNamespace("http://schemas.xmlsoap.org/ws/2002/12/secext", "wss");

OMElement usernameTokenEl = factory.createOMElement("UsernameToken", SecurityElementNamespace);
OMElement usernameEl = factory.createOMElement("Username", SecurityElementNamespace);
OMElement passwordEl = factory.createOMElement("Password", SecurityElementNamespace);
usernameEl.setText(username);
passwordEl.setText(password);
usernameTokenEl.addChild(usernameEl);
usernameTokenEl.addChild(passwordEl);

SOAPHeaderBlockImpl block = new SOAP11HeaderBlockImpl("Security", SecurityElementNamespace, factory);
block.addChild(usernameTokenEl);

client.addHeader(block);
2如何使用数字证书进行身份验证


谢谢

1我们如何将WS-Security头添加到SOAP消息中。我们必须操作AXIS2生成的代码吗

ServiceClient client = stub._getServiceClient();
SOAP11Factory factory = new SOAP11Factory();
OMNamespace SecurityElementNamespace = factory.createOMNamespace("http://schemas.xmlsoap.org/ws/2002/12/secext", "wss");

OMElement usernameTokenEl = factory.createOMElement("UsernameToken", SecurityElementNamespace);
OMElement usernameEl = factory.createOMElement("Username", SecurityElementNamespace);
OMElement passwordEl = factory.createOMElement("Password", SecurityElementNamespace);
usernameEl.setText(username);
passwordEl.setText(password);
usernameTokenEl.addChild(usernameEl);
usernameTokenEl.addChild(passwordEl);

SOAPHeaderBlockImpl block = new SOAP11HeaderBlockImpl("Security", SecurityElementNamespace, factory);
block.addChild(usernameTokenEl);

client.addHeader(block);

好的,因为您对技术的使用没有限制。也许您应该选择CXF,它可以轻松地支持WS-Security。如果您仍然想使用Axis2,可以尝试ApacheRampart,我完全放弃了Axis2。。。庞大的依赖列表。。。绝对混乱,复杂。我讨厌这种经历。将我的实现更改为JAX…是的。我在Axis2方面的经验也非常糟糕。