<soapenv:Envelope>
<soapenv:Header>
<cor:india>test</cor:india>
</soapenv:Header>
<soapenv:Body>
.
.
</soapenv:Body>
</soapenv:Envelope>
OMFactory omFactory =OMAbstractFactory.getOMFactory();
OMNamespace omNamespace = omFactory.createOMNamespace("http://example.com/...", "cor");
OMElement header = omFactory.createOMElement("india", omNamespace);
header.setText("test");
stub._getServiceClient().addHeader(header);
我想将自定义标头添加到使用轴2和rampart的soap请求中。 但下面是我得到的例外
Caused by: org.apache.rampart.RampartException: Error in extracting message properties
at org.apache.rampart.RampartMessageData.<init>(RampartMessageData.java:379)
at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:61)
at org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:65)
... 10 more
Caused by: org.apache.ws.security.WSSecurityException: Error in converting SOAP Envelope to Document; nested exception is:
java.lang.ClassCastException: org.apache.axiom.om.impl.llom.OMElementImpl cannot be cast to org.apache.axiom.soap.SOAPHeaderBlock
at org.apache.rampart.util.Axis2Util.getDocumentFromSOAPEnvelope(Axis2Util.java:191)
at org.apache.rampart.RampartMessageData.<init>(RampartMessageData.java:270)
... 12 more
Caused by: java.lang.ClassCastException: org.apache.axiom.om.impl.llom.OMElementImpl cannot be cast to org.apache.axiom.soap.SOAPHeaderBlock
at org.apache.rampart.util.Axis2Util.getDocumentFromSOAPEnvelope(Axis2Util.java:141)
... 13 more
答案 0 :(得分:0)
如果您尝试使用此处提供的提示Example Custom Headers添加标题,以及在使用“壁垒”进行操作时,您可能会遇到上述问题。
解决方案是在META-INF中添加您自己的module.xml,并添加您要添加自定义标题的输出流
<module name="test" class="exampleClass">
<OutFlow>
<handler name="handle" class="exampleClass">
<order phase="Security" />
</handler>
</OutFlow>
</module>
=============================================== ===================================
public class exampleClass AbstractHandler implements org.apache.axis2.modules.Module {
public InvocationResponse invoke(MessageContext ctx) throws AxisFault {
SOAPEnvelope env = ctx.getEnvelope();
SOAPHeader hdr = env.getHeader();
SOAPFactory factory = (SOAPFactory) env.getOMFactory();
OMNamespace ns = factory.createOMNamespace("http://google.com", "cor");
//SOAPHeader head = factory.createSOAPHeader(env);
hdr.addHeaderBlock("india", ns).setText("value here");
return InvocationResponse.CONTINUE;
}
public void applyPolicy(Policy arg0, AxisDescription arg1) throws AxisFault {
// TODO Auto-generated method stub
}
public boolean canSupportAssertion(Assertion arg0) {
// TODO Auto-generated method stub
return false;
}
public void engageNotify(AxisDescription arg0) throws AxisFault {
// TODO Auto-generated method stub
}
public void init(ConfigurationContext arg0, AxisModule arg1) throws AxisFault {
// TODO Auto-generated method stub
}
public void shutdown(ConfigurationContext arg0) throws AxisFault {
// TODO Auto-generated method stub
} }
=============================================== =================================
在客户端使用您的模块之前,像
那样Options options = serviceClient.getOptions();
serviceClient.engageModule("test");
options.setProperty(RampartMessageData.KEY_RAMPART_POLICY,loadPolicy("policy.xml"));
serviceClient.engageModule("rampart");
..
...