Search code examples
apache-camel

Is there a way to make the output file of a stream:file?fileName= dynamic?


Given a simple route like this

route.from("direct:foo")
   .split()
   .tokenize("\n")
   .streaming()
   .to("stream:file?fileName=target/streaming${header.count}.txt&closeOnDone=true");

which I then trigger with this

@Test
public void splitAndStreamToFile() {
    StringBuilder builder = new StringBuilder();
    for(int i = 0; i < 500; i++) {
        builder.append(i);
        builder.append("\n");
    }

    for(int i = 0; i < 10; i++) {
        template.sendBodyAndHeader(builder.toString(), "count", i);
    }

}

I get one big file that contains 10 times 500 lines, where I would have hoped to have 10 files that contain 500 lines each.

In other words, it seems that the fileName in the stream:file endpoint is not dynamic. I am wondering if this is at all possible? My google-fu turned up nothing so far.


Solution

  • Its a dynamic to which there is an EIP pattern for:

    But it could be a good idea to support the file/simple language on the fileName option as the regular file component does. Fell free to log a JIRA ticket about this improvement.