Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

The ServiceMix File component provides JBI integration to the file system. It can be used to read & write files via URI or to periodically poll directories for new files.

Note that this component is only available in releases >= 3.1.

URI

You can use the familiar file URI to communicate with files

Code Block

file:foo.xml
file://path/to/something

Endpoints

Code Block
langxml
titleProvider endpoint

<file:sender service="test:service"
               endpoint="endpoint"
               directory="file:target/pollerFiles" />

Maven Archetype

The servicemix-file-service-unit archetype creates a File Service Unit which contains both poller and sender endpoints sample:

Code Block

mvn archetype:create \
  -DarchetypeGroupId=org.apache.servicemix.tooling \
  -DarchetypeArtifactId=servicemix-file-service-unit \
  -DarchetypeVersion=2010.01 \
  -DgroupId=your.group.id \
  -DartifactId=your.artifact.id \
  -Dversion=your-version

Once you've customized the service unit, simply install the SU:

Code Block

mvn install
Info

Remember that to be deployable in ServiceMix, the ServiceUnit has to be embedded in a Service Assembly: only the Service Assembly zip file can be deployed in ServiceMix.
To add your SU in a SA, you need to define it in the dependency sets:

Code Block

<dependency>
  <groupId>your.group.id</groupId>
  <artifactId>your.artifact.id</artifactId>
  <version>your-version</version>
</dependency>

Endpoints Configuration

Poller Endpoint

The File Poller endpoint polls file in a given directory, read it using the marshaler, and send marshaled file content to the NMR.

Code Block
langxml
titlePolling Poller (consumerConsumer) endpointEndpoint
<file:poller service="test:poller"
                      endpoint="poller"
                      targetService="test:receiver"
                      file="file:target/pollerFiles" />
Note

Poller generates an InOnly message.

Info
titlePoller endpoint attributesEndpoint Attributes
borderStylesolidbgColor='lighblue'

Name

Type

Description

Default

service

QName

the service name of the endpoint

required to be spec'd

endpoint

string

the endpoint name of the endpoint

required to be spec'd

interfaceName

QName

the interface name of the endpoint

 

targetService

QName

the service name of the target endpoint

 

targetEndPoint targetEndpoint

string

the endpoint name of the target endpoint

 

targetInterface

QName

the interface name of the target endpoint

 

targetUri

string

the uri of the target endpoint

 

autoCreateDirectory

boolean

creates dir if doesn't exist

true

firstTime

date

datetime before first poll can take place

null (first poll right after start)

delay

long

amount of time first polling is delayed after start

0

period

long

amount of time between polls

5000

file

string

sets the file or directory to poll

null (must be spec'd)

deleteFile

boolean

delete file when it is processed

true

recursive

boolean

process sub directories

true

marshaler

class

org.apache.servicemix.components.util.FileMarshaler

DefaultFileMarshaler

lockManager

class

org.apache.servicemix.locks.LockManager

SimpleLockManager

filter

class

java.io.FileFilter (optional filter)

null - no filter

scheduler

class

org.apache.servicemix.components.varscheduler.Scheduler

new Scheduler(true)

comparator

class

implementation of java.util.Comparator<File> interface

null - no ordering

archive

string

sets the directory to archive files before deleting them
(available since 3.2)

null (no archiving)

 
 For all xbean file endpoint configuration take a look at Xml schemas

Sender Endpoint

A File Sender endpoint expects messages coming from the NMR, converts it to file content (using the marshaler) and write file in the given directory.

Code Block
langxml
titleSender (Provider) Endpoint

<file:sender service="test:service"
             endpoint="endpoint"
             directory="file:target/pollerFiles" />
Info
titleSender Endpoint Attributes
borderStylesolidbgColor='lighblue'

Name

Type

Description

Default

service

QName

the service name of the endpoint

required to be spec'd

endpoint

string

the endpoint name of the endpoint

required to be spec'd

directory

file

 

required to be spec'd

autoCreateDirectory

boolean

 

true

append

boolean

append to an existing file instead of overwriting it (3.3 or above)

false

marshaler

class

org.apache.servicemix.components.util.FileMarshaler

DefaultFileMarshaler

tempFilePrefix

string

 

"servicemix-"

tempFileSuffix

string

 

".xml"

URI

You can use the familiar file URI to communicate with files

Code Block

file:foo.xml
file://path/to/something

Filtering

Filtering of files to use during the polling process can be accomplished by configuring the filter property.

Code Block
langxml
titleFilter example
	<file:poller service="test:poller" endpoint="poller"
		file="file:inbox" targetService="test:service"
		targetEndpoint="endpoint" period="10000" recursive="true">
		<property name="filter">
			<bean class="org.apache.oro.io.GlobFilenameFilter">
				<constructor-arg value="*.xml" />
			</bean>
		</property>
	</file:poller>

In this the example above, the Apache ORO jar must be in the classpath. See: http://jakarta.apache.org/oro/

Code Block
langxml
titleServiceMix 3.2 Filter example

<file:poller service="test:poller" endpoint="poller"
	file="file:inbox" targetService="test:service"
	targetEndpoint="endpoint" period="10000" recursive="true">
        <property name="filter">
            <bean class="org.apache.commons.io.filefilter.WildcardFilter">
                <constructor-arg value="*.csv" />
            </bean>
        </property>
</file:poller>

In the example above it uses Apache Commons IO WildcardFilter as it implements FileFilter. The Apache Commons IO jar file must be in the classpath. See: http://commons.apache.org/io/

Comparators

You can define an implementation of the java.util.Comparator interface to specifies the process order of the files.

For example, you can process file sorted by file name. You can implement the following comparator:

Code Block
langjava
titleNameComparator

public class NameComparator implements Comparator<File> {
    
    /*
     * (non-Javadoc)
     * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
     */
    public int compare(File file1, File file2) {
        return file1.getPath().compareTo(file2.getPath());
    }

}

and use it in the endpoint definition:

Code Block
langxml
titleXBean using NameComparator

<file:poller service="test:poller" endpoint="poller"
	file="file:inbox" targetService="test:service"
	targetEndpoint="endpoint" period="10000" recursive="true">
        <property name="comparator">
            <bean class="your.package.NameComparator"/>
        </property>
</file:poller>

We provide the following comparators:

Info
titleProvided Comparator
borderStylesolidbgColor='lighblue'

Class Name

Description

org.apache.servicemix.file.comparator.FileNameComparator

Compare the files based on the file name/path (alphanumeric sorted)

org.apache.servicemix.file.comparator.LastModificationDateComparator

Compare the files based on the last modification date (from oldest to newest)

org.apache.servicemix.file.comparator.SizeComparator

Compare the files based on the file length (from smallest to biggest)

Marshalers

By default, poller endpoints expect the content of the file to be an in xml format.

Code Block
langxml
titleMarshaler example
<file:sender service="test:service" endpoint="endpoint" directory="file:target/componentOutput">
  <file:marshaler>
    <sm:defaultFileMarshaler>
      <sm:fileName>
        <!-- lets use a header from the message -->
        <sm:xpathString xpath="concat($name, '.xml')"/>
      </sm:fileName>
    </sm:defaultFileMarshaler>
  </file:marshaler>
</file:sender>

Below is an example of a non-XML file marshaler that moves a file from an inbox to an outbox directory. The binary marshaler sends a message with the file attached. This allows any file to be processed.

The contents below were used in an xbean.xml file for a service unit named filemover

Code Block
langxml
titleBinary File Marshaler example
<?xml version="1.0"?>
<beans xmlns:f="http://servicemix.apache.org/file/1.0"
       xmlns:proj="http://servicemix.apache.org/samples/filemover"
       xmlns:sm="http://servicemix.apache.org/config/1.0">

  <f:sender service="proj:fileSender"
                 endpoint="endpoint"
                 directory="file:///C:/opensrc/test/myOutbox"
                 autoCreateDirectory="true">

    <property name="marshaler">
      <bean class="org.apache.servicemix.components.util.BinaryFileMarshaler" />
    </property>
  </f:sender>


  <f:poller
      service="proj:filePoller"
      endpoint="poller"
      file="file:///C:/opensrc/test/myInbox"
      targetService="proj:fileSender"
      targetEndpoint="endpoint"
      period="60000"
      recursive="true"
      autoCreateDirectory="true">

      <property name="marshaler">
        <bean class="org.apache.servicemix.components.util.BinaryFileMarshaler" />
      </property>
    </f:poller>
</beans>