0

我正在尝试使用axis2,但消息中必须有安全标头。

我试图从这个示例中添加 PEWSClientHeaderHandler 类,但它不起作用(它适用于默认的 sun 实现,但不适用于axis2)。形成的 SOAP 消息如下所示:

...
<soapenv:Header>
  <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"></wsse:Security>
</soapenv:Header>
...

缺少用户名令牌、用户名和密码标签(但同样,它们是在代码中设置的,使用 sun 时也不例外)。

谁能提供一个最简单的例子来说明如何在axis2中设置这样的标题?

4

1 回答 1

0

Axis2 实现有 1 个小区别:

标准 Sun 实施:

SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope();
SOAPFactory soapFactory = SOAPFactory.newInstance();

SOAPHeader sh = envelope.addHeader();
SOAPElement wsSecHeaderElm = soapFactory.createElement("Security", AUTH_PREFIX, AUTH_NS);
SOAPElement userNameTokenElm = soapFactory.createElement("UsernameToken", AUTH_PREFIX, AUTH_NS);
SOAPElement userNameElm = soapFactory.createElement("Username", AUTH_PREFIX, AUTH_NS);
SOAPElement passwdElm = soapFactory.createElement("Password", AUTH_PREFIX, AUTH_NS);

userNameElm.addTextNode("username");
passwdElm.addTextNode("password");

userNameTokenElm.addChildElement(userNameElm);
userNameTokenElm.addChildElement(passwdElm);
wsSecHeaderElm.addChildElement(userNameTokenElm);
sh.addChildElement(wsSecHeaderElm);

Axis2 实现:

// the same as above

userNameTokenElm.addChildElement(userNameElm);
userNameTokenElm.addChildElement(passwdElm);
SOAPElement el = sh.addChildElement(wsSecHeaderElm); // addChildElement returns new SOAPElement!
el.addChildElement(userNameTokenElm);    

就这样

于 2013-09-11T11:39:58.600 回答