WSO2 循环 ns:binary
WSO2 loop through ns:binary
上下文
我在尝试时遇到了一些困难
iterate
通过文件(之前用 fileconnector.search
找到)
- 以自定义方式发送它们
payload
这是相关部分
<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>
环境
- wso2ei 6.5.0
- 文件连接器 2.0.20
与此技术一样,您必须放弃精确和具体。这很丑陋,但它有效:
<arg evaluator="xml" expression="$body/*/text()"/>
上下文
我在尝试时遇到了一些困难
iterate
通过文件(之前用fileconnector.search
找到)- 以自定义方式发送它们
payload
这是相关部分
<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>
环境
- wso2ei 6.5.0
- 文件连接器 2.0.20
与此技术一样,您必须放弃精确和具体。这很丑陋,但它有效:
<arg evaluator="xml" expression="$body/*/text()"/>