WSO2 迭代 get-属性 从 vfs 文件

WSO2 iterative get-property from vfs file

我正在使用带有 VFS 的 WSO2。我需要获取传入文件 fileinput.xml 并将 id 字段记录在一起。 VFS 已启用并正常运行,当我将 fileinput.xml 移动到我的 test_in 文件夹时,它会得到适当处理并放入 test_outtest_failure 正确。我已经阅读了很多在线文档,但一直无法理解如何执行以下操作。

我的问题是

  1. 如何从我的 fileinput.xml 中获取 属性?
  2. 如何遍历 ID 并将它们连接到日志中?

fileinput.xml

<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
        <customers>
            <customer>
                <id>testid1</id>
                <prop1>a</prop1>
                <prop2>b</prop2>
            <customer/>
            <customer>
                <id>testid2</id>
                <prop1>3</prop1>
                <prop2>4</prop2>
            <customer/>
        </customers>
    </soapenv:Body>
</soapenv:Envelope>

我的wso2代理文件

<?xml version="1.0" encoding="UTF-8"?>
<proxy
    xmlns="http://ws.apache.org/ns/synapse" name="FileProxy" transports="vfs" startOnLoad="true" trace="disable">
    <target>
        <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
        <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
        <parameter name="transport.PollInterval">5</parameter>
        <parameter name="transport.vfs.FileURI">file:///Users/myuser/test_in</parameter>
        <parameter name="transport.vfs.MoveAfterProcess">file:///Users/myusertest_out</parameter>
        <parameter name="transport.vfs.MoveAfterFailure">file:///Users/myuser/test_failure</parameter>
        <parameter name="transport.vfs.FileNamePattern">.*.xml</parameter>
        <parameter name="transport.vfs.ContentType">text/xml</parameter>
        <inSequence>
            <log category="WARN" level="full">
                <property name="MESSAGE" value="In Sequence"/>
            </log>
            <clone>
                <target sequence="fileWriteSequence"/>
            </clone>
        </inSequence>
    </target>
    <outSequence>
        <log category="WARN" level="full">
            <property name="MESSAGE" value="Out Sequence"/>
        </log>
        <send/>
    </outSequence>
</proxy>

我的文件写入顺序

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="fileWriteSequence">
    <log level="full">
        <property name="sequence" value="fileWriteSequence"/>
    </log>
    <property name="transport.vfs.ReplyFileName" expression="fn:concat(fn:substring-after(get-property('MessageID'), 'urn:uuid:'), '.txt')" scope="transport"/>
    <property name="OUT_ONLY" value="true"/>
    <send>
        <endpoint name="FileEpr">
            <address uri="vfs:file:///Users/myuser/test_out"/>
        </endpoint>
    </send>
</sequence>

您可以使用 iterate 中介器迭代 'id' 元素,并在操作范围内使用 属性 连接所有 id 值。参考 this