2010-05-11 12 views
0

我已經駱駝Fileendpoint在這樣定義的:如何通過在Spring定義爲Bean端點參數端點conext

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

我要定義一些文件的參數,如preMove,移動等 變量的hotfolder是來自JNDI的字符串,我對它沒有影響。 當我定義屬性作爲

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

沒有正確解析,文件中獲取名行/名

+0

什麼是'$ {file:name}'應該是? – skaffman 2010-05-11 11:08:52

+0

根據駱駝文件語言文檔,它應該是原始文件的名稱。我注意到,即使我使用純粹的uri文件:/ inbox?move =/done/$ {file:name}我在完成的文件夾中獲得名爲'name'的文件。看起來好像文件語言不起作用。 – sempa 2010-05-11 13:11:55

回答

0

preMove是FileEndpoint一個選項,這樣你可以讓春天的IoC它

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

我相信如果你只是想把它移到一個文件夾,你可以省略$ {file:name}。它已經在駱駝wiki頁 http://camel.apache.org/file2.html

BTW:你使用什麼版本的駱駝和哪個操作系統?

+0

我在Windows XP SP3上使用Camel 2.2。建議的解決方案不會工作,因爲作爲字符串值premove不能被轉換爲表達式,從而導致異常。 – sempa 2010-05-12 05:23:55

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:現在\測試\ hotfolder中\備份\:無法創建目錄:C YYYYMMDD \名

II案例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:\測試\ hotfolder中\ xxx.txt]無法文件重命名爲:GenericFile [備份\ 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> 

Simlar問題,以案例二

四,案例

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

結果:按預期方式工作

問題:我做錯了什麼或在駱駝有一個錯誤