filter - cómo comparar propiedades enteras en mediación de filtro en wso2 esb?
mediator (2)
Soy nuevo en wso2 esb y defino 3 servicios que devuelven valor entero y uso filtro mediador para pasar de uno a otro, pero no trabajo correctamente y en modo filtro siempre devuelvo falso mi fuente es:
<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>
Probé tu escenario y obtuve el mismo resultado que el tuyo. Luego lo analicé profundamente, ya que era una funcionalidad básica y pensé que ya había hecho algo similar antes.
El problema aquí es en el tipo de la propiedad. Por alguna extraña razón, INTEGER
no funciona aquí. Debes tener DOUBLE
o STRING
. Incluso si tiene cadena, la lanzará correctamente cuando haga una comparación como aquí. Lo siguiente funcionó para mí.
<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>
siguiente es un ejemplo hecho con mediador de interruptor,
<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>
reemplace los mediadores de registro con mediador de envío según sus necesidades.