On Fri, May 1, 2020 at 5:41 PM Ron Cecchini <roncecch...@comcast.net> wrote: > > 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? >
No not on camel context, you can register something in the registry and use that. > 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 -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2