2017-03-02 21 views
1

処理後に 'yyyy-x.zip'という名前のファイルをファイルコンポーネントによって 'yyyy/yyyy-x.zip'フォルダに移動する方法はありますか?私は次のように考えました:処理後のApache Camel移動ファイル

from("file://directory?preMove=working&move=${${file:onlyname}.substring(0,3)}/${file:onlyname}&moveFailed=error") 
.doStuff(...); 

しかし、私はいつも以下の例外を受けます。

org.apache.camel.language.simple.types.SimpleIllegalSyntaxException: Unknown function: ${file:onlyname}.toString().subString(0,3) at location 0 ${${file:onlyname}.toString().subString(0,3)}/${file:onlyname} 
    at org.apache.camel.language.simple.ast.SimpleFunctionStart$1.evaluate(SimpleFunctionStart.java:107) 
    at org.apache.camel.builder.ExpressionBuilder$75.evaluate(ExpressionBuilder.java:1795) 
    at org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:36) 
    at org.apache.camel.component.file.strategy.GenericFileExpressionRenamer.renameFile(GenericFileExpressionRenamer.java:37) 
    at org.apache.camel.component.file.strategy.GenericFileRenameProcessStrategy.commit(GenericFileRenameProcessStrategy.java:87) 
    at org.apache.camel.component.file.GenericFileOnCompletion.processStrategyCommit(GenericFileOnCompletion.java:127) 
    at org.apache.camel.component.file.GenericFileOnCompletion.onCompletion(GenericFileOnCompletion.java:83) 
    at org.apache.camel.component.file.GenericFileOnCompletion.onComplete(GenericFileOnCompletion.java:57) 
    at org.apache.camel.util.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:104) 
    at org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:230) 
    at org.apache.camel.util.UnitOfWorkHelper.doneUow(UnitOfWorkHelper.java:65) 
    at org.apache.camel.processor.CamelInternalProcessor$UnitOfWorkProcessorAdvice.after(CamelInternalProcessor.java:674) 
    at org.apache.camel.processor.CamelInternalProcessor$UnitOfWorkProcessorAdvice.after(CamelInternalProcessor.java:629) 
    at org.apache.camel.processor.CamelInternalProcessor$InternalCallback.done(CamelInternalProcessor.java:246) 
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:109) 
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197) 
    at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:460) 
    at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:227) 
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:191) 
    at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175) 
    at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.camel.language.simple.types.SimpleParserException: Unknown function: ${file:onlyname}.toString().subString(0,3) 
    at org.apache.camel.language.simple.ast.SimpleFunctionExpression.createSimpleExpression(SimpleFunctionExpression.java:230) 
    at org.apache.camel.language.simple.ast.SimpleFunctionExpression.createExpression(SimpleFunctionExpression.java:45) 
    at org.apache.camel.language.simple.ast.SimpleFunctionStart$1.evaluate(SimpleFunctionStart.java:104) 
    ... 27 common frames omitted 

EDIT:以下の豆で

from("file://directory?preMove=working&move=${bean:myBean.myMethod(${file:onlyname})}&moveFailed=error") 
.doStuff(...); 

:私は、次の解決策を得ることができたサンタクロースイプセンから先端までの

おかげ

import org.springframework.stereotype.Service; 

@Service("myBean") 
public class MyBeanImpl() implements MyBean{ 

     @Override 
     public String myMethod(String fileName){ 
      return ...create the filename...; 
     } 
    } 

答えて

2

ますuriで直接使用することはできません。 ll。

Beanを使用して名前を計算し、move=${bean:myBean.myMethod}を使用して、IDがmyBeanのBeanをレジストリに登録してから名前を計算することができます。

関連する問題