Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

How do I use Spring Property Placeholder with Camel XML

We don't do NOT yet support the ${something} notation inside arbitrary Camel XML. For example at the time of writing this is not NOT supported (due Spring limitations)

Code Block
titleIS NOT SUPPORTED
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
    ">

  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>

  <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
    <route>
      <from refuri="activemq:${someQueueName}"/>
      <to uri="mock:results"/>
    </route>
  </camelContext>


</beans>

However you can use the <endpoint/> element to define endpoints which does support the property resolving which you can then refer to by name or reference in XML or Java code., using the Ref component as shown below (notice the ref: in the uri):

code
Code Block
titleSUPPORTED
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
    ">

  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>

  <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
    <endpoint id="input1" uri="activemq:${someQueueName}"/>

    <route>
      <from refuri="ref:input1"/>
      <to uri="activemq:OutputQueue"/>
    </route>
  </camelContext>


</beans>

Camel does not yet fully support property placeholders as Spring 3.0 is required due to there is a limitation in Spring 2.x. See JIRA SPR-4466

Tip
titleBridge Spring and Camel property placeholders

From Camel 2.10 onwards you can bridge Spring and Camel property placeholders, see Using PropertyPlaceholder for more details.

Here is a trick that you can use to define the uri in a property file using Spring injection and Camel endpoint : http://cmoulliard.blogspot.com/2009/05/trick-to-pass-uri-declared-in-property.html.

From Camel 2.3 onwards there is a Properties component build in Camel core which allows you to use properties in the same way as Spring property placeholders, and even more.