Yeah, I added a new POJO method splitMessage() to return a List of Message, and the original "split" method is renamed to be "splitBody" method.
You can find the change here[1]. [1] http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java?rev=773446&r1=773445&r2=773446&view=diff Willem Claus Ibsen wrote: > 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 >>>>>>>> a...@sdf.com >>>>>>>> >>>>>>>> Header >>>>>>>> "To" - "a...@sdf.com,x...@dsfsdf.com,s...@serr.com" >>>>>>>> Body >>>>>>>> x...@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. >>>>>> >>>>>> >>>>> >>> >>> >> > > >