1

私はラクダのFileendpointを次のように定義しました:

<bean id="hotfolderEndpoint" 
          class="org.apache.camel.component.file.FileEndpoint"
          factory-bean="camel" 
          factory-method="getEndpoint">       
        <constructor-arg ref="hotfolder" />
</bean>

preMove、moveなどのいくつかのファイルパラメータを定義したい。変数hotfolderはJNDIから取得した文字列であり、影響はありません。プロパティを次のように定義すると

<bean id="moveExp" class="org.apache.camel.model.language.SimpleExpression">
 <property name="expression" value="done/${file:name}"/>
</bean>

正しく解析されておらず、ファイルはname done/nameを取得します

4

2 に答える 2

1

I ケース

<camel:camelContext id="camel">
                <camel:route>
                        <camel:from ref="hotfolderEndpoint"/>
                        <camel:to uri="file://c:/test/myfolder/toEnd"></camel:to>
                </camel:route>
        </camel:camelContext>

        <camel:endpoint id="hotfolderEndpoint" camelContextId="camel"
                uri="file://c:/test/hotfolder?move=backup/${date:now:yyyyMMdd}/${file:name}"/>

結果: org.apache.camel.component.file.GenericFileOperationFailedException: ディレクトリを作成できません: c:\test\hotfolder\backup\now:yyyyMMdd\name

II ケース DSL

from("file://c:/test/myfolder?preMove=inprogress&moveFailed=backup/${date:now:yyyyMMdd}/${file:name}")
                .to("file://c:/test/myfolder/toEnd");

結果 preMove は正常に動作します (作成中のフォルダー)。

III ケース

<bean id="hotfolderEndpoint"
         class="org.apache.camel.component.file.FileEndpoint"
         factory-bean="camel"
         factory-method="getEndpoint">    
            <constructor-arg ref="hotfolder" />
            <property name="readLock" value="rename" />
            <property name="move" ref="moveExp"/>
    </bean>
    <bean id="moveExp" class="org.apache.camel.model.language.SimpleExpression">
            <property name="expression" value="done/${file:name.noext}-done.${file:ext}"/>
    </bean>

ケース II に似た問題

Ⅳケース

<camel:camelContext id="camel">
                <camel:route>
                        <camel:from uri="file://c:/test/hotfolder?move=backup/${date:now:yyyyMMdd}/${file:name}"/>
                        <camel:to uri="file://c:/test/myfolder/toEnd"></camel:to>
                </camel:route>
        </camel:camelContext>

結果: 期待どおりに動作します

質問: 私のやり方が間違っているのでしょうか、それとも Camel にバグがありますか?

于 2010-05-12T06:22:56.107 に答える
0

preMove は FileEndpoint のオプションであるため、Spring IC に任せることができます

<bean>
    <property name="preMove" value="done"/>
</bean>

また、フォルダーに移動したいだけの場合は、 ${file:name} を省略できると思います。Camel wiki ページ http://camel.apache.org/file2.htmlで既に文書化されています。

ところで: 使用している Camel のバージョンと OS を教えてください。

于 2010-05-11T15:43:27.157 に答える