Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Panel

All files for this example you can find in sample.zip.

Objective: To pick up a file in a

Table of Contents

Introduction

This sample demonstrates how to pick a file from a directory and process it within the ESB. In this sample scenario you pick a file from the local directory, insert the records from in the file into to a database, send an email with data from the file content, trace and write the log and finally move the file to another directory.

The following scheme visually diagram displays the processes running entities involved in this example.

Info
titleNote

This example works with the MySQL database.

...

Building the sample

...

maxLevel3
minLevel3
styleborder:1
locationtop
typeflat
separatorpipe

...

Panel

All files required for this sample are in sample.zip.

Follow the steps given below to build this sample.

Set up the database

...

  1. Manually set up the database.

...

  1. Create a table named

...

  1. info

...

  1.  in your schema. You can

...

  1. run the

...

  1. following commands to do this.

    Code Block
    delimiter $$
    
    CREATE TABLE `info` (
      `name` varchar(45) DEFAULT '',
      `surname` varchar(45) DEFAULT NULL,
      `phone` varchar(45) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

...

  1. Make sure the

...

  1. info

...

  1. table

...

  1. is created and that it contains the following columns:

    • name
    • surname
    • phone

The screen-shot bellow displays the result The result of the query should be as follows when you query to show view the records from in the test.info table. There You will see that there is no data in the table.


 

...

Create the main and fault sequences

...

  1. Find the main.xml and fault.xml files in the

...

  1. attached sample.zip archive. You can find

...

  1. the files in the

...

  1. <SAMPLE_HOME>/conf/synapse-config

...

  1. /sequences

...

  1. directory.

...

  1. Copy the files to 

...

  1. <ESB_HOME>/repository/deployment/server/synapse-configs/default/sequences folder.

    Info
    titleNote

    The

...

  1. main

...

  1. and

...

  1. fault

...

  1. sequences are created and preconfigured automatically

...

  1. when you install WSO2 ESB.

...

Configure the ESB

The scenario requires some modifications of the axis2.xml (ESB configuration file) located in <WSO2ESBYou need to configure the ESB to use the VFS transport for processing the files, and the MailTo transport for sending the email message. You also need to configure the message formatter as specified. 

  • Edit the <ESB_HOME>/repository/conf/axis2/axis2.

...

Enabling VFS transport

...

  • xml file and uncomment the VFS listener and the VFS sender as follows:

    Code Block
    languagehtml/xml
    <transportreceiver name="vfs" class="org.apache.synapse.transport.vfs.VFSTransportListener"/>
    

...

2. To enable the VFS transport sender, uncomment the following string.

...

languagehtml/xml
  • ...
    <transportSender name="vfs" class="org.apache.synapse.transport.vfs.VFSTransportSender"/>

...

Configuring Mail Transport

This transport can be used to send e-mail messages.

...

  • Edit the <ESB_HOME>/repository/conf/axis2/axis2.xml file and configure the mailto transport sender as follows to use a mailbox for sending the messages

...

  • :

    Code Block
    languagehtml/xml
    <transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
       <parameter name="mail.smtp.host">smtp.gmail.com</parameter>
       <parameter name="mail.smtp.port">587</parameter>
       <parameter name="mail.smtp.starttls.enable">true</parameter>
       <parameter name="mail.smtp.auth">true</parameter>
       <parameter name="mail.smtp.user">username</parameter>
       <parameter name="mail.smtp.password">userpassword</parameter>
       <parameter name="mail.smtp.from">username@gmail.com</parameter>
    </transportSender>

...

  • Info
    title

...

  • Note

    In this sample,

...

  • you will not retrieve mails from a mailbox.

...

  • Therefore, you do not need to enable the

...

  • mailto transport receiver.

Configuring Message Builders/Formatters

When a message comes thorough the wire, it first goes through a message builder and message builder is responsible for converting the message into a SOAP message. Message formatters determine the outgoing wire message format of a SOAP message inside the ESB.

1. Add the following message formatter to the axis2.xml file placed in <WSO2ESB_HOME>/repository/conf/axis2.

Message formatters are configured in axis2.xml under the section.

Code Block
languagehtml/xml
<messageFormatters></messageFormatters>

Add the org.apache.axis2.transport.http.ApplicationXMLFormatter under the content type "text/html".

Code Block
languagehtml/xml
<messageFormatter contentType="text/html" class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>

Step 4. Add Database Drivers

1. Find the MySQL database driver mysql-connector-java-5.1.10-bin.jar in the supplied archive. It is located in the lib folder.

...

  • Add the following message formatter in the <ESB_HOME>/repository/conf/Axis2/axis2.xml file under the Message Formatters section:

    Code Block
    languagehtml/xml
    <messageFormatter contentType="text/html" class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
     

     

...

Add database drivers

  1. Find the MySQL database driver mysql-connector-java-5.1.10-bin.jar in the attached sample.zip archive. You can find the file in the  <SAMPLE_HOME>/lib directory.
  2. Copy the driver to the <WSO2ESB_HOME>/repository/components/lib directory. 

...

Add smooks libraries

This example uses a CSV smooks library.

  1. You can find the CSV smooks library milyn-smooks-csv-1.2.4.jar in the attached sample.zip archive. You can find the file in the  <SAMPLE_HOME>/lib directory.
  2. Copy the library to the <WSO2ESB_HOME>/repository/components/lib directory.

...

Step 5. Add Smooks Libraries

This example uses a CSV smooks library.

1. Find the CSV smooks library milyn-smooks-csv-1.2.4.jar in the supplied archive. It is located in the lib folder.

2. Copy the library to the <WSO2ESB_HOME>/repository/components/lib directory.

...

titleNotice

...

  1. Note
    titleNote

    These configuration changes make system-wide changes to the ESB and the ESB has to be restarted for these changes to take effect.

Step 6. Create and Configure FileProxy

1. Find the FileProxy.xml in the supplied archive. It is located in the \conf\synapse-config\sequences folder.

The XML code of the sequence is provided bellow.

...

languagehtml/xml

...

  1. Configure a local entry as follows. For information on how to add a local entry, see Adding a Local Entry. This local entry will be used to refer to the smooks configuration saved in the <SAMPLE_HOME>/resources/smooks-config.xml file.

    Code Block
    languagexml
    <localEntry key="smooks" src="file:resources/smooks-config.xml"/>

...

Create and configure FileProxy

  1. You can find the FileProxy.xml file in the attached sample.zip archive. It is located in the <SAMPLE_HOME>/conf/synapse-config/proxy-services directory.

    The XML code of the sequence is as follows:

    Code Block
    languagehtml/xml
    <proxy xmlns="http://ws.apache.org/ns/synapse" name="FileProxy" transports="vfs" startOnLoad="true" trace="disable">
        <target>
            <inSequence>
                <log level="full"/>
                <clone>
                    <target sequence="fileWriteSequence"/>
                    <target sequence="sendMailSequence"/>
                    <target sequence="databaseSequence"/>
                </clone>
            </inSequence>
        </target>
        <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
        <parameter name="transport.PollInterval">15</parameter>
        <parameter name="transport.vfs.MoveAfterProcess">file:///home/username/test/original</parameter>
        <parameter name="transport.vfs.FileURI">file:///home/username/test/in</parameter>
        <parameter name="transport.vfs.MoveAfterFailure">file:///home/username/test/failure</parameter>
        <parameter name="transport.vfs.FileNamePattern">.*.txt</parameter>
        <parameter name="transport.vfs.ContentType">text/plain</parameter>
        <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
    </proxy>

...

...

  1. Edit the FileProxy.xml file, and define the

...

  1. directory to which the original file

...

  1. should be moved after processing.

    Code Block
    languagehtml/xml
    <parameter name="transport.vfs.MoveAfterProcess">[file:///home/]<username>/test/original</parameter>

...

3. Define the folder where the input file should be placed.

...

  1. Anchor
    FileProxyStep
    FileProxyStep

  2. Edit the FileProxy.xml file, and define where the input file should be placed.

    Code Block
    languagehtml/xml
    <parameter name="transport.vfs.FileURI">[file:///home/]<username>/test/in</parameter>

...

...

  1. Edit the FileProxy.xml file, and define the directory to which the file should be moved if an error occurs

...

  1. .

    Code Block
    languagehtml/xml
    <parameter name="transport.vfs.MoveAfterFailure">[file:///home/]<username>/test/failure</parameter>

...

5. Save the file to:

...

  1.  Save the FileProxy.xml file to the <ESB_HOME>/repository/deployment/server/synapse-configs/default/proxy-services

...

  1. directory.

...

Create and

...

configure databaseSequence

Follow the instructions below to create a sequence that can be used to connect to the database and to insert the data there.1. Find the

  1. You can find the databaseSequence.xml file in

...

  1. the attached sample.zip archive. It is located in the 

...

  1. <SAMPLE_HOME>/conf/synapse-config

...

  1. /sequences

...

  1. directory.

    The XML code of the database sequence is

...

  1. as follows.

    Code Block

...

  1. <sequence xmlns="http://ws.apache.org/ns/synapse" name="databaseSequence">
        <log level="full">
            <property name="sequence" value="before-smooks"/>
        </log>
        <smooks config-key="smooks">
            <input type="text"/>
            <output type="xml"/>	
        </smooks>
        <log level="full">
            <property name="sequence" value="after-smooks"/>
        </log>
        <iterate xmlns:ns2="http://org.apache.synapse/xsd"
                 xmlns:ns="http://org.apache.synapse/xsd"
                 xmlns:sec="http://secservice.samples.esb.wso2.org"
                 expression="//csv-records/csv-record">
          <target>
           <sequence>
            <dbreport>
              <connection>
               <pool>
                 <password>db-password</password>
                 <user>db-username</user>
                 <url>jdbc:mysql://localhost:3306/test</url>
                 <driver>com.mysql.jdbc.Driver</driver>
               </pool>
              </connection>
               <statement>
                <sql>insert into userdetails values (?, ?, ?, ?, ?)</sql>
                  <parameter expression="//csv-record/name/text()" type="VARCHAR"/>
                  <parameter expression="//csv-record/

...

  1. surname/text()

...

  1. " type="VARCHAR"/>
                  <parameter expression="//csv-record/

...

  1. phone/text()" type="VARCHAR"/>
    

...

 

...

  1.             </statement>
            </dbreport>
          </sequence>
        </target>
      </iterate>
    </sequence>
    
  2. Specify your database username, password, and URL in the <pool> section of the sequence.

...

  1. Save the

...

  1. databaseSequence.xml file to the <ESB_HOME>/repository/deployment/server/synapse-configs/default/sequences

...

  1.  directory.

...

...

Create and Configure fileWriteSequence

...

  1. You can find the fileWriteSequence.xml in the

...

  1. attached sample.zip archive. It is located in

...

  1. the  <SAMPLE_HOME>/conf/synapse-config

...

  1. /sequences

...

  1.  directory.

    The XML code of the sequence is

...

  1. as follows:

    Code Block
    languagehtml/xml

...

  1. <sequence xmlns="http://ws.apache.org/ns/synapse" name="fileWriteSequence">
        <log level="custom">
            <property name="sequence" value="fileWriteSequence"/>
        </log>
        <property xmlns:ns2="http://org.apache.synapse/xsd" name="transport.vfs.ReplyFileName" expression="fn:concat(fn:substring-after(get-property('MessageID'), 'urn:uuid:'), '.txt')" scope="transport"/>
        <property name="OUT_ONLY" value="true"/>
        <send>
            <endpoint name="FileEpr">
                <address uri="vfs:file:///home/username/test/out"/>
            </endpoint>
        </send>
    </sequence>

...

2. In the XML code, define the folder to move the file to.

3. Save the file to:

...

  1. Edit the fileWriteSequence.xml file, and define the directory to which the file should be moved.

  2. Save the fileWriteSequence.xml file to the <ESB_HOME>/repository/deployment/server/synapse-configs/default/sequences

...

  1.  directory.

...

...

Create and

...

configure sendMailSequence

...

  1. You can find the sendMailSequence.xml file in

...

  1. the attached sample.zip archive. It is located in the  <SAMPLE_HOME>/conf/synapse-config

...

  1. /sequences

...

  1.  directory.

    The XML code of the sequence is

...

  1. as follows:

    Code Block
    languagehtml/xml

...

  1. <sequence xmlns="http://ws.apache.org/ns/synapse" name="sendMailSequence">
        <log level="custom">
            <property name="sequence" value="sendMailSequence"/>
        </log>
        <property name="messageType" value="text/html" scope="axis2"/>
        <property name="ContentType" value="text/html" scope="axis2"/>
        <property name="Subject" value="File Received" scope="transport"/>
        <property name="OUT_ONLY" value="true"/>
        <send>
            <endpoint name="FileEpr">
                <address uri="mailto:username@gmail.com"/>
            </endpoint>
        </send>
    </sequence>

...

...

  1. Edit the  sendMailSequence.xml  file, and define the e-mail address to which the notification

...

  1. should be sent. 

3. Save the file to:

...

  1. Save the sendMailSequence.xml file to the <ESB_HOME>/repository/deployment/server/synapse-configs/default/sequences

...

  1.  directory.

...

  1.  

...

Create the input file

...

  • Create a text file in the following format.

    Code Block
    name_1, surname_1, phone_1
    name_2, surname_2, phone_2

...

  • Image Modified

...

Executing the sample

  • Save the file in

...

  • the .txt format to

...

Step 11. Monitor Results

...

  • the in directory that you specified in step 3, under the create and configure FileProxy section.

...

Analyzing the output

In this sample, the ESB listens on a local file system directory. When a file is dropped into the in directory, the ESB picks this file.1.

  1. Make sure the file

...

  1. appears in the out directory.

...

  1. The ESB inserts the records from the text file to the database. Make sure the data is in the info table. The

...

  1. following screenshot displays the content of the test.info table

...

  1. with the data from the file.
    Image Modified

...

  1. Make sure the original file

...

  1. is moved to the /home/<username>/test/original directory.

...

  1. Make sure the e-mail notification

...

  1. is sent to the email address that is specified

...

  1. . The message should contain the file data. The following

...

  1. screenshot displays a notification received.
    Image Modified

    Excerpt
    hiddentrue

    This example scenario displays how to pick up a file in a local directory, insert the records from the file into a database, send an email with data from the file, trace and write the log and finally move the file to another directory.