There is a header "CamelFileName" on the exchange. Your processor/bean is passed a reference to the exchange and you can get the header from there and associate it with the token you have been invoked with.
Your route could look like this:
<camel:route id="splitter_test">
<camel:from uri="file:///home/steppra1/camel_test?delete=true&idempotent=true" />
<camel:to uri="bean:splitBean?method=init" />
<camel:split streaming="true">
<camel:tokenize token="\n" />
<camel:to uri="bean:splitBean?method=addToken" />
</camel:split>
<camel:to uri="bean:splitBean?method=done" />
<camel:log message="${in.body}" loggingLevel="INFO" logName="split_test" />
</camel:route>
The bean you are using to maintain the state on the exchange object:
public class SplitBean {
public Object init(Exchange exchange) {
exchange.setProperty("splitTokens", new ArrayList<Integer>());
return exchange.getIn().getBody();
}
public Object addToken(Exchange exchange) {
((List<Integer>)exchange.getProperty("splitTokens")).add(Integer.parseInt((String)exchange.getIn().getBody()));
return null;
}
public Tuple done(Exchange exchange) {
return new Tuple<String, List<Integer>>((String)exchange.getIn().getHeader("CamelFileName"), (List<Integer>)exchange.getProperty("splitTokens"));
}
}
A file containing the rows
1
2
3
5
fed to the route under the names splitter.text and splitter_2.txt yields the following log output:
2013-12-18 18:20:02,081 INFO split_test - Tuple [first=splitter.txt, second=[1, 2, 3, 5]]
2013-12-18 18:20:46,610 INFO split_test - Tuple [first=splitter_2.txt, second=[1, 2, 3, 5]]
HTH