1
<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 和壁垒的肥皂请求中。但下面是我得到的例外

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
4

1 回答 1

0

如果您尝试使用此处提供的提示添加标题示例自定义标题以及您使用壁垒参与的位置,那么您将面临上述问题。

解决方案是在 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");
..

..

于 2013-02-16T06:45:01.730 回答