如何将传输 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 下。