filter wso2 esb mediator

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.