Как сохранить данные файла, присутствующие в транспортных VFS, для параметра в WSO2? - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу передать данные файла 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 Ответ

1 голос
/ 04 мая 2020

Обыскали и нашли два способа его обработки.

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. Строка сообщения присутствует в объекте MessageContext.

context.getMessageString () предоставляет требуемый SoapEnvelope, с помощью которого можно извлечь требуемый внутренний текст.

или

context. getSOAPEnvelop (): Это не сработало для меня, рассмотрим это.

Вывод состоит в том, что данные файлов, рассматриваемых в vfs, все последовательно присутствуют в MessageContext.

...