Я пытаюсь сохранить ArrayList в flowVar, а затем перебрать flowVar в выражении foreach, код выглядит следующим образом:

Полезная нагрузка [2] является массивом, который входит в arrayList.

      <foreach collection="#[flowVars['ID']]" doc:name="For Each"> 

        ....


     </foreach> 

Однако я получаю следующую ошибку при попытке запустить этот код:

Org.mule.exception.DefaultMessagingExceptionStrategy :


Сообщение: не утверждение (org.mule.mvel2.ScriptRuntimeException). Полезная нагрузка сообщения имеет тип: LinkedList

Есть идеи?

0
insaneyogi 24 Апр 2017 в 20:40

2 ответа

Лучший ответ

Вы можете сделать это легко в следующем примере, объявив переменную java.util.ArrayList следующим образом: -

<set-variable variableName="ID" value="#[new java.util.ArrayList(Arrays.asList('abc','def',66))]" doc:name="Variable"/>

<foreach collection="#[flowVars.ID]" counterVariableName="i" doc:name="For Each">
 <logger message="Value:- #[message.payload]" level="INFO" doc:name="Logger"/>
</foreach>

Примечание : если вы хотите получить конкретный индекс Arraylist, вам не нужен foreach, вы можете сделать это: -

<logger message="value at index 2: #[flowVars.ID[2]]" level="INFO" doc:name="Logger"/>        

Альтернативно в компоненте выражения :

<set-variable variableName="ID" value="#[new java.util.ArrayList(Arrays.asList('abc','def',66))]" doc:name="Variable"/>

 <expression-component doc:name="Expression"><![CDATA[
     for(int i=0;i<flowVars.ID.size();i++)
      {
         System.out.println("Value "+ flowVars.ID[i]);
      }

     ]]></expression-component>
3
Anirban Sen Chowdhary 24 Апр 2017 в 21:58

@insaneyogi, вот пример потока, который перебирает массив arrayList как flowVar:

<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="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/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
    <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
    <flow name="test-foreachFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/foreach" doc:name="HTTP"/>
        <expression-component doc:name="Expression"><![CDATA[myArray = new java.util.ArrayList();
myArray.add("el1");
myArray.add("el2");
myArray.add("el3");

flowVars.myArray =  myArray;]]></expression-component>
        <foreach collection="#[flowVars.myArray]" doc:name="For Each">
            <logger level="INFO" doc:name="Logger" message="#[payload]"/>
        </foreach>
    </flow>
</mule>
0
Cristina Rosca 24 Апр 2017 в 21:22