Как обработать данные с помощью MEL, если Select SQL возвращает Null

У меня небольшая проблема в Mule. Я использую запрос Select SQL следующим образом:

 <jdbc-ee:query key="RetriveQuery" value="Select NAME,ID from getData where ID=111 "/>

Теперь отсюда я получу значения, используя MEL, например #[message.payload[0].NAME] и

#[message.payload[0].ID]

Теперь может случиться так, что ID=111 не существует. Итак, в этом случае, как я могу проверить, вернул ли запрос пустую полезную нагрузку или не использовал MEL??..

До сих пор я пробовал с выбором маршрутизатора следующим образом:

<choice doc:name="Choice">
      <when expression="#[message.payload[0].ID == null]">

    //Then print in logger like Sorry!! Data not available 

Else Распечатать данные в регистраторе с помощью MEL

Всякий раз, когда я использую это, я получаю следующее исключение: -

Exception stack is:
1. Index: 0, Size: 0 (java.lang.IndexOutOfBoundsException)
  java.util.ArrayList:604 (null)
2. [Error: message.payload[0].ID: array index out of bounds.]
[Near : {... message.payload[0].ID == null ....}]
             ^
[Line: 1, Column: 1] (org.mule.mvel2.PropertyAccessException)
  org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer:426 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/mvel2/PropertyAccessException.html)
3. Execution of the expression "message.payload[0].ID == null" failed. (org.mule.api.expression.ExpressionRuntimeException)
  org.mule.el.mvel.MVELExpressionLanguage:202 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/ExpressionRuntimeException.html)
4. Execution of the expression "message.payload[0].ID == null" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: ArrayList (org.mule.api.MessagingException)
  org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor:32 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:604)
    at java.util.ArrayList.get(ArrayList.java:382)
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getCollectionProperty(ReflectiveAccessorOptimizer.java:776)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)

Пожалуйста, помогите .. Как я могу узнать, существует ли ID или нет, используя MEL ???


person Anirban Sen Chowdhary    schedule 20.09.2014    source источник


Ответы (2)


Вы можете использовать message.payload.isEmpty() это выражение решения.

person David Dossot    schedule 20.09.2014

Итак, благодаря Дэвиду,
рабочий код: -

<jdbc-ee:query key="RetriveQuery" value="Select NAME,ID from getData where ID=111 "/>

<choice doc:name="Choice">
      <when expression="#[message.payload.isEmpty()]">

    //Then print in logger like Sorry!! Data not available 
person Anirban Sen Chowdhary    schedule 23.07.2015