DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
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:
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:
mvn install
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:
<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.
The VFS Poller endpoint generates an InOnly exchange.
<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>
VFS Poller Endpoint Attributes
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.
<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>
VFS Sender Endpoint Attributes
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
<?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.
Attention
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.