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");
}
};
}
}