Pertanyaan bagaimana membandingkan properti integer dalam mediasi filter di wso2 ESB?


Saya baru di wso2 ESB dan mendefinisikan 3 layanan yang mengembalikan nilai integer dan menggunakan mediator filter untuk mengarahkan dari satu ke yang lain, tetapi tidak bekerja dengan benar dan dalam mode filter selalu mengembalikan false sumber saya adalah:

<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>

4
2017-09-18 07:58


asal


Jawaban:


Saya mencoba skenario Anda dan mendapat hasil yang sama seperti milik Anda. Kemudian melihat jauh ke dalamnya karena ini adalah fungsi dasar dan karena saya pikir saya telah melakukan sesuatu yang serupa sebelumnya.

Masalahnya di sini adalah pada jenis properti. Untuk beberapa alasan aneh INTEGER tidak berfungsi di sini. Anda harus memiliki DOUBLE atau STRING. Bahkan jika Anda memiliki string, itu akan benar melemparkannya ketika Anda melakukan perbandingan seperti di sini. Berikut ini bekerja untuk saya.

<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>

5
2017-09-18 13:24



berikut adalah contoh yang dilakukan dengan mediator switch,

<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>

ganti mediator log dengan mengirim mediator sesuai dengan kebutuhan Anda.


1
2017-09-18 10:13