ServiceMix VFS
The ServiceMix VFS component provides support for reading from and writing to virtual file systems via the enterprise service bus by using the Apache commons-vfs library.
Maven Archetype
You can use Maven servicemix-vfs-service-unit archetype to create a VFS service unit:
Code Block |
---|
mvn archetype:create \
-DarchetypeGroupId=org.apache.servicemix.tooling \
-DarchetypeArtifactId=servicemix-vfs-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:
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 VFS Poller endpoint polls a VFS path, read the VFS file using the marshaler and send the file content to the NMR.
Info |
---|
The VFS Poller endpoint generates an InOnly exchange. |
Code Block |
---|
lang | xml |
---|
title | VFS Poller Endpoint |
---|
|
<vfs:poller service="replaceMe:serviceName"
endpoint="vfs-poller"
path="file:///vfs/path/input/"
targetService="replaceMe:serviceName"
targetEndpoint="target-endpoint"
period="10000"
deleteFile="true"
recursive="true" >
<property name="marshaler">
<bean class="org.apache.servicemix.components.util.BinaryFileMarshaler" />
</property>
</vfs:poller>
|
Info |
---|
title | VFS Poller Endpoint Attributes |
---|
borderStyle | solidbgColor='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 | 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 | | 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 | path | string | sets the vfs path 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 | selector | class | import org.apache.commons.vfs.FileSelector | null - no selector | comparator | class | implementation of java.util.Comparator to order file process | null - no comparator | fileSystemManager | class | sets the vfs file system manager object | null (using VFS.getManager() ) |
|
Sender Endpoint
The VFS Sender endpoint expects messages coming from the NMR, converts it using the marshaler and send it to the VFS path.
Code Block |
---|
lang | xml |
---|
title | VFS Sender Endpoint |
---|
|
<vfs:sender service="replaceMe:serviceName"
endpoint="vfs-sender"
path="file:///vfs/path/output/">
<property name="marshaler">
<bean class="org.apache.servicemix.components.util.BinaryFileMarshaler" />
</property>
</vfs:sender>
|
Info |
---|
title | VFS Sender Endpoint Attributes |
---|
borderStyle | solidbgColor='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 | path | string | sets the vfs path to poll | null (must be spec'd) | marshaler | class | org.apache.servicemix.components.util.FileMarshaler | DefaultFileMarshaler | fileSystemManager | class | sets the vfs file system manager object | null (using VFS.getManager() ) |
|
Marshalers
By default, poller endpoints expect the content of the file to be in XML format.
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 |
---|
lang | xml |
---|
title | Binary File Marshaler example |
---|
|
<?xml version="1.0"?>
<beans xmlns:vfs="http://servicemix.apache.org/vfs/1.0"
xmlns:proj="http://servicemix.apache.org/samples/filemover"
xmlns:sm="http://servicemix.apache.org/config/1.0">
<vfs:poller service="proj:vfsPoller"
endpoint="pollerEndpoint"
path="file:///C:/opensrc/test/myInbox"
targetService="proj:vfsSender"
period="10000"
deleteFile="true"
recursive="true" >
<property name="marshaler">
<bean class="org.apache.servicemix.components.util.BinaryFileMarshaler" />
</property>
</vfs:poller>
<vfs:sender service="proj:vfsSender"
endpoint="senderEndpoint"
path="file:///C:/opensrc/test/myOutbox/">
<property name="marshaler">
<bean class="org.apache.servicemix.components.util.BinaryFileMarshaler" />
</property>
</vfs:sender>
</beans>
|
The path attribute
Have a look at the Apache Commons-VFS Supported File Systems page.
Warning |
---|
|
Some of the VFS are accessed read-only. Those file system types can't be used for sender endpoints and will throw Exceptions when trying to do so. Have a look at the comments on the above linked page. It is stated what kind of access is provided by which system. |