2010-05-11 5 views
0

J'ai chameau Fileendpoint défini de manière suivante:Comment passer le paramètre Endpoint à Endpoint défini comme le haricot au printemps Conext

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

Je veux définir certains paramètres de fichiers tels que preMove, déplacer, etc. Hotfolder variable est Une chaîne tirée de JNDI et je n'ai aucun impact là-dessus. Lorsque je définis la propriété comme

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

il est pas correctement analysé et le fichier obtenir le nom fait/nom

+0

Qu'est-ce que '$ {file: name}' est censé être? – skaffman

+0

Il est supposé être le nom du fichier d'origine selon la documentation de thew camel File Language. J'ai remarqué, que même si j'utilise un uri pur comme file:/inbox? Move =/done/$ {file: name} j'obtiens un fichier dans le dossier done nommé 'name'. Il semble que le langage des fichiers ne fonctionne pas. – sempa

Répondre

0

preMove est une option sur FileEndpoint de sorte que vous pouvez simplement laisser le printemps IoC il

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

Et je crois que vous pouvez omettre $ {file: name} si vous voulez juste qu'il soit déplacé dans un dossier. Il est déjà documenté sur la page wiki de Camel http://camel.apache.org/file2.html

BTW: Quelle version de Camel utilisez-vous et quel OS?

+0

J'utilise Camel 2.2 sur Windows XP SP3. La solution suggérée ne fonctionnera pas parce que preMove, donné en tant que valeur de chaîne, ne peut pas être converti en expression et donc entraîner une exception. – sempa

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}"/> 

Résultat: org.apache.camel.component.file.GenericFileOperationFailedException: Impossible de créer le répertoire: c: \ test \ Hotfolder \ backup \ maintenant: aaaaMMjj nom \

II cas DSL

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

Résultat preMove fonctionne très bien (dossier créé InProgress), mais mouvement émet une exception: GenericFileOperationFailedException: Impossible de renommer le fichier: GenericFile [c: \ test \ Hotfolder \ xxx.txt] à: GenericFile [backup \ 20100512]

III Case

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

Problème simlar Case II

IV cas

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

Résultat: le travail comme prévu

Question: Est-ce que je fais mal sth ou il y a un bug dans Camel