How to use both tokenize and simple in Spring DSL (XML route config) for Apache Camel in split?



I’d like to repoduce with XML the expression from Java DSL like this:

from("direct:a")
    .split(body(String.class).tokenize("n"))
        .to("direct:b");

When I try to set up , consisting of two elements, and like that:

<split><tokenize token="#@#"><simple>${bodyAs(java.lang.String)} not contains ''</simple></tokenize></split>

Or like that:

<split><simple>${bodyAs(java.lang.String)} not contains ''</simple><tokenize token="#@#"></tokenize><split>

it doesn’t allow to validate the XML with the scheme:

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 488; cvc-complex-type.2.2: Element 'tokenize' must have no element [children], and the value must be valid.

and

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 475; cvc-complex-type.2.4.a: Invalid content was found starting with element 'tokenize'. One of '{"http://camel.apache.org/schema/spring":aggregate, "http://camel.apache.org/schema/spring":bean, "http://camel.apache.org/schema/spring":doCatch, "http://camel.apache.org/schema/spring":when, "http://camel.apache.org/schema/spring":choice, "http://camel.apache.org/schema/spring":otherwise, "http://camel.apache.org/schema/spring":circuitBreaker, "http://camel.apache.org/schema/spring":claimCheck, "http://camel.apache.org/schema/spring":convertBodyTo, "http://camel.apache.org/schema/spring":delay, "http://camel.apache.org/schema/spring":dynamicRouter, "http://camel.apache.org/schema/spring":enrich, "http://camel.apache.org/schema/spring":filter, "http://camel.apache.org/schema/spring":doFinally, "http://camel.apache.org/schema/spring":idempotentConsumer, "http://camel.apache.org/schema/spring":inOnly, "http://camel.apache.org/schema/spring":inOut, "http://camel.apache.org/schema/spring":intercept, "http://camel.apache.org/schema/spring":interceptFrom, "http://camel.apache.org/schema/spring":interceptSendToEndpoint, "http://camel.apache.org/schema/spring":loadBalance, "http://camel.apache.org/schema/spring":log, "http://camel.apache.org/schema/spring":loop, "http://camel.apache.org/schema/spring":marshal, "http://camel.apache.org/schema/spring":multicast, "http://camel.apache.org/schema/spring":onCompletion, "http://camel.apache.org/schema/spring":onException, "http://camel.apache.org/schema/spring":onFallback, "http://camel.apache.org/schema/spring":pipeline, "http://camel.apache.org/schema/spring":policy, "http://camel.apache.org/schema/spring":pollEnrich, "http://camel.apache.org/schema/spring":process, "http://camel.apache.org/schema/spring":recipientList, "http://camel.apache.org/schema/spring":removeHeader, "http://camel.apache.org/schema/spring":removeHeaders, "http://camel.apache.org/schema/spring":removeProperties, "http://camel.apache.org/schema/spring":removeProperty, "http://camel.apache.org/schema/spring":resequence, "http://camel.apache.org/schema/spring":rollback, "http://camel.apache.org/schema/spring":route, "http://camel.apache.org/schema/spring":routingSlip, "http://camel.apache.org/schema/spring":saga, "http://camel.apache.org/schema/spring":sample, "http://camel.apache.org/schema/spring":script, "http://camel.apache.org/schema/spring":setBody, "http://camel.apache.org/schema/spring":setExchangePattern, "http://camel.apache.org/schema/spring":setHeader, "http://camel.apache.org/schema/spring":setProperty, "http://camel.apache.org/schema/spring":sort, "http://camel.apache.org/schema/spring":split, "http://camel.apache.org/schema/spring":step, "http://camel.apache.org/schema/spring":stop, "http://camel.apache.org/schema/spring":threads, "http://camel.apache.org/schema/spring":throttle, "http://camel.apache.org/schema/spring":throwException, "http://camel.apache.org/schema/spring":to, "http://camel.apache.org/schema/spring":toD, "http://camel.apache.org/schema/spring":transacted, "http://camel.apache.org/schema/spring":transform, "http://camel.apache.org/schema/spring":doTry, "http://camel.apache.org/schema/spring":unmarshal, "http://camel.apache.org/schema/spring":validate, "http://camel.apache.org/schema/spring":whenSkipSendToEndpoint, "http://camel.apache.org/schema/spring":wireTap, "http://camel.apache.org/schema/spring":serviceCall}' is expected.

So, it is impossible to put simple and tokenize together in XML, so how to do that?

Answer

Surprisingly, it worked for

<split><tokenize token="#@#">${bodyAs(java.lang.String)} contains '#@#'</tokenize></split>

i.e. <tokenize/> can have a body that is interpreted the same way as <simple/>



Source: stackoverflow