Mule 从 ConsumerIterator 获取数据
Mule getting data from ConsumerIterator
我的 mule flow 是:
<sfdc:query config-ref="SFDC__DevInt" query="dsql:SELECT Id FROM Account WHERE Name = #[flowVars.Name]" doc:name="Salesforce"/>
<logger message="Select query: #[message.payload]" level="INFO" doc:name="Logger"/>
<foreach doc:name="For Each">
<logger message="#[message.payload]" level="INFO" doc:name="Logger"/>
<logger message="#[message.payload.Id]" level="INFO" doc:name="Logger"/>
</foreach>
上面的 for 循环 returns id。除了循环之外,还有什么直接的方法可以将数据作为迭代器对象获取吗?即我需要获取 id 的值。
for 循环中的数据 returns:
SFDC:Select query: org.mule.streaming.ConsumerIterator@2f23abf
INFO 2015-06-22 13:10:25,520
{Id=0011100000uPbqeAAC, type=Account}
我每次都会获取单条数据。
我尝试使用#[message.payload.iterator().hasNext().next()],但得到
Message : Execution of the expression "message.payload.iterator().hasNext().next()" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: ConsumerIterator
Code : MULE_ERROR--2
sfdc:query
之后的消息负载是 org.mule.streaming.ConsumerIterator
的一个实例,它实现了 java.util.Iterator
。因此没有理由在其上调用 iterator()
,它 是 已经是一个迭代器。
此外 hasNext
returns 布尔值,而不是 Iterator
实例,因此您不能像以前那样链接调用。
因此你的表达应该是:
#[message.payload.hasNext() ? message.payload.next() : null]
假设 null
是您想要的值,以防枚举为空。
如果需要使用也可以把iterator转成listfor-each
#[org.apache.commons.collections.IteratorUtils.toList(payload)]
我的 mule flow 是:
<sfdc:query config-ref="SFDC__DevInt" query="dsql:SELECT Id FROM Account WHERE Name = #[flowVars.Name]" doc:name="Salesforce"/>
<logger message="Select query: #[message.payload]" level="INFO" doc:name="Logger"/>
<foreach doc:name="For Each">
<logger message="#[message.payload]" level="INFO" doc:name="Logger"/>
<logger message="#[message.payload.Id]" level="INFO" doc:name="Logger"/>
</foreach>
上面的 for 循环 returns id。除了循环之外,还有什么直接的方法可以将数据作为迭代器对象获取吗?即我需要获取 id 的值。 for 循环中的数据 returns:
SFDC:Select query: org.mule.streaming.ConsumerIterator@2f23abf
INFO 2015-06-22 13:10:25,520
{Id=0011100000uPbqeAAC, type=Account}
我每次都会获取单条数据。
我尝试使用#[message.payload.iterator().hasNext().next()],但得到
Message : Execution of the expression "message.payload.iterator().hasNext().next()" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: ConsumerIterator
Code : MULE_ERROR--2
sfdc:query
之后的消息负载是 org.mule.streaming.ConsumerIterator
的一个实例,它实现了 java.util.Iterator
。因此没有理由在其上调用 iterator()
,它 是 已经是一个迭代器。
此外 hasNext
returns 布尔值,而不是 Iterator
实例,因此您不能像以前那样链接调用。
因此你的表达应该是:
#[message.payload.hasNext() ? message.payload.next() : null]
假设 null
是您想要的值,以防枚举为空。
如果需要使用也可以把iterator转成listfor-each
#[org.apache.commons.collections.IteratorUtils.toList(payload)]