| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.camel.processor; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.apache.camel.Body; |
| import org.apache.camel.ContextTestSupport; |
| import org.apache.camel.Exchange; |
| import org.apache.camel.Header; |
| import org.apache.camel.Message; |
| import org.apache.camel.builder.RouteBuilder; |
| import org.apache.camel.component.mock.MockEndpoint; |
| import org.apache.camel.impl.DefaultMessage; |
| import org.apache.camel.impl.JndiRegistry; |
| |
| /** |
| * @version |
| */ |
| public class SplitterPojoTest extends ContextTestSupport { |
| |
| @Override |
| protected JndiRegistry createRegistry() throws Exception { |
| JndiRegistry jndi = super.createRegistry(); |
| jndi.bind("mySplitterBean", new MySplitterBean()); |
| return jndi; |
| } |
| |
| public void testSplitBodyWithPojoBean() throws Exception { |
| MockEndpoint mock = getMockEndpoint("mock:result"); |
| mock.reset(); |
| mock.expectedBodiesReceived("James", "Jonathan", "Hadrian", "Claus", "Willem"); |
| |
| template.sendBody("direct:body", "James,Jonathan,Hadrian,Claus,Willem"); |
| |
| assertMockEndpointsSatisfied(); |
| } |
| |
| public void testSplitMessageWithPojoBean() throws Exception { |
| String users[] = {"James", "Jonathan", "Hadrian", "Claus", "Willem"}; |
| MockEndpoint mock = getMockEndpoint("mock:result"); |
| mock.reset(); |
| mock.expectedMessageCount(5); |
| template.sendBodyAndHeader("direct:message", "Test Body Message", "user", "James,Jonathan,Hadrian,Claus,Willem"); |
| int i = 0; |
| for (Exchange exchange : mock.getExchanges()) { |
| assertEquals("We got a wrong body ", "Test Body Message", exchange.getIn().getBody()); |
| assertEquals("We got a wrong header ", users[i], exchange.getIn().getHeader("user")); |
| i++; |
| } |
| } |
| |
| protected RouteBuilder createRouteBuilder() { |
| return new RouteBuilder() { |
| public void configure() { |
| // START SNIPPET: e1 |
| from("direct:body") |
| // here we use a POJO bean mySplitterBean to do the split of the payload |
| .split().method("mySplitterBean", "splitBody") |
| .to("mock:result"); |
| from("direct:message") |
| // here we use a POJO bean mySplitterBean to do the split of the message |
| // with a certain header value |
| .split().method("mySplitterBean", "splitMessage") |
| .to("mock:result"); |
| // END SNIPPET: e1 |
| |
| |
| } |
| }; |
| } |
| |
| // START SNIPPET: e2 |
| public class MySplitterBean { |
| |
| /** |
| * The split body method returns something that is iteratable such as a java.util.List. |
| * |
| * @param body the payload of the incoming message |
| * @return a list containing each part splitted |
| */ |
| public List<String> splitBody(String body) { |
| // since this is based on an unit test you can of cause |
| // use different logic for splitting as Camel have out |
| // of the box support for splitting a String based on comma |
| // but this is for show and tell, since this is java code |
| // you have the full power how you like to split your messages |
| List<String> answer = new ArrayList<String>(); |
| String[] parts = body.split(","); |
| for (String part : parts) { |
| answer.add(part); |
| } |
| return answer; |
| } |
| |
| /** |
| * The split message method returns something that is iteratable such as a java.util.List. |
| * |
| * @param header the header of the incoming message with the name user |
| * @param body the payload of the incoming message |
| * @return a list containing each part splitted |
| */ |
| public List<Message> splitMessage(@Header(value = "user") String header, @Body String body) { |
| // we can leverage the Parameter Binding Annotations |
| // http://camel.apache.org/parameter-binding-annotations.html |
| // to access the message header and body at same time, |
| // then create the message that we want, splitter will |
| // take care rest of them. |
| // *NOTE* this feature requires Camel version >= 1.6.1 |
| List<Message> answer = new ArrayList<Message>(); |
| String[] parts = header.split(","); |
| for (String part : parts) { |
| DefaultMessage message = new DefaultMessage(); |
| message.setHeader("user", part); |
| message.setBody(body); |
| answer.add(message); |
| } |
| return answer; |
| } |
| } |
| // END SNIPPET: e2 |
| |
| } |