2012-06-08 37 views
2

我想處理兩個.csv文件並將它們的數據保存到數據庫。 我正在使用java dsl而不是相同的彈簧。Apache駱駝同時處理兩個csv文件

爲了解釋這一情況會好一點:
我讀取兩個.csv文件並處理它們上傳他們的數據在SQL我這是

  1. 進行database.The步驟指定引擎servlet容器文件中的初始化程序。
  2. 創建一個EngineInitialiser
  3. 將EngineInitialiser綁定到核心引擎。
  4. 創建將數據保存到數據庫所需的dao文件。
  5. 創建定義綁定的引擎模塊。
  6. 定義定義文件特定格式的文件。

然而,問題是

有試圖解組交換到BindyCsvDataFormat時出現問題。有兩種格式的類文件,我已經爲file1輸入文件指定了一個文件,另一個用於file2.csv

現在bindy試圖將格式映射到父類文件。但是,當它拾取file1.csv時,它將它映射到同一包中定義的model1和model2。 但是,它應該只將它映射到一個類。我如何強制它映射到只有一個格式類?

誤差如下:

java.lang.IllegalArgumentException異常:某些字段缺失(可選的還是強制),線:在org.apache.camel.dataformat.bindy.BindyCsvFactory 1 。 bind(BindyCsvFactory.java:215) atorg.apache.camel.dataformat.bindy.csv.BindyCsvDataFormat.unmarshal(BindyCsvDataFormat.java:169)atorg.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:58) at org.apache.camel.util.AsyncProcessorConverterHelper $ ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) at org.apache.camel.util.AsyncProce srlHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)在org.apache.camel.processor.DelegateAsyncProcessor的org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)上的org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71)上的 。在org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91) (org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) 處的processNext(DelegateAsyncProcessor.java:99)在org.apache.cam的org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) el.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:333) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:223) at org.apache.camel.processor.RouteContextProcessor。processNext(RouteContextProcessor.java:45) 在org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) 在org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:304) 在org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) 在org.apache.camel.processor.Pipeline.process(Pipeline.java:117) 在org.apache.camel.processor。 Pipeline.process(Pipeline.java:80) at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150) at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117) at org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:50) at org.apache.camel.processor。 DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71) at org.apache.camel.component。 file.GenericFileConsumer.processExchange(GenericFi leConsumer.java:352) at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:175) at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:136) 在org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:138) 在org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:90) 在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask $ Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 101(ScheduledThreadPoolExecutor.java:98) 在java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181) 在java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) |#]

回答

0

您需要爲不同的綁定模型使用不同的軟件包名稱。這是目前的限制,並且將來會得到改善。

+0

嗨克勞斯,使用兩個不同的包以及bindy試圖將單個文件映射到兩個模型,雖然他們是在不同的包中指定,因此,是給出了相同的錯誤。 –

+0

您的bindy註釋和實際的CSV文件不匹配。 –

+0

然而,其中一個文件被整齊地處理,當第二個csv文件在factory.bind()方法中處理時,其中文件的csv數據必須與模型類綁定,bindy將它與模型model1和model2,但它應該只將它映射到一個。這是因爲BindyCsvDataformat的模型對象具有存儲在其中的兩個模型。因此,在處理第二個文件時,它要求4個參數,即來自每個模型model1和model2的2個參數。 –

0

不同的實體經理應該解決問題。