camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jfaath <jfa...@apache.org>
Subject Re: error-handling advice with queues
Date Thu, 25 Mar 2010 15:39:00 GMT

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 <jfaath@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 <jfaath@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 <jfaath@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.


Mime
View raw message