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

Reply via email to