Thanks, Claus.

I should've mentioned that the body is a list of objects...

So unfortunately I can't use 
exchange.getMessage().getBody().toString().length() as it's returning the full 
text size of everything in the list.

I really didn't want to do any string manipulations in the processor... but 
since there was an easy way to do it, I couldn't resist and did something like 
the following, which now works perfectly:

    .process(new Processor() {
        public void process(Exchange e) throws Exception {
            int num = 
StringUtils.countMatches(e.getMessage().getBody().toString(), "CLASSNAME");
            e.getContext().getGlobalOptions().put("NumThings", 
Integer.toString(num));
        }
    })

BTW, if GlobalOptions isn't recommended, is there a better way to hang a value 
on the CamelContext so the caller can see it? 

Thanks again.

> On May 1, 2020 at 1:04 AM Claus Ibsen <claus.ib...@gmail.com> wrote:
> 
> 
> Global options are not for storing arbitrary end user stuff really.
> Its for some global options for Camel itself for some logging max
> sizes, and some other bits.
> That said the options are stored as key/values as-is and not evaluated
> during routing of an exchange as they are not intended for that.
> 
> But if you want to do it anyway, then your process method can store
> the body size as a value instead of a simple text.
> 
> Something ala .put("xxx", exchange.getMessage.getBody.size)
> 
> 
> On Fri, May 1, 2020 at 6:24 AM Ron Cecchini <roncecch...@comcast.net> wrote:
> >
> > I'm trying to pass back the # of things I've processed in a route back to 
> > the calling Java.
> >
> > This log() displays the correct number:
> >
> > .log(LoggingLevel.INFO, "Processing ${body.size} Things ...")
> >
> > I then tried putting that ${body.size} in a GlobalOption on the 
> > CamelContext so I can access it later:
> >
> > .process(exchange -> 
> > exchange.getContext().getGlobalOptions().put("NumThings", 
> > simple("${body.size}").toString()) )
> >
> > However, the above, and a few variations of the simple(), causes this:
> >
> > System.out.println(String.format("*** Processed %s Things", 
> > camContext.getGlobalOption("NumThings")));
> >
> > to gives this:
> >
> > *** Processed Simple: ${body.size} Things
> >
> > I just can't figure out how to do the evaluations and get that value in the 
> > GlobalOptions.  (I googled and googled...)
> >
> > Or maybe there's a better way to store it in the CamelContext?
> >
> > Thanks.
> 
> 
> 
> -- 
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to