如何将Endpoint参数传递给Spring上下文中定义为bean的Endpoint

时间:2010-05-11 10:35:08

标签: spring apache-camel

我有驼峰Fileendpoint以下列方式定义:

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

我想定义一些File参数,例如preMove,move等。 变量hotfolder是从JNDI获取的字符串,我对它没有影响。 当我将属性定义为

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

未正确解析,文件名称已完成/名称

2 个答案:

答案 0 :(得分:1)

I Case

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

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

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

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的模拟问题

IV案例

<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中有错误

答案 1 :(得分:0)

preMove是FileEndpoint上的一个选项,所以你可以让它弹出IoC吧

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

我相信你可以省略$ {file:name},如果你只想把它移到一个文件夹中。它已在Camel wiki页面上记录 http://camel.apache.org/file2.html

BTW:您使用的是哪种版本的Camel以及哪种操作系统?