WSO2 循环 ns:binary

WSO2 loop through ns:binary

上下文

我在尝试时遇到了一些困难

这是相关部分

<fileconnector.search>
    <source>{$ctx:folderProcess}</source>
    <filePattern>{fn:concat('PDF_', $ctx:cmdId, '.*\.pdf')}</filePattern>
    <recursiveSearch>false</recursiveSearch>
</fileconnector.search>
<iterate expression="//ns:result//ns:file" id="dsfs" sequential="true" xmlns:ns="http://org.wso2.esbconnectors.FileConnector">
    <target>
        <sequence>
            <property expression="$body/ns:file" name="fileName" scope="default" type="STRING"/>
            <fileconnector.read>
                <source>{fn:concat($ctx:sftpRoot, $ctx:fileName)}</source>
                <contentType>application/pdf</contentType>
            </fileconnector.read>
            <payloadFactory description="body" media-type="xml">
                <format>
                    <root>
                        <order_code></order_code>
                        <fileName></fileName>
                        <image></image>
                    </root>
                </format>
                <args>
                    <arg evaluator="xml" expression="$ctx:cmdId"/>
                    <arg evaluator="xml" expression="$ctx:fileNameShort"/>
                    <arg evaluator="xml" expression="//ns:binary"/> #####HERE
                </args>
            </payloadFactory>
        </sequence>
    </target>
</iterate>

问题

循环工作正常,但 <image> 仍然为空。 pdf 已成功读取,for using

<arg evaluator="xml" expression="$body"/>

生成以下负载:

<root xmlns="http://ws.apache.org/ns/synapse">
    <order_code>2004_0000000001</order_code>
    <fileName>PDF_2004_0000000001_AUTH_DERO_20190321161925.pdf</fileName>
    <image>
        <soapenv:Body xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
            <ns:binary xmlns:ns="http://ws.apache.org/commons/ns/payload">
                SomeBase64String===
            </ns:binary>
        </soapenv:Body>
    </image>
</root>

但是,<image> 不应包含 <soapenv:Body>,而应仅包含 SomeBase64String===。我尝试了以下但没有成功:

<arg evaluator="xml" expression="//ns:binary"/>
<arg evaluator="xml" expression="/ns:binary"/>
<arg evaluator="xml" expression="$body//ns:binary"/>
<arg evaluator="xml" expression="$body/ns:binary"/>
<arg evaluator="xml" expression="/soapenv:Body//ns:binary"/>
<arg evaluator="xml" expression="$body/ns:binary/text()"/>
<arg evaluator="xml" expression="soapenv:Body/ns:binary/text()"/>

我错过了什么?我怎样才能得到

<image>
    SomeBase64String===
</image>

环境

与此技术一样,您必须放弃精确和具体。这很丑陋,但它有效:

<arg evaluator="xml" expression="$body/*/text()"/>