2014-07-15 3 views
0

다음 흐름이 있습니다. http에서 JSON 객체를 받아 들인 다음 은 JSON 객체를 표준 객체로 변환 한 다음 객체에서 을 실행합니다.Mule ESB : MEL에 액세스 할 수 없습니다.

{ "uid" : "ABC" } 

것은 내가 가져올 수 없습니다 : 아래

<?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 == 'ABC']"> 
       <set-payload value="#['When ABC case']" doc:name="Set Payload"/> 
      </when> 
      <otherwise> 
       <set-payload value="#['Default case, payload: ' + payload + ', payload.uid: ' + payload.uid]" doc:name="Set Payload"/> 
      </otherwise> 
     </choice> 
    </flow> 
</mule> 

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

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

Default case, payload: {"uid":"ABC"}, payload.uid: null 

그래서 내 input2.txt이 포함 된 경우에도 흐름의 테스트입니다 : 아래

는 흐름이다 성공적으로 트리거하는 다음 표현식

#[payload.uid == 'ABC'] 

지금 설정 페이로드 표현

#['Default case, payload: ' + payload + ', payload.uid: ' + payload.uid] 

을 알 ... 그리고 그것을보고 무엇을 :

Default case, payload: {"uid":"ABC"}, payload.uid: null 

은 그래서 payload.uid

를 인식하지 않는 것 어떻게해야 MEL에서 이것을 참조 하시겠습니까?

감사

당신이 returnClass 속성을 정의하지 않았기 때문에

답변

2

, 그것은 기본적으로 org.mule.module.json.JsonData의 인스턴스를 반환합니다 - 당신이 사용할 필요가있는 경우에 따라서 http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/module/json/JsonData.html

을 :

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

대신에 변압기를 설정하여지도 또는 uid 필드가있는 객체를 반환하는 경우에는을 사용하여 탐색 할 수 있습니다. 당신이 시도한 표기법.

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

그래서 표현식 작업을 사용하려면

관련 문제