Versions Compared

Key

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

All files for this example are 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.
  2. Create a table named "info" in  in your schema. You can use run the commands as shown belowfollowing 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$$
     
  3. Make sure the

    "

    info

    "

    table

    has been

    is created and that it contains the following columns:

    • name
    • surname
    • phone

...

The result of the query

...

should be as follows when you query to view the records in the test.info table.

...

You will see that there is no data in the table.


Image Modified 

...

Create the main and fault sequences

  1. Find the main.xml and fault.xml files in the supplied archiveattached sample.zip archive. You can find them the files in the \conf\<SAMPLE_HOME>/conf/synapse-config\/sequences folder directory.
  2. Save Copy the files to <ESB_HOME>/repository/deployment/server/synapse-configs/default/sequences folder.

    Info
    titleNote

    The "main" and "fault" sequences are created and preconfigured automatically while installing when you install WSO2 ESB.

...

Configure the ESB

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

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

...

Enabling VFS transport

...

  • /axis2.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"/>

...

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

...

languagehtml/xml

...

  • 
    ...
    <transportSender name="vfs" class="org.apache.synapse.transport.vfs.VFSTransportSender"/>
Configuring the MailTo 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.

...

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

    Code Block
    languagehtml/xml

...

<messageFormatters></messageFormatters>

...

  • <messageFormatter contentType="text/html" class="org.apache.axis2.transport.http.ApplicationXMLFormatter

...

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 supplied archive. It is located in the lib folder 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. Find You can find the CSV smooks library milyn-smooks-csv-1.2.4.jar in the supplied archive. It is located in the lib folderattached 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.

    Note
    titleNoticeNote

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

  3. Configure a local entry as follows. This will 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 in the <SAMPLE_HOME>/resources/smooks-config.xmlxml file.

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

    See Adding a Local Entry for further information.

...

Create and

...

configure FileProxy

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

    The XML code of the sequence is provided below.as follows:

    Code Block
    languagehtml/xml
    <?xml version="1.0" encoding="UTF-8"?>
    <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>

     

  2. In the Edit the FileProxy.xml file, and define the folder where directory to which the original file is should be moved after processing.

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

     

    Define the folder where the input

    Anchor
    FileProxyStep
    FileProxyStep

  3. 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>

     

  4. Define the folder where the file is Edit the FileProxy.xml file, and define the directory to which the file should be moved if an error occurs:.

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

     

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

...

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 You can find the databaseSequence.xml file in the supplied archivethe attached sample.zip archive. It is located in the \conf\<SAMPLE_HOME>/conf/synapse-config\/sequences folder directory.

    The XML code of the database sequence is provided below.

    Code Block<dbreport> <connection> <pool> <password>databasepassword</password> <user>databaseuser</user> <url>jdbc:mysql://localhost:3306/info</url> <driver>com.mysql.jdbc.Driver</driver> </pool> </connection> <statement> <sql>insert into INFO values (?, ?, ?)</sql>

    as follows.

    Code Block
    <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/namesurname/text()" type="VARCHAR"/>
    		)" type="VARCHAR"/>
                  <parameter expression="//csv-record/surnamephone/text()" type="VARCHAR"/>
    		<parameter expression="//csv-record/phone/text()" type="VARCHAR"/>
    	</statement>
    </dbreport>

     

    Specify your database password, username
    >
                </statement>
            </dbreport>
          </sequence>
        </target>
      </iterate>
    </sequence>
    
  2. Specify your database username, password, and URL in the <pool> section of the sequence.
  3. Save the file to:
    <WSO2ESBdatabaseSequence.xml file to the <ESB_HOME>/repository/deployment/server/synapse-configs/default/sequences/databaseSequence.xml directory.

...

Create and Configure fileWriteSequence

  1. Find the You can find the fileWriteSequence.xml in the supplied archiveattached sample.zip archive. It is located in the  \conf\the  <SAMPLE_HOME>/conf/synapse-config\/sequences folder directory.

    The XML code of the sequence is provided below.as follows:

    <?xml version="1.0" encoding="UTF-8"?>
    Code Block
    languagehtml/xml
    html/xml
    <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:
    <WSO2ESB

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

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

...

Create and

...

configure sendMailSequence

  1. Find the You can find the sendMailSequence.xml file in the supplied archive. You can find it in the \conf\the attached sample.zip archive. It is located in the  <SAMPLE_HOME>/conf/synapse-config\/sequences folder directory.

    The XML code of the sequence is provided below.as follows:

    Code Block
    languagehtml/xml
    <?xml version="1.0" encoding="UTF-8"?>
    <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>

     

  2. In the XML code, define Edit the  sendMailSequence.xml  file, and define the e-mail address to which the notification will should be sent. 
  3. Save the file to:
    <WSO2ESBthe sendMailSequence.xml file to the <ESB_HOME>/repository/deployment/server/synapse-configs/default/sequences/sendMailSequence directory.xml. 

...

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

...

Step 11. Monitor Results

...

  • the .txt format to 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. Make sure the file has appeared appears in the out directory.
  2. The ESB inserts the records from the text file to the database. Make sure the data is in the info table. The screen-shot below following screenshot displays the content of the test.info table containing with the data from the file.
    Image Modified 
  3. Make sure the original file has been is moved to the /home/<username>/test/original directory.
  4. Make sure the e-mail notification has been is sent to the email address that is specified email. The message should contain the file data. The following screen-shot 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.