2017-01-27 7 views
1

у меня есть несколько маршрутов Apache Camel с большим количеством опций, как этот:Apache Camel избежать дублирования параметров через подобные маршруты XML

<from uri="sftp://[email protected]:22/path? 
    password=vvvvv;delay=3000&amp;streamDownload=true&amp; 
    delete=true&amp;idempotent=true&amp;idempotentRepository=#jpaStore&amp; 
    inProgressRepository=#jpaStore"/> 

Это не так уж плохо, но у меня есть шесть других маршрутов с теми же параметрами но разные пути. Я хотел бы, чтобы поместить все опции в постоянной, чтобы избежать дублирования:

<from uri="sftp://[email protected]:22/path?OPTIONS"/> 

я мог бы быть в состоянии использовать Camel EL для достижения этой цели, но ни один из примеров не показывать, и мои попытки угадать синтаксис Арен Не работаем.

создать Spring бина, как это:

<bean id="myoptions" class="java.lang.String"> 
    <constructor-arg value="allmyoptions"/> 
</bean> 

И попробуйте обратиться к нему, как это:

<from uri="sftp://[email protected]:22/path?${myoptions}"/> 

Но я получаю сообщение об ошибке:

There are 1 parameters that couldn't be set on the endpoint. Check the uri if the parameters are spelt correctly and that they are properties of the endpoint. Unknown parameters=[{${myoptions}=}]

Этот вопрос , Simple Expression in apache-camel uri, пытается что-то подобное, но они используют Java DSL, и мои маршруты настроены в XML.

Кто-нибудь знает хороший способ избежать дублирования всех этих вариантов по маршрутам?

ответ

2

С этой страницы How do I use Spring Property Placeholder with Camel XML я читал, что «мы еще не поддерживаем нотацию $ {something} внутри произвольного Camel XML». Это говорит о том, что они предлагают различные обходные пути на этой странице, Properties.

То, что работало для меня было настроить BridgePropertyPlaceholderConfigurer следующим образом:

<bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:myproperties.properties"/> 
</bean> 

В свойствах файла у меня есть:

OPTIONS=password=vvvvv;delay=3000&streamDownload=true&delete=true&idepotent=true&idempotentRepository=#jpaStore&inProgressRepository=#jpaStore 

Это позволяет мне использовать как Spring свойство шаблонного обозначения ${} и обозначение заметок верблюда с использованием {{ }}:

<from uri="sftp://[email protected]:22/path?{{OPTIONS}}"/> 

Один из них - это то, что мне нужно было избавиться от моих закодированных амперсандов в файле свойств, заменив &amp; на &.

Смотрите также:

Смежные вопросы