WSO2 Integrator 6,文件入站协议进程代码

时间:2018-01-15 15:40:49

标签: wso2 wso2esb

目前在wso2集成商的公司工作,我需要检索定期创建到目录中的文件,以便可以处理,修改和发送到远程API。

问题是我们需要专门使用wso2而绝对不能代码端程序来适应这种情况。我们可以使用脚本,只有它们嵌入在wso2中。

有人有线索吗?

1 个答案:

答案 0 :(得分:0)

这是一个简单的突触配置:

  1. 等待指定目录中的传入CSV文件
  2. 将其内容转换为XML
  3. 对其元素进行一些转换
  4. 将结果发送到另一个端点(在本例中为输出目录)
  5. 我希望让你前进(内联评论):

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://ws.apache.org/ns/synapse">
    
    
    <!-- ======================================== -->
    <!-- Smooks configuration to parse sample CSV -->
    <!-- ======================================== -->
    
    <localEntry key="smooks-orders-csv">
        <smooks-resource-list
            xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.2.xsd">
            <resource-config selector="org.xml.sax.driver">
                <resource>org.milyn.csv.CSVReader</resource>
                <param name="fields">OrderId,SKU,Quantity,UnitPrice,TotalPrice</param>
                <param name="skip-line-count">1</param> <!-- Skip Header line -->
                <param name="rootElementName">orders</param>
                <param name="recordElementName">order</param>
            </resource-config>
        </smooks-resource-list>
    </localEntry>
    
    <!-- ====================================================== -->
    <!-- XML processing logic: Replaces SKU number 0002 to 0003 -->
    <!-- ====================================================== -->
    
    <localEntry key="change-sku">
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:template match="@*|node()">
                <xsl:copy>
                    <xsl:apply-templates select="@*|node()"/>
                </xsl:copy>
            </xsl:template>
            <xsl:template match="SKU/text()[.='0002']">0003</xsl:template>
        </xsl:stylesheet>
        <description/>
    </localEntry>   
    
    <!-- *********************** -->
    <!-- Process Orders sequence -->
    <!-- *********************** -->
    
    <sequence name="process_orders" onError="fault" statistics="enable" trace="enable">
    
        <!-- Convert incoming file into a stream of orders -->
        <smooks config-key="smooks-orders-csv">
            <input type="text"/>
            <output type="xml"/>
        </smooks>
    
        <!-- General Synapse properties that must be set for a One-Way exchange pattern -->
        <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true"/>
        <property name="OUT_ONLY" value="true"/>
    
        <!-- VFS send will fail unless you remove this property -->
        <property action="remove" name="ClientApiNonBlocking" scope="axis2"/>
    
        <!-- The "magic" property 'transport.vfs.ReplyFileName' is used by the VFS transport to define output file name 
             when the specified URI is a directory
          -->
        <property
            expression="fn:concat(fn:substring-after(get-property('MessageID'), 'urn:uuid:'), '.xml')"
            name="transport.vfs.ReplyFileName" scope="transport" xmlns:ns="http://org.apache.synapse/xsd"/>
    
        <!-- Create output file -->
        <send>
            <endpoint>
                <address format="pox" uri="vfs:file:///mnt/c/transfer/out"/>
            </endpoint>
        </send>
    </sequence>
    
    <!-- Inbound polling endpoint -->
    <inboundEndpoint name="received_orders" onError="fault"
        protocol="file" sequence="process_orders" suspend="false">
        <parameters>
            <parameter name="interval">1000</parameter>
            <parameter name="sequential">true</parameter>
            <parameter name="coordination">true</parameter>
    
            <!-- Input directory -->
            <parameter name="transport.vfs.FileURI">file:///mnt/c/transfer/in</parameter>
    
            <!-- CSV files are plain text messages -->
            <parameter name="transport.vfs.ContentType">text/plain</parameter>
    
            <!-- RegExp used to filter files in input directory -->
            <parameter name="transport.vfs.FileNamePattern">.*\.txt</parameter>
            <parameter name="transport.vfs.Locking">disable</parameter>
    
            <!-- Move processed files to the 'processed' subdirectory -->
            <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
            <parameter name="transport.vfs.MoveAfterProcess">file:///mnt/c/transfer/in/processed</parameter>
    
            <!-- Move failed files to the 'rejected  subdirectory -->
            <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
            <parameter name="transport.vfs.MoveAfterFailure">file:///mnt/c/transfer/in/rejected</parameter>
    
            <parameter name="transport.vfs.AutoLockRelease">true</parameter>
            <parameter name="transport.vfs.LockReleaseSameNode">false</parameter>
            <parameter name="transport.vfs.DistributedLock">false</parameter>
            <parameter name="transport.vfs.FileSortAttribute">NONE</parameter>
            <parameter name="transport.vfs.FileSortAscending">true</parameter>
            <parameter name="transport.vfs.CreateFolder">true</parameter>
            <parameter name="transport.vfs.Streaming">false</parameter>
            <parameter name="transport.vfs.Build">false</parameter>
        </parameters>
    </inboundEndpoint>
    </definitions>