1

我们需要将 SOAP 消息发送到 Web 服务。这是一个新的领域,所以我们有点困惑......即使在搜索和阅读该主题时也是如此。以下是我们所知道/所做的:

1)我们必须通过使用 Base64 中的数字证书进行身份验证(获得颁发 CSR - 证书签名请求)。

2) SOAP 消息必须包含一个 Security Header (wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext") 和一个 Body。

3) WSDL 文件不包含 HEADER 部分,但我们有标题“字段结构”

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

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

问题

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

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

谢谢

4

1 回答 1

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);
于 2012-11-30T20:02:44.977 回答