On Mon, May 11, 2009 at 8:27 AM, Willem Jiang <willem.ji...@gmail.com> wrote: > Hi Claus > > I updated the unit tests of SplitterPOJOTest and added some comments for > this feature, I think the wiki will be updated when the confluence > exports the static page. Willem we need 2 samples for POJO
One for a regular POJO that has 100% no dependencies on Camel API at all. Just like the one we had before. Just returning a List of String And a new one for returning a List of org.apache.camel.Message objects so you can provide your own headers per. message. And we must remember to write that this requires Camel 1.6.1/2.0. > > Willem > > Claus Ibsen wrote: >> On Mon, May 11, 2009 at 2:34 AM, Willem Jiang <willem.ji...@gmail.com> wrote: >>> How about return a List<Message> from the POJO bean method? >>> Then we can check the List Object in the Splitter's >>> createProcessorExchangePairsList() and >>> createProcessorExchangePairsIterable(), if the object in the list is >>> Message, we can set the Exchange's InMessage >>> with the Message object that we get from the list. >> Willem >> >> A very good idea. Glad you thought of this solution. Very concise and clean. >> And leveraging the existing Camel API. >> >> Do you mind updating the Splitter EIP wiki page with this new feature? >> >> >>> Willem >>> >>> Claus Ibsen wrote: >>>> On Fri, May 8, 2009 at 3:28 PM, rohitbrai <rohitb...@gmail.com> wrote: >>>>> Can't I achieve something similar using bean in the splitter as explained >>>>> in >>>>> Using a "Pojo to do the splitting" on >>>>> http://camel.apache.org/splitter.html >>>> Yeah I have thought of that one too, but I cannot see how you should >>>> be able to alter the message for each of the individual splitted new >>>> message. >>>> As we only return the body as result. >>>> >>>> And in java we cannot return 2 types, 1 for the body, 1 for the headers >>>> >>>> We might be able to introduce some convention and let you return some >>>> object holder the body and the header. >>>> List<BodyAndHeaderHolder> >>>> >>>> But then I might get a bit ugly? >>>> >>>> Any thoughts? >>>> >>>> >>>> >>>> >>>>> I was trying to understand the code, but am wondering how will I get back >>>>> the whole message. The example there sends a arraylist of string, but I >>>>> would want messages with the existing headers intact. >>>>> >>>>> Another solution I am thinking of is making the message a object and not a >>>>> string and passing the to address string as part of it. >>>> Yeah that works perfect. Or you can temporary return the To header in >>>> the 1st line of the body response >>>> and then fix it in a POJO afterwards >>>> >>>> from(x).split(MySplitterBean).bean(MyFixUpBean.class).to(z) >>>> >>>> And in your MyFixUpBean >>>> you read the first line of the Body and set it back as To header >>>> and remove it from the body. >>>> >>>> >>>> >>>>> I am making a reliable mass mailing solution with spam control based on >>>>> ActiveMQ and camel, is it the right approach? >>>> Yeah I see why not. However I have not personally build spam >>>> protection software. >>>> >>>> >>>>> >>>>> Claus Ibsen-2 wrote: >>>>>> On Fri, May 8, 2009 at 2:58 PM, rohitbrai <rohitb...@gmail.com> wrote: >>>>>>> I have a message which has - >>>>>>> Header >>>>>>> "To" - "a...@sdf.com,x...@dsfsdf.com,s...@serr.com" >>>>>>> Body >>>>>>> Hello >>>>>>> >>>>>>> onthis message I tried - >>>>>>> >>>>>>> from("jms:queue:new.test1").splitter(header("To").tokenize(",")).to("jms:queue:new.test2"); >>>>>>> >>>>>>> and I was expecting 3 entries on test2 queue >>>>>>> Header >>>>>>> "To" - "a...@sdf.com" >>>>>>> Body >>>>>>> Hello >>>>>>> >>>>>>> Header >>>>>>> "To" - "x...@dsfsdf.com" >>>>>>> Body >>>>>>> Hello >>>>>>> >>>>>>> Header >>>>>>> "To" - "s...@serr.com" >>>>>>> Body >>>>>>> Hello >>>>>>> >>>>>>> >>>>>>> But instead I got 3 messages on test2 queue like >>>>>>> Header >>>>>>> "To" - "a...@sdf.com,x...@dsfsdf.com,s...@serr.com" >>>>>>> Body >>>>>>> ...@sdf.com >>>>>>> >>>>>>> Header >>>>>>> "To" - "a...@sdf.com,x...@dsfsdf.com,s...@serr.com" >>>>>>> Body >>>>>>> ...@dsfsdf.com >>>>>>> >>>>>>> Header >>>>>>> "To" - "a...@sdf.com,x...@dsfsdf.com,s...@serr.com" >>>>>>> Body >>>>>>> s...@serr.com >>>>>>> >>>>>>> So I guess, I am doing it and even understanding it wrong. >>>>>>> >>>>>>> Can anyone here guide me how to handle this situation. >>>>>> Hi >>>>>> >>>>>> Welcome on the Camel ride. >>>>>> >>>>>> The EIP patterns is about message routing where the message relies in >>>>>> the BODY payload. >>>>>> The header is just meta data about the message. >>>>>> >>>>>> So the splitter operates on splitting the BODY and not the headers, >>>>>> hence why you get the email address in the body. >>>>>> >>>>>> So by default there EIP patterns dont really support your use case out >>>>>> of the box, unless you do some manual fixup in Java code. >>>>>> >>>>>> You could use a POJO or the like where you create new messages to send >>>>>> along. >>>>>> >>>>>> private ProducerTemplate producer >>>>>> >>>>>> public void sendSplittedMessages(String body, @Headers Map headers) { >>>>>> // loop the headers for each email adr >>>>>> for (...) { >>>>>> String email = ... >>>>>> producer.sendBodyAndHeader("jms:queue:new:test02", body, "To", >>>>>> email); >>>>>> } >>>>>> >>>>>> And then have a route that is like >>>>>> from("jms:queue:new.test1").bean(MySplitMessageClass.class, >>>>>> "sendSplittedMessages"); >>>>>> >>>>>> where we route to our bean that, will do the "split" manually and send >>>>>> a new message to the JMS queue. >>>>>> >>>>>> >>>>>>> Thanks and Regards, >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> View this message in context: >>>>>>> http://www.nabble.com/Split-using-tokenize-on-header-tp23445496p23445496.html >>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com. >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> Claus Ibsen >>>>>> Apache Camel Committer >>>>>> >>>>>> Open Source Integration: http://fusesource.com >>>>>> Blog: http://davsclaus.blogspot.com/ >>>>>> Twitter: http://twitter.com/davsclaus >>>>>> Apache Camel Reference Card: >>>>>> http://refcardz.dzone.com/refcardz/enterprise-integration >>>>>> Interview with me: >>>>>> http://architects.dzone.com/articles/interview-claus-ibsen-about?mz=7893-progress >>>>>> >>>>>> >>>>> -- >>>>> View this message in context: >>>>> http://www.nabble.com/Split-using-tokenize-on-header-tp23445496p23445999.html >>>>> Sent from the Camel - Users mailing list archive at Nabble.com. >>>>> >>>>> >>>> >>>> >>> >> >> >> > > -- Claus Ibsen Apache Camel Committer Open Source Integration: http://fusesource.com Blog: http://davsclaus.blogspot.com/ Twitter: http://twitter.com/davsclaus Apache Camel Reference Card: http://refcardz.dzone.com/refcardz/enterprise-integration Interview with me: http://architects.dzone.com/articles/interview-claus-ibsen-about?mz=7893-progress