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

Reply via email to