问题描述
我使用的是 Enterprise Integrator 6.5。 我的代理接收包含文件内容和与之关联的元数据的有效负载。 所述元数据可以发送成1个或多个。 我需要以上传成功来响应前端,然后异步设置元数据。
所以我想出了这个解决方案:
文件已上传,元数据已设置,但在 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"