Я пытаюсь сохранить ArrayList в flowVar, а затем перебрать flowVar в выражении foreach, код выглядит следующим образом:
Полезная нагрузка [2] является массивом, который входит в arrayList.
<foreach collection="#[flowVars['ID']]" doc:name="For Each">
....
</foreach>
Однако я получаю следующую ошибку при попытке запустить этот код:
Org.mule.exception.DefaultMessagingExceptionStrategy :
Сообщение: не утверждение (org.mule.mvel2.ScriptRuntimeException). Полезная нагрузка сообщения имеет тип: LinkedList
Есть идеи?
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>
@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>
Новые вопросы
mule
Mule - это легкая корпоративная сервисная шина на основе Java (ESB) и платформа интеграции, которая позволяет разработчикам быстро и легко соединять приложения, позволяя им обмениваться данными. Mule позволяет легко интегрировать существующие системы, независимо от различных технологий, используемых приложениями, включая JMS, веб-службы, JDBC, HTTP и другие.