我有一个序列作为代理服务的一部分,根据“源和正则表达式”进行过滤。我已将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>
执行始终是另一部分。有什么建议吗?
答案 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>