Mule ESB не может вызвать условие выбора «когда»

Я не могу заставить Mule ESB запускать условие выбора «когда»

Я преобразовал поток Hello World, чтобы принять объект JSON (вставив узел JSON в объект) и выполнить узел Choice.

Но я не могу вызвать условие «когда» оператора CHoice; Я всегда перехожу к случаю ПО УМОЛЧАНИЮ. Ниже приведен поток:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:json="http://www.mulesoft.org/schema/mule/json" version="EE-3.5.0" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:core="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
    <json:object-to-json-transformer name="Object_to_JSON" doc:name="Object to JSON"/>
    <flow doc:name="HelloWorldFlow1" name="HelloWorldFlow1">
        <http:inbound-endpoint doc:description="This endpoint receives an HTTP message." doc:name="HTTP" exchange-pattern="request-response" host="localhost" port="8081" contentType="application/json"/>
        <json:json-to-object-transformer doc:name="JSON to Object" />
        <choice doc:name="Choice-Determine-Route" tracking:enable-default-events="true">
            <when expression="#[payload.uid == &quot;\042ABC\042&quot;]">
                <set-payload value="#['When ABC case']" doc:name="Set Payload"/>
            </when>
            <otherwise>
                <set-payload value="#['Default case, payload:  ' + payload + ', payload.get(\047uid\047): ' + payload.get('uid')]" doc:name="Set Payload"/>
            </otherwise>
        </choice>
    </flow>
</mule>

В этом потоке я использую следующие условные операторы и операторы SetPayload (по умолчанию):

#[payload.uid == "\042ABC\042"]

    ( Note:  I used the \042 (double quote) because JSONPATH expressions will return "ABC" instead of ABC )

#['Default case, payload:  ' + payload + ', payload.get(\047uid\047): ' + payload.get('uid')]

Ниже мой вывод:

C:\curl>type input2.txt
{ "uid" : "ABC" }

C:\curl>curl -H "Content-Type: application/json" -i -d @input2.txt http://localh
ost:8081

Default case, payload:  {"uid":"ABC"}, payload.get('uid'): "ABC"

Как видите, я не активировал предложение «когда». Однако SetPayload выводит payload.get('uid') как "ABC"

Итак, я пытаюсь еще раз три раза, с тремя разными условиями «когда»:

#[payload.uid == "ABC"]

#[payload.get('uid') == "ABC"]

#[payload.get('uid') == "\042ABC\042"]

Но во всех трех случаях я получаю следующее:

Default case, payload:  {"uid":"ABC"}, payload.get('uid'): "ABC"

Как я могу решить это?

Спасибо


person user3407479    schedule 18.07.2014    source источник


Ответы (2)


Попробуй это :-

Обновлено:-

<json:json-to-object-transformer returnClass="java.util.HashMap"  doc:name="JSON to Object" />

    <choice doc:name="Choice-Determine-Route" tracking:enable-default-events="true">
                 <when expression="#[message.payload.uid == 'ABC']">
                    <set-payload value="When ABC case" doc:name="Set Payload"/>
                </when>
                <otherwise>
                    <set-payload value="#['Default case, payload:  ' + payload + ', payload.get(\047uid\047): ' + payload.get('uid')]" doc:name="Set Payload"/>
                </otherwise>
            </choice>
person Anirban Sen Chowdhary    schedule 18.07.2014
comment
Я также пробовал использовать следующие условия, но все они ведут к одной и той же конечной точке ПО УМОЛЧАНИЮ: /n #[payload.get('uid') == 'ABC'] #[payload.uid == 'ABC'] #[payload .uid == ABC] - person user3407479; 18.07.2014
comment
Удалите ‹json:json-to-object-transformer doc:name=JSON to Object /› и используйте ‹json:json-to-object-transformer returnClass=java.util.HashMap doc:name=JSON to Object/› перед выбором маршрутизатор - person Anirban Sen Chowdhary; 18.07.2014
comment
Используйте #[payload.get('uid') == 'ABC'] - person Anirban Sen Chowdhary; 18.07.2014
comment
Я только что попробовал это, но он все еще попадает в случай по умолчанию. Вот строка, которую я использовал из xml ----› ‹when выражение=#[payload.get('uid') == 'ABC']› - person user3407479; 18.07.2014
comment
Хорошо, теперь ... Используйте #[message.payload.uid == 'ABC'] ... это сработает ... проверьте обновленный ответ - - person Anirban Sen Chowdhary; 18.07.2014
comment
Обновленный ответ содержит неверный XML: <when expression=" <when expression=" - person David Dossot; 19.07.2014
comment
Используя оба #[message.payload.get('uid') == 'ABC'] и java.util.HashMap, я смог заставить работать узел Choice. Я благодарю вас всех. - person user3407479; 21.07.2014

Попробуйте следующее для своего преобразователя JSON перед выбором

<json:json-to-object-transformer returnClass="java.util.HashMap"  doc:name="JSON to Object" />

И в выражении выбора-когда используйте следующее

<when expression="#[payload.get('UID') == 'ABC']" >

Надеюсь это поможет.

person user1760178    schedule 18.07.2014