Hi Raul
 upgraded to 2.9.2  (and set all headers on the In message)
all works now!

thx a lot for ur help!!!! finally i see the light after 5hrs of failures :)

w/kindest regards
 marco

On Sat, Sep 22, 2012 at 7:20 PM, Raul Kripalani <[email protected]> wrote:

> Can you try with the expression ${in.header.jsonHeader} == 'foo'?
>
> The notation you are using is available as of Camel 2.9.2 as I mentioned in
> the other thread.
>
> Thanks,
> Raúl.
>
> Sent from a mobile device
> On Sep 22, 2012 7:14 PM, "Marco Mistroni" <[email protected]> wrote:
>
> > Hello Raul
> >    i understand  , but in my <choice> i am routing basing on
> headers..... i
> > am not really  concerned with
> > body, only with headers.
> > I have now modified my processor
> >
> >
> >         exchange.getIn().setHeader("jsonHeader", action);
> >         exchange.getIn().setHeader("jsonContent", jsonData);
> >         exchange.getIn().setHeader("action", action);
> >
> >
> > still it's evading the jsonRouting for some reason
> >
> > if instead going to the <choice> route i make it go straight to
> >
> > <camel:route id="Jetty_Sample">
> >              <camel:from uri="jetty:http://localhost:8888/myJettyService
> "
> >                <!-- camel:marshal ref="jsonFormatter" /-->
> >              <camel:process ref="myJettyService" />
> >              <camel:to uri="seda:json" />
> >   </camel:route>
> >
> > will try to debug more...
> >
> > thanks for help
> >
> > w/kindest regards
> >  marco
> >
> >
> > On Sat, Sep 22, 2012 at 6:25 PM, Raul Kripalani <[email protected]>
> wrote:
> >
> > > The processor is not transferring the original IN message body to the
> OUT
> > > message body, so the result is a Message with headers but with a null
> > body.
> > >
> > > Take a look at [1] and you should be fine.
> > >
> > > I suggest you set the headers in the IN message, and Camel will take
> care
> > > of reusing the modified IN message for the next processor along.
> > >
> > > [1]
> > http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html
> > >
> > > Hope that helps,
> > > Raúl.
> > > On Sep 22, 2012 6:17 PM, "Marco Mistroni" <[email protected]> wrote:
> > >
> > > > Hi all
> > > >   i have a camel app in which i am using a jetty route to process
> json
> > > > messages. those messages are then routed to the proper route to
> > produce a
> > > > response.
> > > > Here's the configuration
> > > >
> > > > <camel:route id="Jetty_Sample">
> > > >             <camel:from uri="jetty:
> > http://localhost:8888/myJettyService";
> > > > />
> > > >             <!-- camel:marshal ref="jsonFormatter" /-->
> > > >             <camel:process ref="myJettyService" />
> > > >             <camel:to uri="seda:jsonRouting" />
> > > >
> > > >         </camel:route>
> > > >
> > > >         <camel:route id="jettyRouting">
> > > >             <camel:from uri="seda:jsonRouting" />
> > > >
> > > >             <camel:choice>
> > > >                 <camel:when>
> > > >                     <camel:simple>${in.headers[action]} ==
> > > > 'shareManagement'
> > > >                     </camel:simple>
> > > >                     <camel:to uri="seda:jsonShares" />
> > > >                 </camel:when>
> > > >                 ........
> > > >                 <camel:otherwise>
> > > >                     <camel:to uri="seda:json" />
> > > >                 </camel:otherwise>
> > > >             </camel:choice>
> > > >
> > > >         </camel:route>
> > > >
> > > >
> > > >         <camel:route>
> > > >             <camel:from uri="seda:json" />
> > > >             <camel:process ref="myJettyService2" />
> > > >             <camel:marshal ref="jsonFormatter" />
> > > >         </camel:route>
> > > >
> > > > There's a Processor which gets the input message, set few headers and
> > the
> > > > pass the message through (myJettyService), whose code i sbelow
> > > >
> > > >     @Override
> > > >     public void process(Exchange exchange) throws Exception {
> > > >         // TODO Auto-generated method stub
> > > >
> > > >         ObjectMapper mapper = new ObjectMapper();
> > > >
> > > >         String body = exchange.getIn().getBody(String.class);
> > > >
> > > >         LOGGER.info("REceived:" + body);
> > > >         Map<String, Object> jsonData = mapper.readValue(body,
> > Map.class);
> > > >         LOGGER.info("Setting new body to:" + jsonData);
> > > >
> > > >         String action = (String) jsonData.get("action");
> > > >
> > > >         LOGGER.info("Setting jsonHeader to:" + action);
> > > >
> > > >         exchange.getOut().setHeader("jsonHeader", action);
> > > >         exchange.getOut().setHeader("jsonContent", jsonData);
> > > >         exchange.getOut().setHeader("action", action);
> > > >
> > > >         LOGGER.info("Out of Processor" + action);
> > > >
> > > >
> > > >     }
> > > >
> > > > Now, as this processor sets the header 'action', then the <choice>
> > > > component of the destination route (jsonRouting) should pick the
> header
> > > up
> > > > and forward the message to the appropriate route.
> > > > If it cannot find hte header, the  <otherwise>  choice would be
> > selected
> > > > and the message should end up somewhere (seda:json, route which
> > contains
> > > a
> > > > processor)
> > > >
> > > > Now , for some reason . after hte above processor is invoked the
> > message
> > > > end up nowhere (apparently, the message never arrives at the
> > > <camel:choice>
> > > > component).
> > > >
> > > > I have tried to put a <processor> after  <camel:from
> > > uri="seda:jsonRouting"
> > > > />, and i can see the  new headers (jsonHeader, jsonContent and
> action
> > > > being populated)
> > > >
> > > > If i skip the routing, replacing
> > > > <camel:route id="Jetty_Sample">
> > > >             <camel:from uri="jetty:
> > http://localhost:8888/myJettyService";
> > > > />
> > > >             <!-- camel:marshal ref="jsonFormatter" /-->
> > > >             <camel:process ref="myJettyService" />
> > > >             <camel:to uri="seda:jsonRouting" />
> > > >
> > > >         </camel:route>
> > > > with
> > > > <camel:route id="Jetty_Sample">
> > > >             <camel:from uri="jetty:
> > http://localhost:8888/myJettyService";
> > > > />
> > > >             <!-- camel:marshal ref="jsonFormatter" /-->
> > > >             <camel:process ref="myJettyService" />
> > > >             <camel:to uri="seda:json" />
> > > >
> > > >         </camel:route>
> > > >
> > > > the message gets processed correctly.
> > > >
> > > > I cannnot understand what's going on..... if none of the camel:choice
> > > > conditions are satisified the message should be routed to the
> > >  <otherwise>
> > > > route... But it does not
> > > >
> > > > Is it because i am using a processor (myJettyService) in the Jetty
> > route?
> > > > does that screw up things because it is processing the message?
> > > >
> > > > thanks in advance and regards
> > > >  marco
> > > >
> > >
> >
>

Reply via email to