如何比较wso2 esb中过滤器中介的整数属性?

时间:2013-09-18 07:58:07

标签: filter wso2 esb mediator

我是wso2 esb的新手,定义了3个返回整数值的服务,并使用filter mediator从一个到另一个路由,但不正确的工作,在过滤模式下总是返回false 我的来源是:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="SeqOne">
<log level="full"/>
<property xmlns:ns="http://org.apache.synapse/xsd" xmlns:m0="http://tempuri.org/"        name="CParam" expression="//m0:SumSerViseResponse/m0:SumSerViseResult" scope="default"   type="INTEGER"/>
<log level="custom">
  <property xmlns:ns="http://org.apache.synapse/xsd" name="CParam"  expression="$ctx:CParam"/>
</log>
<property name="propertyA" value="4" scope="default" type="INTEGER"/>
<log level="custom">
  <property xmlns:ns="http://org.apache.synapse/xsd" name="propertyA" expression="get-property('propertyA')"/>
</log>
<property xmlns:ns="http://org.apache.synapse/xsd" name="propertyCompare" expression="$ctx:CParam > get-property('propertyA')" type="STRING"/>
<log level="custom">
  <property xmlns:ns="http://org.apache.synapse/xsd" name="propertyCompare" expression="get-property('propertyCompare')"/>
</log>
<filter xmlns:ns="http://org.apache.synapse/xsd" source="get-property('propertyCompare')" regex="true">
  <then>

2 个答案:

答案 0 :(得分:5)

我尝试了你的场景并获得了与你相同的输出。然后深入研究它,因为这是一个基本的功能,因为我以前做过类似的事情。

这里的问题在于属性的类型。出于某种奇怪的原因INTEGER在这里不起作用。您需要DOUBLESTRING。即使你有字符串,它也会在你进行比较时正确地投射它。以下对我有用。

<inSequence>
     <log level="full"/>
     <property xmlns:m0="http://tempuri.org/"
               name="CParam"
               expression="//m0:SumSerViseResponse/m0:SumSerViseResult"
               scope="default"
               type="DOUBLE"/>
     <log level="custom">
        <property name="CParam" expression="$ctx:CParam"/>
     </log>
     <property name="propertyA" value="4.0" scope="default" type="DOUBLE"/>
     <log level="custom">
        <property xmlns:ns="http://org.apache.synapse/xsd"
                  name="propertyA"
                  expression="get-property('propertyA')"/>
     </log>
     <property name="propertyCompare"
               expression="$ctx:CParam > get-property('propertyA')"
               scope="default"
               type="BOOLEAN"/>
     <log level="custom">
        <property name="propertyCompare" expression="get-property('propertyCompare')"/>
     </log>
     <filter xpath="$ctx:CParam > get-property('propertyA')">
        <then>
           <send>
              <endpoint>
                 <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
              </endpoint>
           </send>
        </then>
        <else>
           <drop/>
        </else>
     </filter>
  </inSequence>

答案 1 :(得分:1)

以下是使用switch mediator

完成的示例
<switch source="get-property('propertyCompare')">
        <case regex="1">
           <log>
              <property name="one" value="__________ONE__________"/>
           </log>
        </case>
        <case regex="2">
           <log>
              <property name="two" value="__________TWO__________"/>
           </log>
        </case>
     </switch>

根据您的需要用send mediator替换日志调解器。