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

时间:2012-11-30 03:29:12

标签: 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文件不包含HEADER部分,但我们有标题“Field structure”

4)我们决定使用Axis2 / xmlbeans ,并使用https://axis.apache.org/axis2/java/core/tools/eclipse/wsdl2java-plugin.html

创建了JAVA类

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

问题

1)我们如何将WS-Security(?)HEADER添加到SOAP消息。我们是否必须操纵AXIS2生成的代码?

2)我们如何使用数字证书进行身份验证

由于

1 个答案:

答案 0 :(得分:0)

1)我们如何将WS-Security(?)HEADER添加到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);