On Mon, May 11, 2009 at 8:58 AM, Willem Jiang <willem.ji...@gmail.com> wrote: > 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 Ah looks fine as both methods is in the SNIPPET tag. +1
> > > 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 >>>>>>>>> ...@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