1

いくつかの Soap 入力があり、ペイロード内の要素の存在に基づいて Mule フローでの一連のアクションを決定したいと考えています。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xyz="http://xyz.abc.com/">
  <soapenv:Header/>
  <soapenv:Body>
    <xyz:myFirst/>
  </soapenv:Body>
</soapenv:Envelope>


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xyz="http://xyz.abc.com/">
  <soapenv:Header/>
  <soapenv:Body>
    <xyz:mySecond>
        Something here
    </xyz:mySecond>
  </soapenv:Body>
</soapenv:Envelope>

上記のペイロードで、「myFirst」が存在する場合は 1 つのルートに進み、「mySecond」が存在する場合は別のルートに進みます。

私は次のことを試しました

<choice>
  <when expression="#[xpath('fn:count(//soapenv:Envelope/soapenv:Body/xyz:myFirst/child::text())') != 0]">
    //Do something First Here
  </when>
  <when expression="#[xpath('fn:count(//soapenv:Envelope/soapenv:Body/xyz:mySecond/child::text())') != 0]">
    //Do something Second Here
  </when>
  <otherwise>
    //Didn't match any!
  </otherwise>
</choice>

しかし、「myFirst」は空であるため識別されません。この場所Using XPath to Check if Soap Envelope Contains Child Nodeで言及されていることを試しましたが、役に立ちませんでした。私の現在の試みは、要素が存在し、空でない場合、XPathを使用して伝える方法に基づいていますか? .

考え?

4

1 に答える 1

1

XPathでテストしているchild text nodeため、サンプル ペイロードに空のノードがある場合、最初の選択要素には進まないのはそのためです。ノードが空であってもタスクを実行することが意図されている場合は、次のようにします。

<choice>
  <when expression="#[xpath('fn:count(//soapenv:Envelope/soapenv:Body/xyz:myFirst)') != 0]">
    //Do something First Here
  </when>
  <when expression="#[xpath('fn:count(//soapenv:Envelope/soapenv:Body/xyz:mySecond') != 0]">
    //Do something Second Here
  </when>
  <otherwise>
    //Didn't match any!
  </otherwise>
</choice>
于 2013-10-13T01:27:45.397 に答える