2016-12-02 10 views
0

Я пытаюсь извлечь значение из типа данных по умолчаниюMuleMessage, но не могу получить синтаксис правильно в Mule 3.7.3. Может ли кто-нибудь помочь?Получить значение from defaultMuleMessage

Значение Я пытаюсь добраться до найден в закладке переменной в Mule отладчика:

initialMessage (org.mule.DefaultMuleMessage) 
-> properties (org.mule.MessagePropertiesContext) 
--> inboundMap (org.mule.util.CopyOnWrite.CaseInsensitiveMap) 
---> 7 (java.util.Collections$UnmodifiavleMap$UnmodifiableEntrySet$UnmodifiableEntry) 

В 7 является ключом = организации

Если я типа «initialMessage» в отладчик Я принимаю это:

org.mule.DefaultMuleMessage 
{ 
    id=6980b240-b882-11e6-85f7-d26120524153 
    payload=java.lang.String 
    correlationId=<not set> 
    correlationGroup=-1 
    correlationSeq=-1 
    encoding=UTF-8 
    exceptionPayload=<not set> 

Message properties: 
    INVOCATION scoped properties: 
    _ApikitResponseTransformer_apikitRouterRequest=yes 
    _ApikitResponseTransformer_bestMatchRepresentation=application/json 
    _ApikitResponseTransformer_contractMimeTypes=[MimeType{type='application/json'}] 
    counter=1 
    deterministicOrchestration=true 
    initialMessage=<<<MuleMessage>>> 
    logLevel=INFO 
    maskingEnabled=true 
    messageFormat=JSON 
    messageLocation=CLIENT_REQUEST 
    mongoOperation=insert-object-from-map 
    mongoQuery={messageLocation=client_request, payload={NullPayload}} 
    mongoSynchronous=false 
    nextOrchestratedFlow=products-getProducts 
    orchestrationFlows=[products-getProducts] 
    prevResponse='' 
    INBOUND scoped properties: 
    accept=*/* 
    accept-encoding=gzip, deflate, peerdist 
    accept-language=en-GB 
    organization=abc 
    connection=Keep-Alive 
    host=localhost:8089 
    http.listener.path=/api/* 
    http.method=GET 
    http.query.params=ParameterMap{[]} 
    http.query.string= 
    http.remote.address=/127.0.0.1 
    http.request.path=/api/products 
    http.request.uri=/api/products 
    http.scheme=http 
    http.uri.params=ParameterMap{[]} 
    http.version=HTTP/1.1 
    referer=http://localhost:8089/api/console/ 
    ua-cpu=AMD64 
    user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; managedpc; rv:11.0) like Gecko 
    x-p2p-peerdist=Version=1.0 
    x-requested-with=XMLHttpRequest 
    OUTBOUND scoped properties: 
    Content-Type=text/plain;charset=UTF-8 
    MULE_ENCODING=UTF-8 
    SESSION scoped properties: 
    country=usa 
    resource=products 
} 

Я пытаюсь получить значение "organization = abc".

Благодаря

ответ

1

Поскольку переменная initialMessage в призыванием Scope, попробуйте следующее:

#[message.getInvocationProperty('initialMessage').getInboundProperty('organization')] 

UPDATE:

#[message] имеет тип MessageContext, поэтому вы не можете получить свойства Invocation напрямую (только от MuleMessage). Вышеприведенное выражение не будет работать.

UPDATE2:

Попробуйте следующие #[flowVars.initialMessage.getInboundProperty('organization')]

0

Если вы хотите получить въездную собственность (например, называется organization) от мула сообщения, используя MEL, вы просто должны:

#[message.inboundProperties.'organization'] 
+0

Спасибо за ответ. Поток мула, который я просматриваю, не имеет никаких входящих свойств в момент, когда мне нужно ссылаться на организацию, и похоже, что они хранят их в переменной с именем initialMessage, поэтому вам нужно выяснить, как я буду писать выражение MEL для извлечения значения в структуре выше. Я попытался получить и пройти через переменную initialMessage, но с небольшим успехом – user3165854

0

Из того, что я мог бы получить от вопроса и замечания для предыдущего ответа.

Вы ищете, чтобы получить входящее свойство из MuleMessage, которое доступно как свойство в сообщении вашего потока.

Попробуйте следующее решение.

#[message.inboundProperties.'initialMessage'.getInboundProperty('organization')] 

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

0

попытаться получить как это, # [message.inboundProperties.organization]