You need to look into an aggregator to combine different exchanges into
one. One of the most valuable references you will find in the camel world
is the EIP reference.
http://camel.apache.org/enterprise-integration-patterns.html That page
gives you a mapping as to how many, if not most, problems are solved in
EIP. You should also try to let go of the old synchronous way of doing
things and think in an asynchronous manner. That will get you further. For
example, your route is watching a directory and splitting up a file. There
are a lot of ways to pass that file reference around and add it into an
exchange. You can enrich it, read it on a from line, pass around the raw
data. Try to think from your goal what are the steps in a general fashion
and then figure out which really have to be sequential and then move on
from there. Even a file that is split up, encrypted and put back together
doesn't have to be sequential so long as you keep track of the order of
assembly.


*Robert Simmons Jr. MSc. - Lead Java Architect @ EA*
*Author of: Hardcore Java (2003) and Maintainable Java (2012)*
*LinkedIn: **http://www.linkedin.com/pub/robert-simmons/40/852/a39
<http://www.linkedin.com/pub/robert-simmons/40/852/a39>*


On Mon, Mar 3, 2014 at 2:01 AM, abkrt <tharang...@gmail.com> wrote:

> Thank you very Robert Simmons for you valuable reply.
>
> Still I have one issue, with above solution it will create multiple files
> based on split size. How can I avoid this and encrypt into single file. For
> that I had used "onCompletion" mechanism.
>
> I enhanced the initial design with your feedback. But the encryption route
> is getting the original file as the input, are there any mechanism to
> redirect the generated output file as the input for encryption.
>
> from("file:/home/rt40207/camel_test/gcb/request?include=.*.csv&noop=true")
>             .setProperty("outputFile",
> simple("${header.CamelFileName}.${exchangeId}"))
>             .onCompletion()
>                 .split().tokenize("\n", 5)
>                 .log("splitted body processed & written to file
> ${property.outputFile}.csv")
>                 .process(new RequestProcessor())
>
>
> .to("file:/home/rt40207/camel_test/gcb/temp?fileName=${property.outputFile}.csv&fileExist=Append")
>             .end()
>             .marshal().pgp(keyFileName, keyUserid)
>             .log("PGP encrypted written to file
> ${property.outputFile}.pgp")
>
>
> .to("file:/home/rt40207/camel_test/gcb/response?fileName=${property.outputFile}.pgp");
>
>
> Note:
> RequestProcessor:
> public class RequestProcessor implements Processor {
> public void process(Exchange exchange) throws Exception {
>     String body = exchange.getIn().getBody(String.class);
>     String[] split = body.split("\n");
>     StringBuilder output = new StringBuilder();
>
>     // TODO begin trx
>
>     for (String input : split) {
>         if (input.startsWith("InputHeader")) {
>             output.append("OutputHeader").append(input.substring(11) +
> ",");
>         } else {
>             // TODO process here
>             output.append("\n").append(input).append(",DONE");
>         }
>     }
>
>     // TODO commit trx
>
>     DefaultMessage message = new DefaultMessage();
>     message.setBody(output.toString());
>     message.setHeader(Exchange.FILE_NAME, "output" +
> exchange.getIn().getHeader(Exchange.FILE_NAME, String.class).substring(5));
>
>     exchange.setOut(message);
> }
>
>
>
> --
> View this message in context:
> http://camel.465427.n5.nabble.com/Is-apache-camel-supports-nested-route-tp5748061p5748229.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>

Reply via email to