I would think something like .beanRef("processor", "process") .split().method("mySplitterBean", "splitMessage") .choice .when(simple("${in.header.error} != null").to("mock:invalid") .otherwise().to("mock:valid");
Your mySplitterBean would just create a 2 different messages, one with the error header and one without. Checkout the example on the splitter page for an example. In the case there is no error, then your splitter should just return 1 message and you should be fine. Hope that helps. Allen On Thu, Mar 25, 2010 at 8:39 AM, jfaath <jfa...@apache.org> wrote: > > The splitter stuff doesn't seem to be useful for my issue, but I can see > now > in the CBR page how to do logic in the route based on the header. In fact, > I was using the CBR on my route already. I'm still not clear on how to > actually set the header to the "error object in java code. > > Here is the gist of my actual route. Based on the XML content of the > message coming in, I route to a different java processor. However, this > error method I want to use is common to all processors. Can you offer a > quick suggestion as to how I would do it using the route below? > > from("jetty:http://0.0.0.0:8282/process").convertBodyTo(String.class) > .inOnly("jms:queue:data.inbound") > .choice > .when().xpath("/readingsType1") > .unmarshal(jaxbDf) > .beanRef("dataProcessor1", "process") > .when().xpath("/readingsType2") > .unmarshal(jaxbDf) > .beanRef("dataProcessor2", "process") > .otherwise().to("mock:invalid") > > > Allen Lau-2 wrote: > > > > Look at these pages for samples. > > > > http://camel.apache.org/splitter.html > > http://camel.apache.org/content-based-router.html > > > > I would most likely create a POJO to split the message up and then use > the > > content base router to > > route the message. > > > > On Wed, Mar 24, 2010 at 9:04 AM, jfaath <jfa...@apache.org> wrote: > > > >> > >> I'll give this a shot. Can you give me a quick example or point me to a > >> sample that does something similar (ex. setting a header in code, > >> performing > >> conditional logic in a route based on a header). > >> > >> -JF > >> > >> > >> Allen Lau-2 wrote: > >> > > >> > I could be wrong here, but you could easily stick the "error" object > as > >> > part > >> > of the message header. As long as your components > >> > understand that header, you can easily retrieve it and only send that > >> > portion to an error queue. > >> > > >> > The default message headers in Camel is defined as > >> > > >> > Map<String, Object> headers; > >> > > >> > so basically you can stuff whatever you want into it. > >> > > >> > > >> > On Tue, Mar 23, 2010 at 4:02 PM, jfaath <jfa...@apache.org> wrote: > >> > > >> >> > >> >> I'm not sure that would work. As I stated in my original post, I > >> don't > >> >> want > >> >> to send the entire message to the error queue, just the portion that > >> was > >> >> invalid. So, if my original message has, say, 11 readings, and 3 of > >> them > >> >> are bad, I only want to send the 3 bad ones to the error queue. > >> During > >> >> processing, I stick the bad readings into an "error object". It's > the > >> >> contents of this object (that I can easily marshal to XML) that I > want > >> to > >> >> send to the queue. > >> >> > >> >> FYI, here is a simplified version of my route: > >> >> > >> >> > >> >> from("jetty:http://0.0.0.0:8282/process > ").convertBodyTo(String.class) > >> >> .inOnly("jms:queue:data.inbound") > >> >> .unmarshal(jaxbDf) > >> >> .beanRef("dataProcessor", "process") > >> >> > >> >> > >> >> Allen Lau-2 wrote: > >> >> > > >> >> > How about just setting a header when you are done processing and > >> there > >> >> is > >> >> > an > >> >> > error? > >> >> > > >> >> > Then in your route, just send any message to the error queue when > >> the > >> >> > header > >> >> > is detected. > >> >> > > >> >> > On Tue, Mar 23, 2010 at 11:57 AM, jfaath <jfa...@apache.org> > wrote: > >> >> > > >> >> >> > >> >> >> I'm looking for some advice on how to deal with errors during a > >> large > >> >> >> processing task. It seems like it should be simple but I'm having > >> >> >> trouble > >> >> >> figuring out what to do. > >> >> >> > >> >> >> I have an HTTP endpoint that receives XML messages then sticks > them > >> in > >> >> a > >> >> >> processing queue. From the queue, they get unmarshalled into JAXB > >> >> >> objects > >> >> >> and then processed by a Java class. Now, the messages consist or > a > >> >> large > >> >> >> number of readings. Some may be good, some may be bad. The good > >> ones > >> >> >> get > >> >> >> processed, but the bad ones are stuffed into a JAXB object. > >> >> >> > >> >> >> When the processing is done, I'd like to throw this object on an > >> error > >> >> >> queue > >> >> >> (or, marshal then throw on the queue). But I can't figure out how > >> to > >> >> do > >> >> >> this the best way. The processing class should exit gracefully so > >> I > >> >> >> don't > >> >> >> want to throw a final exception. > >> >> >> > >> >> >> What might be the best way to do this? Can I add the error object > >> to > >> >> a > >> >> >> queue programmatically within the processor? Can the processor > >> return > >> >> >> the > >> >> >> error object so I can throw it on the queue via the route? Is > >> there > >> a > >> >> >> nice > >> >> >> and easy way to do this? > >> >> >> > >> >> >> Thanks, > >> >> >> > >> >> >> JF > >> >> >> -- > >> >> >> View this message in context: > >> >> >> > >> >> > >> > http://old.nabble.com/error-handling-advice-with-queues-tp28005566p28005566.html > >> >> >> Sent from the Camel - Users mailing list archive at Nabble.com. > >> >> >> > >> >> >> > >> >> > > >> >> > > >> >> > >> >> -- > >> >> View this message in context: > >> >> > >> > http://old.nabble.com/error-handling-advice-with-queues-tp28005566p28008395.html > >> >> Sent from the Camel - Users mailing list archive at Nabble.com. > >> >> > >> >> > >> > > >> > > >> > >> -- > >> View this message in context: > >> > http://old.nabble.com/error-handling-advice-with-queues-tp28005566p28016879.html > >> Sent from the Camel - Users mailing list archive at Nabble.com. > >> > >> > > > > > > -- > View this message in context: > http://old.nabble.com/error-handling-advice-with-queues-tp28005566p28030652.html > Sent from the Camel - Users mailing list archive at Nabble.com. > >