1

我通过以下方式定义了骆驼文件端点:

<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>

它没有被正确解析并且文件得到名称 done/name

4

2 回答 2

1

我案例

<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

二、案例 DSL

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

结果 preMove 工作正常(已创建正在进行的文件夹),但移动引发异常:GenericFileOperationFailedException:无法将文件:GenericFile[c:\test\hotfolder\xxx.txt] 重命名为:GenericFile[backup\20100512]

三、案例

<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>

结果:按预期工作

问题:我做错了什么还是骆驼有错误

于 2010-05-12T06:22:56.107 回答
0

preMove 是 FileEndpoint 上的一个选项,因此您可以让 spring IoC 它

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

而且我相信如果您只想将 ${file:name} 移到文件夹中,则可以省略它。它已经记录在 Camel wiki 页面 http://camel.apache.org/file2.html

顺便说一句:您使用的是什么版本的 Camel 以及哪个操作系统?

于 2010-05-11T15:43:27.157 回答