On Mon, Nov 29, 2010 at 1:48 PM, Marco Bettiol <[email protected]> wrote:
> Claus... It's me again. Sorry.
> I moved the filter logic to the AggregateStrategy
> I tried some variants to insert "end()" such as:
>
>
> from("file:/Users/marcobettiol/IES/data?noop=true")
>
> .split(body().tokenize("\n"), new TVCEOrderAggregateStrategy())
>
> .end()
>
> .to("file:/Users/marcobettiol/IES/copy?autoCreate=true");
>
>
> but i get Route has no child Exception
>
> --------------
>
> failed to create route route1 at: >>> Split[{tokenize(body,
>
> )} -> []] <<< in route:
> Route[[From[file:/Users/marcobettiol/IES/data?noop=true]] ->... because of
> Definition has no children on Split[{tokenize(body,
>
> )} -> []]
>
>
Ah yeah thats because usually your splitter you want to do something
with each splitted message.
So just add an empty processor, or send it to a log etc.
.to("log:dummy")
>
>
> 2010/11/29 Claus Ibsen <[email protected]>
>
>> On Mon, Nov 29, 2010 at 10:26 AM, Marco Bettiol <[email protected]>
>> wrote:
>> > I'm using 2.5.0.
>> > Ok I will try with your solution and let you know. :)
>> > P.S.
>> > Just for knowledge... Is my code right?
>> >
>>
>> No the filter should not be in the split. Camel will always invoke the
>> AggregationStrategy for each splitted message.
>> So you should implement the logic here if you want to skip certain
>> messages.
>>
>> And you should in essence use .end() in the route to denote when the
>> filter / splitter ends.
>>
>> from
>> split
>> filter
>> end
>> end
>> to
>>
>> But you logic could simply be
>>
>> from
>> split
>> end
>> to
>>
>>
>>
>> > 2010/11/29 Claus Ibsen <[email protected]>
>> >
>> >> Hi
>> >>
>> >> What version of Camel are you using?
>> >>
>> >> And you can also do your filter logic in the aggregator. Just return
>> >> oldExchange if the newExchange should be skipped.
>> >>
>> >>
>> >> On Sun, Nov 28, 2010 at 9:39 PM, Marco Bettiol <[email protected]>
>> >> wrote:
>> >> > Hi guys,
>> >> >
>> >> > I'm new to apache Camel. It sound really great.
>> >> >
>> >> > I was trying to build my first application. I got a file with entries
>> of
>> >> > different type and I want to generate a new file with only a subset of
>> >> the
>> >> > lines (in the final version I will have to build up a POJO and send it
>> >> using
>> >> > web-service).
>> >> >
>> >> >
>> >> > The problem is that when I try to aggregate the lines the output file
>> >> > contains only the last not filtered row
>> >> >
>> >> >
>> >> > Thank you for your support :)
>> >> >
>> >> > Marco
>> >> >
>> >> >
>> >> >
>> >> > Here is the code
>> >> >
>> >> > -------------------------------
>> >> >
>> >> > public class Test {
>> >> >
>> >> > private DefaultCamelContext camel;
>> >> >
>> >> > public static void main(String[] args) throws Exception{
>> >> >
>> >> > new Test();
>> >> >
>> >> > }
>> >> >
>> >> > public Test() throws Exception{
>> >> >
>> >> > camel = new DefaultCamelContext();
>> >> >
>> >> > camel.addRoutes(new RouteBuilder() {
>> >> >
>> >> > public void configure() { from(
>> >> > "file:/Users/marcobettiol/IES/data?noop=true")
>> >> >
>> >> > .split(body().tokenize("\n"), new
>> >> > TVCEOrderAggregateStrategy()).filter(newPredicate() {
>> >> >
>> >> > �...@override
>> >> >
>> >> > public boolean matches(Exchange exchange) {
>> >> >
>> >> > String content =exchange.getIn().getBody(String.class);
>> >> >
>> >> > if(content.startsWith("vnboltes") || content.startsWith("vnbolcas"))
>> >> >
>> >> > return true;
>> >> >
>> >> > return true;
>> >> >
>> >> > //keep everything for test
>> >> >
>> >> > }
>> >> >
>> >> > })
>> >> >
>> >> > .to("file:/Users/marcobettiol/IES/copy?autoCreate=true");
>> >> >
>> >> > }
>> >> >
>> >> > });
>> >> >
>> >> > camel.start();
>> >> >
>> >> > Thread.sleep(5000);
>> >> >
>> >> > camel.stop();
>> >> >
>> >> > }
>> >> >
>> >> >
>> >> > }
>> >> >
>> >> > --------------------------
>> >> >
>> >> > public class TVCEOrderAggregateStrategy implements
>> AggregationStrategy{
>> >> >
>> >> > public Exchange aggregate(Exchange oldExchange, Exchange
>> newExchange)
>> >> {
>> >> >
>> >> > if (oldExchange == null) {
>> >> >
>> >> > return newExchange;
>> >> >
>> >> > }
>> >> >
>> >> > String oldBody = oldExchange.getIn().getBody(String.class);
>> >> >
>> >> > String newBody = newExchange.getIn().getBody(String.class);
>> >> >
>> >> > String concatBody = oldBody.concat(newBody);
>> >> >
>> >> > oldExchange.getIn().setBody(concatBody);
>> >> >
>> >> > return oldExchange;
>> >> >
>> >> >
>> >> > }
>> >> >
>> >> >
>> >> > }
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Claus Ibsen
>> >> -----------------
>> >> FuseSource
>> >> Email: [email protected]
>> >> Web: http://fusesource.com
>> >> Twitter: davsclaus
>> >> Blog: http://davsclaus.blogspot.com/
>> >> Author of Camel in Action: http://www.manning.com/ibsen/
>> >>
>> >
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> FuseSource
>> Email: [email protected]
>> Web: http://fusesource.com
>> Twitter: davsclaus
>> Blog: http://davsclaus.blogspot.com/
>> Author of Camel in Action: http://www.manning.com/ibsen/
>>
>
--
Claus Ibsen
-----------------
FuseSource
Email: [email protected]
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/