In the Processor you define the access path during "runtime":
you have one exchange as input.

In the RouteBuilder you define the access path during "design time":
what is to do for _every_ incoming exchange (and some may not have a hashmap
as body...).


But i am sure that you could use simple language for achieving your goal ...
https://camel.apache.org/simple.html
Maybe:
setHeader("uid").simple("${body[user_name]}")


Jan

> -----Ursprüngliche Nachricht-----
> Von: Glattfelder, Beat [mailto:beat.glattfel...@credit-suisse.com]
> Gesendet: Montag, 26. Mai 2014 16:32
> An: users@camel.apache.org
> Betreff: Java DSL Question - revisited
> 
> Hi again
> 
> I need to clarify that I want to access members of the Object  in the
> body, which is a HashMap,  from within the DSL. From a Processor I can
> access the Object as such:
> 
> 
> 
> // works
> 
> exchange.getIn().getBody(Map.class).get("user_name"));
> 
> 
> 
> In the fluent builder, like in the following example, this does not
> work since the body() method returns a ValueBuilder Object so the
> following code won't compile.
> 
> 
> 
> // won't compile
> 
> .split(body())
> 
> setHeader("uid").body(Map.class).get("user_name"));
> 
> 
> 
> What am I missing here?
> 
> 
> 
> 
> 
> >>>>>>>>
> 
> 
> 
> 
> 
> The body part of the camel exchange object (exchange.getIn().getBody())
> 
> after the split contain the string. So the syntax (to be typesafe) is
> 
> 
> 
> .split(body())
> 
> setHeader("uid").body(String.class)
> 
> 
> 
> 
> 
> On Wed, May 21, 2014 at 11:19 AM, Glattfelder, Beat <
> 
> beat.glattfel...@credit-suisse.com<mailto:beat.glattfelder@credit-
> suisse.com>> wrote:
> 
> 
> 
> > Hi Camel Riders
> 
> >
> 
> > I am back with a simple question I found to tough to answer myself:
> How do
> 
> > I access the message body in a typesafe manner like in the TODO
> comment
> 
> > below? Obviously implementing a processor works fine, but make things
> 
> > harder to read.
> 
> >
> 
> > Thanks for advising,
> 
> > Beat
> 
> >
> 
> >
> 
> >     from("direct:start-profile-pics")
> 
> >
> 
> >                                     .to("sql:select * from cwd_user
> where
> 
> > active='T' and directory_id=76644354?dataSource=confDB")
> 
> >
> 
> >                                     .split(body())
> 
> >
> 
> >                                     // TODO: setHeader("uid",
> 
> > bodyAsType(Map.class).get("username"));
> 
> >
> 
> >                                     .process(new Processor() {
> 
> >
> 
> >
> 
> >                                                    @Override
> 
> >
> 
> >                                                    public void
> 
> > process(Exchange exchange)
> 
> >
> 
> >
> 
> >        throws Exception {
> 
> >
> 
> >
> Message
> 
> > msg = exchange.getIn();
> 
> >
> 
> >
> 
> >  msg.setHeader("uid", msg.getBody(Map.class)
> 
> >
> 
> >
> 
> >                       .get("user_name"));
> 
> >
> 
> >
> 
> >  msg.setHeader(Exchange.HTTP_PATH, "avatar/" + msg.getBody(Map.class)
> 
> >
> 
> >
> 
> >                       .get("user_name"));
> 
> >
> 
> >
> 
> >                                                    }
> 
> >
> 
> >                                     })
> 
> >
> 
> >                                     .setBody(constant(null))
> 
> >
> 
> >                                     .to("http4://
> 
> > unity-uat.apps.csintra.net/")
> 
> >
> 
> >                                     .bean(applicationContext
> 
> >
> 
> >
> 
> >  .getBean("confluenceClient"),
> 
> >
> 
> >
> 
> >  "updateProfilePic");
> 
> >
> 
> 
> 
> 
> 
> 
> 
> --
> 
> Charles Moulliard
> 
> Apache Committer / Architect @RedHat
> 
> Twitter : @cmoulliard | Blog :  http://cmoulliard.github.io


Reply via email to