Apache camel 驼峰:Smooks筛选操作失败

Apache camel 驼峰:Smooks筛选操作失败,apache-camel,smooks,Apache Camel,Smooks,我正在与camel合作,并尝试将smooks转换添加到我的路线中: public void configure() throws Exception { from("file:src/main/resources/smookFromCsvToXml/from?fileName=test.jtl") .log("Before SmooksComponent\n${body}") .to("smooks://smooks-config.xml")

我正在与camel合作,并尝试将smooks转换添加到我的路线中:

public void configure() throws Exception {
    from("file:src/main/resources/smookFromCsvToXml/from?fileName=test.jtl")
        .log("Before SmooksComponent\n${body}")
        .to("smooks://smooks-config.xml")
        .to("file:src/main/resources/smookFromCsvToXml/to")
        .log("After SmooksComponent\n${body}");
}
当我运行此路由时,我得到以下错误

[sources/smookFromCsvToXml/from] route1                         INFO  Before SmooksComponent
Tom,Fennelly,Male,4,Ireland
Mike,Fennelly,Male,2,Ireland
[sources/smookFromCsvToXml/from] DefaultErrorHandler            ERROR Failed delivery for (MessageId: ID-WM-WAMS-DAD-61818-1348228740355-0-15 on ExchangeId: ID-WM-WAMS-DAD-61818-1348228740355-0-14). Exhausted after delivery attempt: 1 caught: org.milyn.SmooksException: Smooks Filtering operation failed.
org.milyn.SmooksException: Smooks Filtering operation failed.
    at org.milyn.Smooks._filter(Smooks.java:548)[milyn-smooks-all-1.5.1.jar:]
    at org.milyn.Smooks.filterSource(Smooks.java:482)[milyn-smooks-all-1.5.1.jar:]
    at org.milyn.smooks.camel.processor.SmooksProcessor.process(SmooksProcessor.java:107)[milyn-smooks-all-1.5.1.jar:]
    at org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:101)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:71)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:120)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:292)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:115)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.fabric.FabricTraceProcessor.process(FabricTraceProcessor.java:81)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:330)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:220)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:304)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:50)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:388)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:198)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:159)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:140)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:92)[camel-core-2.9.0.fuse-70-084.jar:2.9.0.fuse-70-084]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)[:1.6.0_25]
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)[:1.6.0_25]
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)[:1.6.0_25]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)[:1.6.0_25]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)[:1.6.0_25]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)[:1.6.0_25]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)[:1.6.0_25]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)[:1.6.0_25]
    at java.lang.Thread.run(Thread.java:662)[:1.6.0_25]
[sources/smookFromCsvToXml/from] GenericFileOnCompletion        WARN  Rollback file strategy: org.apache.camel.component.file.strategy.GenericFileRenameProcessStrategy@1a779dce for file: GenericFile[test.jtl]
而我的转换如果出现以下情况:

<smooks-resource-list 
    xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" 
    xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.4.xsd"
    xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.2.xsd">

    <csv:reader fields="firstname,lastname,gender,age,country" rootElementName="people" recordElementName="person" />

    <core:exports>
        <core:result type="org.milyn.payload.StringResult"/>
    </core:exports>

</smooks-resource-list>


这说明smooks无法读取传入的消息。有什么帮助吗?

您可以事先将消息转换为字符串,例如在smooks之前添加

<convertBodyTo type="String"/>


Ok,这是可行的,但是如果我处理大文件,这会有危险吗?那么你就知道Smook有问题,它不能在开箱即用的Camel文件端点上工作。你可以改为转换为java.io.InputStream