本地条目作为wso2 esb中介的过滤条件

时间:2014-08-18 18:51:03

标签: wso2 wso2esb

我有一个序列作为代理服务的一部分,根据“源和正则表达式”进行过滤。我已将source定义为元素值,作为SOAP请求和正则表达式的一部分,作为“ESB中定义的本地条目”。但是,结果并不是我所期待的。

本地条目定义为内联文本(myFields) - FIELD1 | FIELD2 | FIELD3

调解顺序定义为 - <sequence xmlns="http://ws.apache.org/ns/synapse" name="007"> <property xmlns:ns="http://org.apache.synapse/xsd" name="fieldName" expression="$body/fieldName/text()" scope="default" type="STRING"/> <filter xmlns:ns="http://org.apache.synapse/xsd" source="get-property('fieldName')" regex="get-property('myFields')"> <then> <log level="full" separator="*****YES*********"> <property name="myFields" expression="get-property('myFields')"/> </log> </then> <else> <log level="full" separator="*********NO**************"> <property name="myFields" expression="get-property('myFields')"/> </log> </else> </filter> </sequence>

当我发送SOAP请求时 - <body> <fieldName>FIELD1</fieldName> </body>

执行始终是另一部分。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

使用过滤介体时,regex属性必须是字符串,而不是表达式。

您可以使用XPATH2“匹配”

示例:

<inSequence>
    <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
    <property name="fieldName" expression="$body/fieldName/text()"/>
    <property xmlns:fn="http://www.w3.org/2005/xpath-functions" name="match" expression="fn:matches(syn:get-property('fieldName'),syn:get-property('myFields'))"/>
    <filter source="get-property('match')" regex="true">
        <then>
            <log level="full" separator="*****YES*********">
                <property name="myFields" expression="get-property('myFields')"/>
            </log>
        </then>
        <else>
            <log level="full" separator="*********NO**************">
                <property name="myFields" expression="get-property('myFields')"/>
            </log>
        </else>
    </filter>
    <log level="full"/>
</inSequence>