WSO2 ESB无法在DSS调用之前删除响应中的ws-security标头

时间:2016-04-28 07:32:34

标签: wso2esb ws-security wso2dss

我有一个代理服务,需要使用ws security调用exernal服务。我必须 调用服务,并根据响应,我需要提取一些信息 然后调用数据服务来更新数据库。当我得到响应并创建 有效负载调用数据服务,它也有ws安全标头,最终在异常中。

我用过

<header action="remove" name="wsse:Security" scope="default" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" />

创建和调用数据服务但最终没有运气。

以下是我的代理服务。

<?xml version="1.0" encoding="UTF-8"?>
<proxy name="EDI_Test_Proxy_2" startOnLoad="true" trace="disable"
    transports="http https" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <header name="Action" scope="default" value="get_mcash_data" />
            <property name="Content-Type" scope="transport" type="STRING"
                value="application/soap+xml; charset=UTF-8; action=get_mcash_data" />
            <call>
                <endpoint>
                    <address trace="disable"
                        uri="http://localhost:9770/services/my_fetch_data_service" />
                </endpoint>
            </call>
            <property expression="//mc:mcash/mc:tran_id/text()" name="tran_id"
                scope="default" type="STRING" xmlns:mc="http://ws.wso2.org/dataservice"
                xmlns:ns="http://org.apache.synapse/xsd" />
            <log level="custom">
                <property expression="$ctx:tran_id" name="tran_id" />
            </log>
            <filter xmlns:mc="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd"
                xpath="boolean(//mc:mcash/mc:mobile_no)">
                <then>
                    <property expression="//mc:mcash/mc:tran_id/text()" name="tran_id"
                        scope="default" type="STRING" />
                    <property expression="//mc:mcash/mc:mobile_no/text()"
                        name="mobile_no" scope="default" type="STRING" />
                    <property expression="//mc:mcash/mc:tran_amt/text()" name="tran_amt"
                        scope="default" type="STRING" />
                    <property expression="//mc:mcash/mc:tran_date/text()"
                        name="tran_date" scope="default" type="STRING" />
                    <property expression="//mc:mcash/mc:tran_time/text()"
                        name="tran_time" scope="default" type="STRING" />
                    <property expression="//mc:mcash/mc:part_tran_srl_num/text()"
                        name="part_tran_srl_num" scope="default" type="STRING" />
                    <log level="custom">
                        <property expression="$ctx:tran_id" name="tran_id" />
                        <property expression="$ctx:mobile_no" name="mobile_no" />
                        <property expression="$ctx:tran_amt" name="tran_amt" />
                        <property expression="$ctx:tran_date" name="tran_date" />
                        <property expression="$ctx:tran_time" name="tran_time" />
                        <property expression="$ctx:part_tran_srl_num" name="tran_time" />
                    </log>
                    <payloadFactory description="pf_mcash" media-type="xml">
                        <format>
                            <flw:purchaceFromMMR xmlns:flw="http://flw.mwt.mobitel.com/">
                                <!--Optional: -->
                                <bankPurchaseRequest xmlns="">
                                    <amount>$1</amount>
                                    <!--Optional: -->
                                    <bankCode>XXX</bankCode>
                                    <!--Optional: -->
                                    <date>$2</date>
                                    <!--Optional: -->
                                    <mobile>$3</mobile>
                                    <!--Optional: -->
                                    <time>$4</time>
                                    <!--Optional: -->
                                    <transactionId>$5</transactionId>
                                </bankPurchaseRequest>
                            </flw:purchaceFromMMR>
                        </format>
                        <args>
                            <arg evaluator="xml" expression="$ctx:tran_amt" />
                            <arg evaluator="xml" expression="$ctx:tran_date" />
                            <arg evaluator="xml" expression="$ctx:mobile_no" />
                            <arg evaluator="xml" expression="$ctx:tran_time" />
                            <arg evaluator="xml" expression="$ctx:tran_id" />
                        </args>
                    </payloadFactory>
                    <call>
                        <endpoint>
                            <address trace="disable"
                                uri="https://my_external_web_service/to_be/called?wsdl">
                                <enableSec policy="gov:ws-policy/sample_policy.xml" />
                            </address>
                        </endpoint>
                    </call>
                    <loopback />
                </then>
                <else>
                    <log>
                        <property name="STATUS" value="*****No data available*****" />
                    </log>
                </else>
            </filter>
        </inSequence>
        <outSequence>
            <header action="remove" name="wsse:Security" scope="default"
                xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" />
            <header action="remove" name="To" scope="default" />
            <property expression="//return/mobile/text()" name="mobile"
                scope="default" type="STRING" />
            <property expression="//return/date/text()" name="date"
                scope="default" type="STRING" />
            <property expression="//return/recipetNo/text()" name="recipetNo"
                scope="default" type="STRING" />
            <property expression="//return/resultCode/text()" name="resultCode"
                scope="default" type="STRING" />
            <property expression="//return/resultDesc/text()" name="resultDesc"
                scope="default" type="STRING" />
            <payloadFactory description="pf_mcash_update"
                media-type="xml">
                <format>
                    <p:TestUpdate xmlns:p="http://ws.wso2.org/dataservice">
                        <!--Exactly 1 occurrence -->
                        <p:trf_status>$1</p:trf_status>
                        <!--Exactly 1 occurrence -->
                        <p:resp_code>$2</p:resp_code>
                        <!--Exactly 1 occurrence -->
                        <p:receipt>$3</p:receipt>
                        <!--Exactly 1 occurrence -->
                        <p:rsp_message>$4</p:rsp_message>
                        <!--Exactly 1 occurrence -->
                        <p:tran_id>$5</p:tran_id>
                        <!--Exactly 1 occurrence -->
                        <p:part_tran_srl_num>$6</p:part_tran_srl_num>
                    </p:TestUpdate>
                </format>
                <args>
                    <arg value="10" />
                    <arg evaluator="xml" expression="$ctx:resultCode" />
                    <arg evaluator="xml" expression="$ctx:recipetNo" />
                    <arg evaluator="xml" expression="$ctx:resultDesc" />
                    <arg value="SDC311521" />
                    <arg evaluator="xml" expression="$ctx:part_tran_srl_num" />
                </args>
            </payloadFactory>
            <header name="Action" scope="default" value="TestUpdate" />
            <property name="Content-Type" scope="transport" type="STRING"
                value="application/soap+xml; charset=UTF-8; action=TestUpdate" />
            <call>
                <endpoint>
                    <address trace="disable"
                        uri="http://my_internal_data_service/which_ends_up_with/ws_sec_header" />
                </endpoint>
            </call>
        </outSequence>
        <faultSequence />
    </target>
</proxy>

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

是否可以在outsequence中的call calliator之前添加以下日志中介,并使用输出日志对其进行更新。 它将帮助我们确定问题。

SELECT V.VENDOR_NAME, I.ITEM_NAME, ORD.INV_ID, ORD.QTY
FROM   VENDOR As V
INNER JOIN 
VENDOR_ORDER As ORD
ON V.VENDOR_ID = ORD.VENDOR_ORDER
INNER JOIN
INVENTORY As I ON I.INV_ID = ORD.INV_ID
ORDER  BY V.VENDOR_NAME

答案 1 :(得分:1)

问题是我在<module ref="rampart" />中的axis2.xml中使用了rampart模块<ESB_HOME>repository/conf/axis2/。在评论出这一行之后,异常消失了并且dss调用有效。我相信,如果启用了这行代码,ws-securiy将全局使用,所有服务调用将查找ws-security标头。如果我错了,请纠正我。