Oh, I haven't seen that you want to have a common root element <Route>.
After splitting the xml you could simply add that element:

Jan

        @Test
        public void split() throws InterruptedException, IOException {
                mock.expectedMessageCount(2);
                mock.expectedMessagesMatches(
                    or(
                                bodyAs(String.class).contains("42"),
                                bodyAs(String.class).contains("Jan")
                        ),
                        bodyAs(String.class).contains("<Route>")
                );
            ...

        @Override
        protected RouteBuilder createRouteBuilder() throws Exception {
                return new RouteBuilder() {
                        @Override
                        public void configure() throws Exception {
                                from("direct:split")
                                        .split(xpath("/Route/*"))
        
.setBody(simple("<Route>${body}</Route>"))
                                        .to("mock:end");
                        }
                };
        }

> -----Ursprüngliche Nachricht-----
> Von: Jan Matèrne (jhm) [mailto:apa...@materne.de]
> Gesendet: Dienstag, 19. November 2013 17:50
> An: users@camel.apache.org
> Betreff: AW: Splitting up XML into 2 XMLs
> 
> The trick is using the right xpath. Here use a wildcard "/Route/*".
> 
> 
> Jan
> 
> 
> package de.materne.camel.sandbox.split;
> 
> import static org.apache.camel.builder.PredicateBuilder.or;
> 
> import java.io.IOException;
> 
> import org.apache.camel.EndpointInject;
> import org.apache.camel.builder.RouteBuilder;
> import org.apache.camel.component.mock.MockEndpoint;
> import org.apache.camel.test.junit4.CamelTestSupport;
> import org.junit.Test;
> 
> public class SplitTest extends CamelTestSupport {
> 
>       @EndpointInject(uri="mock:end")
>       MockEndpoint mock;
> 
>       @Test
>       public void split() throws InterruptedException, IOException {
>               mock.expectedMessageCount(2);
>               mock.expectedMessagesMatches(
>                   or(
>                               bodyAs(String.class).contains("42"),
>                               bodyAs(String.class).contains("Jan")
>                       )
>               );
>               String xml = createXml();
>               template.sendBody("direct:split", xml);
>               mock.assertIsSatisfied();
>       }
> 
>       private String createXml() {
>               StringBuilder xml = new StringBuilder();
>               xml.append("<Route>");
>               xml.append("  <Account><number>42</number></Account>");
>               xml.append("  <Person><name>Jan</name></Person>");
>               xml.append("</Route>");
>               return xml.toString();
>       }
> 
>       @Override
>       protected RouteBuilder createRouteBuilder() throws Exception {
>               return new RouteBuilder() {
>                       @Override
>                       public void configure() throws Exception {
>                               from("direct:split")
>                                       .split(xpath("/Route/*"))
>                                       .to("mock:end");
>                       }
>               };
>       }
> }


Reply via email to