我有下一个序列:
<payloadFactory>
<format>
<cb:accounts/>
</format>
<args/>
</payloadFactory>
<property name="accounts" type="OM" expression="//cb:accounts" />
...
<iterate id="accountIterator" continueParent="true" sequential="true" expression="//cb:accounts/cb:accountId">
<target>
<sequence>
...
<property name="accounts" type="OM" expression="//*" />
</sequence>
</target>
</iterate>
<aggregate id="accountIterator">
<onComplete expression="$body/child::*[fn:position()=1]">
<log level="custom" />
</onComplete>
</aggregate>
<enrich>
<source type="custom" xpath="get-property('accounts')"/>
<target type="body" />
</enrich>
为什么财产被命名为&#34;帐户&#34;内部设置&#34;迭代&#34; mediator在外部具有空值&#34;迭代&#34;调解员?
由于
答案 0 :(得分:0)
迭代器内部的流程在一个单独的线程上运行,并且在外侧不可见。因此,您无法访问在迭代器调解器内部设置的属性,但反之亦然。
答案 1 :(得分:0)
在调用每个迭代周期之前,将克隆消息上下文,并且它仅在迭代器目标内的上下文中可用。因此,默认情况下无法在迭代器之外的synapse / default范围内进行操作。如果要存储全局内容,请将属性与operation scope一起使用。
使用以下结构:
<!--assign your property to operation scope-->
<property name="ITERATOR_DATA_PAYLOAD"
expression="get-property('DATA_PAYLOAD')"
scope="operation"
type="OM"/>
<iterate xmlns:ns="http://org.apache.synapse/xsd"
continueParent="true"
expression="//bookstore/book"
sequential="true">
<target>
<sequence>
<!--if you want to assign the property-->
<property name="DATA_PAYLOAD"
expression="get-property('operation','ITERATOR_DATA_PAYLOAD')"
type="OM"/>
</sequence>
</target>
</iterate>
<!--Outside the iterator-->
<property xmlns:ns="http://org.apache.synapse/xsd"
name="NEW_DATA_PAYLOAD"
expression="get-property('operation','ITERATOR_DATA_PAYLOAD')"
type="OM"/>