首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将端点参数传递给在Spring上下文中定义为bean的端点

如何将端点参数传递给在Spring上下文中定义为bean的端点
EN

Stack Overflow用户
提问于 2010-05-11 18:35:08
回答 2查看 12.1K关注 0票数 1

我用以下方式定义了camel Fileendpoint:

代码语言:javascript
复制
<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的字符串,我对它没有影响。当我将属性定义为

代码语言:javascript
复制
<bean id="moveExp" class="org.apache.camel.model.language.SimpleExpression">
 <property name="expression" value="done/${file:name}"/>
</bean>

它未被正确解析,文件get name done/name

EN

回答 2

Stack Overflow用户

发布于 2010-05-12 14:22:56

我的案例

代码语言:javascript
复制
<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

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

结果备份工作正常(已创建正在进行的文件夹),但移动引发异常: GenericFileOperationFailedException: Cannot rename preMove : GenericFilec:\test\hotfolder\xxx.txt to: GenericFilebackup\20100512

III案例

代码语言:javascript
复制
<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病例

代码语言:javascript
复制
<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中有个bug

票数 1
EN

Stack Overflow用户

发布于 2010-05-11 23:43:27

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

代码语言:javascript
复制
<bean>
    <property name="preMove" value="done"/>
</bean>

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

顺便说一句:你使用的是什么版本的Camel,是哪种操作系统?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2809896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档