如何从轴客户端中的soap标头中删除mustunderstand属性。即使我没有特别设置它,当我设置soap标头信息mustundertand时,actor属性会自动添加到soap消息中。有人知道如何删除它们吗?
我正在使用 Axis2 1.4 版本的 wsdl2java 来创建我的 ws 客户端。
这些解决方案都不适合我,因为:
- 我正在使用 Axis(不是 Axis2)
- 我根本不想指定该属性,因为我的服务器对应项不支持它(“'http://schemas.xmlsoap.org/soap/envelope/:必须了解 http://schemas.xmlsoap.org/soap/envelope/:mustUnderstand'属性未声明”是这种情况下的典型答案)。
看着“的答案”将 ws-security 添加到 wsdl2java 生成的类 https://stackoverflow.com/questions/14266237/adding-ws-security-to-wsdl2java-generated-classes/14332481#14332481“帮助我编写了一个对我有用的解决方案:
void addSecurityHeader(Stub stub, final String username, final String password) {
QName headerName = new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security"); // Or any other namespace that fits in your case
AtomicReference<SOAPHeaderElement> header
= new AtomicReference<SOAPHeaderElement>
(new SOAPHeaderElement(headerName) {
{
SOAPElement utElem = addChildElement("UsernameToken");
utElem.addChildElement("Username").setValue(username);
utElem.addChildElement("Password").setValue(password);
}
@Override
public void setAttribute(String namespace, String localName, String value) {
if (!Constants.ATTR_MUST_UNDERSTAND.equals(localName)) { // Or any other attribute name you'd want to avoid
super.setAttribute(namespace, localName, value);
}
}
});
SOAPHeaderElement soapHeaderElement = header.get();
soapHeaderElement.setActor(null); // No intermediate actors are involved.
stub.setHeader(soapHeaderElement); // Finally, attach the header to the stub
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)