如何将传输 vfs 中存在的文件数据保存到 WSO2 中的参数?
How to save file data present in transport vfs to a parameter in WSO2?
我想将本地驱动器中的 csv 文件数据作为字符串参数传递给数据库查询。如何将文件数据从 vfs 保存到参数 属性?
此外,这是一个轮询过程,因此如果可能,希望使用传输 vfs。不是文件连接器。
<proxy name="CSVFileProcessorPostDemo" startOnLoad="true" transports="http https vfs" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<dblookup>
<connection>
<pool>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://**************/**********</url>
<user>*********</user>
<password>*********</password>
</pool>
</connection>
<statement>
<sql><![CDATA[SELECT * FROM ba_ior_integration.fn_transform_ior_msg_to_idoc(?)]]></sql>
<parameter type="VARCHAR" value="{How to read the transport file data?}"/>
<result column="1" name="output_db_idoc"/>
</statement>
</dblookup>
<property expression="get-property('output_db_idoc')" name="dbOutput" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd"/>
.
.
.
.
<parameter name="transport.PollInterval">5</parameter>
<parameter name="transport.vfs.FileURI">file://D:\ESB\files\input_IOR_files</parameter>
<parameter name="transport.vfs.ContentType">text/plain</parameter>
<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.vfs.MoveAfterFailure">file://D:\ESB\files\failure_IOR_files</parameter>
<parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
<parameter name="transport.vfs.Append">true</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.csv</parameter>
<parameter name="transport.vfs.MoveAfterProcess">file://D:\ESB\files\output_IOR_files</parameter>
</proxy>
搜索了一下,找到了两种处理方式。
1) 它只存在于 $ctx.body 标签下。
<property expression="$body//m0:text" name="dbInput" scope="default"
type="STRING" xmlns:m0="http://ws.apache.org/commons/ns/payload"/>
然后在 dbLookup 中:
<sql><![CDATA[SELECT * FROM abcde.fn_transform_xyz_msg_to_idoc(?)]]></sql>
<parameter expression="synapse:get-property('dbInput')" type="VARCHAR"/>
<result column="1" name="output_db_idoc"/>
2) 使用 Java class 中介。消息字符串存在于 MessageContext 对象中。
context.getMessageString()提供了所需的SoapEnvelope,使用它可以提取所需的内部文本。
或
context.getSOAPEnvelop(): 这对我不起作用,应该研究一下。
要点是,在 vfs 下考虑的文件的数据都按顺序存在于 MessageContext 下。
我想将本地驱动器中的 csv 文件数据作为字符串参数传递给数据库查询。如何将文件数据从 vfs 保存到参数 属性?
此外,这是一个轮询过程,因此如果可能,希望使用传输 vfs。不是文件连接器。
<proxy name="CSVFileProcessorPostDemo" startOnLoad="true" transports="http https vfs" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<dblookup>
<connection>
<pool>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://**************/**********</url>
<user>*********</user>
<password>*********</password>
</pool>
</connection>
<statement>
<sql><![CDATA[SELECT * FROM ba_ior_integration.fn_transform_ior_msg_to_idoc(?)]]></sql>
<parameter type="VARCHAR" value="{How to read the transport file data?}"/>
<result column="1" name="output_db_idoc"/>
</statement>
</dblookup>
<property expression="get-property('output_db_idoc')" name="dbOutput" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd"/>
.
.
.
.
<parameter name="transport.PollInterval">5</parameter>
<parameter name="transport.vfs.FileURI">file://D:\ESB\files\input_IOR_files</parameter>
<parameter name="transport.vfs.ContentType">text/plain</parameter>
<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.vfs.MoveAfterFailure">file://D:\ESB\files\failure_IOR_files</parameter>
<parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
<parameter name="transport.vfs.Append">true</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.csv</parameter>
<parameter name="transport.vfs.MoveAfterProcess">file://D:\ESB\files\output_IOR_files</parameter>
</proxy>
搜索了一下,找到了两种处理方式。
1) 它只存在于 $ctx.body 标签下。
<property expression="$body//m0:text" name="dbInput" scope="default"
type="STRING" xmlns:m0="http://ws.apache.org/commons/ns/payload"/>
然后在 dbLookup 中:
<sql><![CDATA[SELECT * FROM abcde.fn_transform_xyz_msg_to_idoc(?)]]></sql>
<parameter expression="synapse:get-property('dbInput')" type="VARCHAR"/>
<result column="1" name="output_db_idoc"/>
2) 使用 Java class 中介。消息字符串存在于 MessageContext 对象中。
context.getMessageString()提供了所需的SoapEnvelope,使用它可以提取所需的内部文本。
或
context.getSOAPEnvelop(): 这对我不起作用,应该研究一下。
要点是,在 vfs 下考虑的文件的数据都按顺序存在于 MessageContext 下。