Apache Camel splitter返回字符串

时间:2015-09-04 14:39:26

标签: java apache-camel jbossfuse apache-servicemix

我正试图分裂一个' @'分隔字符串并通过相同的路径处理每个令牌。

驼context.xml中:

<split streaming="true">
  <tokenize token="@"/>
  <to uri="validateResubmitTransactionIdProcessor"/>
</split>

以下是处理器代码段:

epublic class ValidateResubmitTransactionIdProcessor implements Processor {
public void process(Exchange exchng) throws Exception {
    Object[] args =  exchng.getIn().getBody(Object[].class);
}}

我得到以下例外:

  

eCaused by:org.apache.camel.InvalidPayloadException:没有可用的类型:org.apache.camel.Exchange但有值:11484类型:java.lang.String on:消息:11484。引起:否类型转换器可用于从类型:java.lang.String转换为所需类型:org.apache.camel.Exchange,值为11484.Exchange [消息:11484]。引起:[org.apache.camel.NoTypeConversionAvailableException - 没有类型转换器可用于从类型:java.lang.String转换为所需类型:org.apache.camel.Exchange,其值为11484]       at org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:101)       在org.apache.camel.builder.ExpressionBuilder $ 35.evaluate(ExpressionBuilder.java:847)       引起:org.apache.camel.NoTypeConversionAvailableException:没有类型转换器可用于从类型:java.lang.String转换为所需类型:org.apache.camel.Exchange,其值为11484       at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:169)       在org.apache.camel.core.osgi.OsgiTypeConverter.mandatoryConvertTo(OsgiTypeConverter.java:110)       在org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:99)nter

我不确定我是否正确使用分离器。另外,知道如何将java.lang.String转换为Exchange。这似乎不受骆驼的支持。

1 个答案:

答案 0 :(得分:1)

Splitter EIP创建了一种循环,并为每个令牌调用您的处理器。因此交换的主体包含一个简单的字符串,而不是列表。

<强>更新 见这个例子:

    CamelContext context = new DefaultCamelContext();
    context.addRoutes(new RouteBuilder() {
        public void configure() {
            from("direct:start")
            .split().tokenize("@").streaming()
            .process(new MyProcessor())
            ;
        }
    });
    context.start();
    context.createProducerTemplate().sendBody("direct:start", "1@2@3");

您的处理器方法如下所示:

public void process(final Exchange exchange) throws Exception
{
    System.out.println(exchange.getIn().getBody());
}

这将输出三行数字。