WSO2 ESB属性不正确的范围

时间:2014-07-14 11:31:15

标签: properties wso2 esb mediator

我有下一个序列:

<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;调解员?

由于

2 个答案:

答案 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"/>