Как передать параметр конечной точки в конечную точку, определенную как bean в контексте Spring - PullRequest
0 голосов
/ 11 мая 2010

У меня есть конечная точка верблюда, определенная следующим образом:

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

Я хочу определить некоторые параметры файла, такие как preMove, move и т. Д. Переменная горячая папка - это строка, взятая из JNDI, и я не имею на это никакого влияния. Когда я определяю свойство как

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

он неправильно проанализирован и имя файла получено / имя

Ответы [ 2 ]

1 голос
/ 12 мая 2010

я чехол

<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 Корпус DSL

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

Результат PreMove отлично работает (папка inprogress создана), но исключение move вызывает: 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 есть ошибка

0 голосов
/ 11 мая 2010

preMove - это опция в FileEndpoint, поэтому вы можете просто разрешить пружинному IoC это

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

И я считаю, что вы можете опустить $ {file: name}, если вы просто хотите, чтобы он был перемещен в папку. Это уже задокументировано на вики-странице Camel http://camel.apache.org/file2.html

Кстати: какую версию Camel вы используете и какую ОС?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...