Динамический URI на основе имени файла/файла конфигурации/имени свойства

Я пытаюсь динамически передать значение to URI со значением свойства. Это значение свойства будет настроено уже в файле cfg.

Когда имя файла извлекается с использованием заголовка CamelFileNameOnly, оно должно быть передано в конечную точку to Uri. Чтобы одно и то же имя упоминалось в коде.

Пожалуйста, найдите мой код ниже:

Я удалил файл с именем KevinFile.txt на моем сервере location= D:\Servers\jboss-fuse-6.2.0.redhat-133\data\myLocalFTP (file://data/myLocalFTP)

Файл конфигурации

local.folder.url=file://data/myLocalFTP 
KevinFile=file://data/KevinFileDirectory 

Верблюжий маршрут

<route id="awsRoute">
      <from uri="{{local.folder.url}}"/>
      <bean ref="processorClass" method="process"/>
      <log message="myProperty value is ${exchangeProperty.myProperty}"/>    <---Gives the fileName 
      <to uri="{{${exchangeProperty.myProperty}}}"/>       <--This is the spot i am getting error :( 
</route>

ProcessorClass.java

public class ProcessorClass implements Processor{ 
@Override 
        public void process(Exchange exchange) throws Exception { 

                String fileName = (String) exchange.getIn().getHeader("CamelFileNameOnly"); 
                exchange.setProperty("myPropertyNew", fileName); 

        } 
} 

person Antony Kevin    schedule 12.05.2016    source источник
comment
Кевин, я очень смущен тем, чего вы пытаетесь достичь, можете ли вы попытаться немного улучшить описание, сосредоточив внимание на своей цели?   -  person Matthew Fontana    schedule 12.05.2016
comment
Привет, Мэтью, мне нужно передать имя файла Propery в компоненте «to uri», чтобы он ссылался на файл cfg с таким же именем и помещал файл в указанное место.   -  person Antony Kevin    schedule 18.05.2016


Ответы (2)


Если я правильно понимаю, нужно указать "динамический" vlue для постоянной части производителя. Вместо <to uri="{{${exchangeProperty.myProperty}}}"/> вы можете использовать список получателей или маршрутизацию:

<recipientList>
    <simple>${exchangeProperty.myProperty}</simple>
</recipientList>

or

<routingSlip>
    <simple>${exchangeProperty.myProperty}</simple>
</routingSlip>
person Sergii Pozharov    schedule 18.05.2016

Ах, что вы ищете, так это просто установить заголовок как свойство. Вы можете сделать это следующим образом:

from("direct:start")
    .setHeader("CamelFileNameOnly").simple("{{myPropertyName}}")
    .to("file://data/myLocalDisk");

Вы также можете упростить это, используя синтаксис uri, доступный в файловом компоненте в этом случае (спасибо Сергею за рекомендацию). Просто убедитесь, что вы проверили документацию по верблюду для каждого компонента, некоторые компоненты полагаются на заголовки обмена, в то время как другие могут использовать свойства URI.

from("direct:start")
    .to("file://data/myLocalDisk?fileName={{myPropertyName}}");

Также стоит отметить, что если у вас есть логика, которую вы хотите использовать перед установкой заголовка, вы можете заставить setHeader вызывать bean-компонент.

from("direct:start")
    .setHeader("CamelFileNameOnly").bean(MyPropertyLogicBean.class, "someMethod({{myPropertyName}})")
    .to("file://data/myLocalDisk");

Используйте компонент свойств верблюда, чтобы разрешить это свойство.

Ссылка: http://camel.apache.org/properties.html

person Matthew Fontana    schedule 18.05.2016
comment
лучше ‹to uri=file://data/myLocalDisk?fileName={{myPropertyName}}/›, так как вопрос в Spring DSL - person Sergii Pozharov; 18.05.2016
comment
@SergiiPozharov спасибо, я добавлю это упрощение к моему ответу - person Matthew Fontana; 19.05.2016