The file language is an extension to the simple language which is not always available. You can use it under the following circumstances:
There are several URI options that you can set on a File or FTP consumer endpoint,
which take a file language expression as their value. For example, in a File
consumer endpoint URI you can set the fileName
, move
,
preMove
, moveFailed
, and sortBy
options
using a file expression.
In a File consumer endpoint, the fileName
option acts as a filter,
determining which file will actually be read from the starting directory. If a plain
text string is specified (for example, fileName=report.txt
), the File
consumer reads the same file each time it is updated. You can make this option more
dynamic, however, by specifying a simple expression. For example, you could use a
counter bean to select a different file each time the File consumer polls the
starting directory, as follows:
file://target/filelanguage/bean/?fileName=${bean:counter.next}.txt&delete=true
Where the ${bean:counter.next}
expression invokes the
next()
method on the bean registered under the ID,
counter
.
The move
option is used to move files to a backup location after then
have been read by a File consumer endpoint. For example, the following endpoint
moves files to a backup directory, after they have been processed:
file://target/filelanguage/?move=backup/${date:now:yyyyMMdd}/${file:name.noext}.bak&recursive=false
Where the ${file:name.noext}.bak
expression modifies the original
file name, replacing the file extension with .bak
.
You can use the sortBy
option to specify the order in which file
should be processed. For example, to process files according to the alphabetical
order of their file name, you could use the following File consumer endpoint:
file://target/filelanguage/?sortBy=file:name
To process file according to the order in which they were last modified, you could use the following File consumer endpoint:
file://target/filelanguage/?sortBy=file:modified
You can reverse the order by adding the reverse:
prefix—for
example:
file://target/filelanguage/?sortBy=reverse:file:modified
When an exchange originates from a File or FTP consumer endpoint, it is possible to apply file language expressions to the exchange throughout the route (as long as the original message headers are not erased). For example, you could define a content-based router, which routes messages according to their file extension, as follows:
<from uri="file://input/orders"/> <choice> <when> <simple>${file:ext} == 'txt'</simple> <to uri="bean:orderService?method=handleTextFiles"/> </when> <when> <simple>${file:ext} == 'xml'</simple> <to uri="bean:orderService?method=handleXmlFiles"/> </when> <otherwise> <to uri="bean:orderService?method=handleOtherFiles"/> </otherwise> </choice>