WSO2 迭代并将消息发送到消息存储

问题描述

我使用的是 Enterprise Integrator 6.5。 我的代理接收包含文件内容和与之关联的元数据的有效负载。 所述元数据可以发送成1个或多个。 我需要以上传成功来响应前端,然后异步设置元数据。

所以我想出了这个解决方案:

  1. 上传文件后台
  2. 将元数据节点从发送消息的有效负载迭代到消息存储
  3. 响应前端

文件上传,元数据已设置,但在 Iterate 中介器执行后我无法获取代码(这只是设置有效负载并进行排序)。

我在文档中读到“你需要始终伴随一个迭代和一个聚合中介。”但显然这意味着当您在 Iterate 中使用 Send 中介时。 我的情况似乎不适合 ForEach 调解器,因为文档说“仅将 ForEach 调解器用于消息转换。如果您需要从每次迭代进行后端调用,请使用迭代调解器。” 此外,Iterate 中介器在我的情况下非常有效,我发现 attachPath 和 preservePayload 属性非常有用。

你能帮我解决这个问题吗?

奇怪的事情:我在迭代中介器中设置了一个日志,但在日志中看不到它:/

这是我的代码

[...]
<log level="full">
    <property name="status" value="outside iterate mediator"/>
</log>
<iterate attachPath="//nm:upload" expression="//nm:upload/Metadata"
    preservePayload="true"
    xmlns:nm="http://www.i.com/uploadFileSAPProxy/" xmlns:ns="http://org.apache.synapse/xsd">
    <target>
        <sequence>
            <log level="full">
                <property name="status" value="inside iterate mediator"/>
            </log>
            <payloadFactory media-type="xml">
                <format>
                    <nm:upload
                        xmlns:b="http://ws.wso2.org/dataservice" xmlns:prx="urn:sap.com:proxy:Q01:/1SAI/TASF285B85AB4507D6C358B:702">
                        <id_group>$1</id_group>
                        <section>$2</section>
                         $3
        </nm:upload>
                </format>
                <args>
                    <arg evaluator="xml" expression="$ctx:id_group" literal="false"/>
                    <arg evaluator="xml"
                        expression="//nm:upload/Metadata/section" literal="false"/>
                    <arg evaluator="xml"
                        expression="//nm:upload/Metadata/values" literal="false"/>
                </args>
            </payloadFactory>
            <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
            <property expression="json-eval($.upload)" name="result"
                scope="default" type="STRING"/>
            <payloadFactory media-type="json">
                <format>$1</format>
                <args>
                    <arg evaluator="xml" expression="$ctx:result" literal="false"/>
                </args>
            </payloadFactory>
            <axis2ns29:store
                messageStore="uploadFileSAP_v1_putMetadata_ms" xmlns:axis2ns29="http://ws.apache.org/ns/synapse"/>
        </sequence>
    </target>
</iterate>[...]

提前致谢!

解决方法

我忘记设置 continueParent="true"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...