0

我希望禁用 BSP 合规性(我不希望我的消息包含元素)。

我试过了,无济于事:

OutflowConfiguration outflowConfig = new OutflowConfiguration();
outflowConfig.setBSPCompliant(false);

stub._getServiceClient().getOptions().setProperty(WSSHandlerConstants.OUTFLOW_SECURITY, outflowConfig.getProperty());

有其他人知道从我在 Axis2/Rampart 中传出的 SOAP 消息中删除元素的方法吗?

4

1 回答 1

0

我发现我可以设置一个新的传出阶段(通过axis2.xml),它将MessageContext传递给我的客户处理程序,然后我可以通过MessageContext获取SOAPEnvelope/Header,遍历元素和节点,找到元素( s) 我要删除,然后调用removeChild。

对于传出(OutFlow)Axis2 消息,WSS(4J) 签名似乎发生在“安全”阶段。

<phase name="Security"/>

所以,我想删除一些在安全阶段附加的 XML 元素。具体来说,“ec:InclusiveNamespaces”元素。它似乎来自 XML Exclusive Canonicalization,我想不出在 WSS4J 中禁用此设置的任何其他方法(除了重新编译 Axis2/Rampart ...)

所以,我们需要添加我们自己的、新的、自定义的 OutFlow Handler。在安全阶段之后。

<phase name="PostSecurity">
        <handler name="MyOutHandler" class="com.yourcompany.YourSoapHandler"/> 
</phase>

接下来,制作您的自定义处理程序类:

package com.yourcompany;

public class YourSoapHandler extends AbstractHandler {

    public InvocationResponse invoke(MessageContext ctx) throws AxisFault {

        SOAPEnvelope msgEnvelope = ctx.getEnvelope();
        SOAPHeader msgHeader = msgEnvelope.getHeader();

        Iterator theDescendants = msgHeader.getDescendants(true);
        while(theDescendants.hasNext()){

            Object o = theDescendants.next();

            if(o instanceof org.apache.axiom.om.impl.dom.ElementImpl){

                ElementImpl ele = (ElementImpl)o;
                String eleNodeName = ele.getNodeName();

                if("ds:CanonicalizationMethod".equals(eleNodeName) || "ds:Transform".equals(eleNodeName)){
                    Node aNode = ele.getElementsByTagName("ec:InclusiveNamespaces").item(0);
                    if(aNode != null){
                        ele.removeChild(aNode);
                    }
                }
            }
        }
        return InvocationResponse.CONTINUE;
    }
}

只要您将更新后的 Axis2.xml 传递到您的 ConfigurationContext 中,然后将其传递到您的服务存根中,您就可以开始了。

以下是我用于学习阶段的一些参考资料:http: //www.packtpub.com/article/handler-and-phase-in-apache-axis http://wso2.com/library/777/

我希望这至少可以帮助另一个人=D

于 2013-12-27T17:07:36.883 回答