spltter EIP不能使用简单的语句

时间:2018-04-13 16:40:03

标签: split apache-camel

我不知道是不是我或这是一个错误。但是,我已尝试使用$ {body.skip(1)}和拆分EIP进行多次迭代,但它不起作用。它继续抛出异常从元素'simple'开始发现无效内容。其中之一......

测试xml代码

    <route 
        id="core.predix.consumer.route"
        autoStartup="true" >
        <from id="predixConsumer" ref="predixConsumer" />   
        <convertBodyTo type="java.lang.String" />

    <split streaming="true" strategyRef="TSAggregationStrategy"> <!-- stopOnException="true" streaming="true" > -->
    <simple>${body.skip(1)}</simple>
    <tokenize token="\n"/>

    <log message="Split line ${body}"/>         
    </split>
    <log message="after split body: ${body}" />
    <to uri="{{fileDestinationEndpoint}}" />
</route>

抛出 引起:org.xml.sax.SAXParseException:cvc-complex-type.2.4.a:找到以元素'simple'开头的无效内容。其中一个'{“http://camel.apache.org/schema/blueprint”:onException,“http://camel.apache.org/schema/blueprint”:when,“http://camel.apache.org/schema/blueprint”:onCompletion,

2 个答案:

答案 0 :(得分:2)

你不能同时拥有

<simple>${body.skip(1)}</simple>
<tokenize token="\n"/>

作为拆分器表达式,如果要跳过第一行,则可以使用标记器的skipFirst选项

<tokenize token="\n" skipFirst="true"/>

答案 1 :(得分:0)

谢谢克劳斯,我会试一试。我有一个有效的解决方案,我也愿意分享。再次谢谢你。测试代码如下。交换getProperty CamelSplitIndex在这里按预期工作。

@Override
public void process(Exchange exchange) throws Exception, 
TimeStampCannotBeParsedException {

    log.info("Entering TimeStamp Enrichment Processor...");

    String rec = exchange.getIn().getBody(String.class);
    String[] sa = rec.split(",");
    log.info("TimeStamp to be enriched: " + sa[0]);

    if ( (Integer.valueOf((int)exchange.getProperty("CamelSplitIndex"))) > 0 ) {

        DateUtil fromPattern = new DateUtil();
        final String patternOfDateToConvert = fromPattern.dateFormatPattern(sa[0].trim());
        log.info("Pattern Of Date to Convert: " + patternOfDateToConvert );         
        try {
            Date date = new SimpleDateFormat(patternOfDateToConvert).parse(sa[0].trim());
            final String todate = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a").format(date);
            log.info("Converted Date: " + todate);
            sa[0] = todate;

        } catch (ParseException e) {
            log.error(e.getMessage());
            throw new TimeStampCannotBeParsedException("Timestamp Cannot be Converted to Date. Invalid Format!");
        }

        String str = Arrays.toString(sa);
        String record = str.replaceAll("[\\[\\]]", "");
        log.info("New Record: " + record);
        rec = record + "\r\n";
    } else {
        rec = rec + "\r\n";
    }
    log.info("out Body: " + rec);
    exchange.getIn().setBody(rec);
    log.info("Leaving TimeStamp Enrichment Processor...");

}