[ https://issues.apache.org/jira/browse/CAMEL-6313?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Gredler updated CAMEL-6313: ---------------------------------- Attachment: camel-6313-test.patch > Property placeholder optimization broke placeholders in Spring camelContext > configuration > ----------------------------------------------------------------------------------------- > > Key: CAMEL-6313 > URL: https://issues.apache.org/jira/browse/CAMEL-6313 > Project: Camel > Issue Type: Bug > Components: camel-spring > Affects Versions: 2.11.0 > Reporter: Daniel Gredler > Attachments: camel-6313-test.patch > > > We are upgrading from 2.10.0 to 2.11.0, and are getting an error on startup. > Example Spring configuration: > {code:xml}<camelContext id="camel" handleFault="true" > autoStartup="{{autoStartup}}" xmlns="http://camel.apache.org/schema/spring"> > <contextScan /> > <jmxAgent id="camelAgent" createConnector="true" > registryPort="{{jmxPort}}" /> > </camelContext> > <bean id="properties" > class="org.apache.camel.component.properties.PropertiesComponent"> > <property name="location" value="classpath:foo.properties"/> > </bean> > {code} > As you can see, we use the Camel properties component to configure Camel > auto-startup, JMX port, etc. > This is the error we're getting on startup: > {code}org.springframework.beans.factory.BeanCreationException: Error creating > bean with name 'properties' defined in class path resource > [org/apache/camel/component/properties/SpringPropertiesComponentTest.xml]: > Initialization of bean failed; nested exception is > org.springframework.beans.factory.BeanCreationException: Error creating bean > with name 'camel-1': Invocation of init method failed; nested exception is > java.lang.IllegalArgumentException: PropertiesComponent with name properties > must be defined in CamelContext to support property placeholders. > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) > at > org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607) > at > org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925) > at > org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472) > at > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) > at > org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) > at > org.apache.camel.component.properties.SpringPropertiesComponentTest.createApplicationContext(SpringPropertiesComponentTest.java:30) > at > org.apache.camel.spring.SpringTestSupport.setUp(SpringTestSupport.java:52) > at junit.framework.TestCase.runBare(TestCase.java:139) > at org.apache.camel.TestSupport.runBare(TestSupport.java:58) > at junit.framework.TestResult$1.protect(TestResult.java:122) > at junit.framework.TestResult.runProtected(TestResult.java:142) > at junit.framework.TestResult.run(TestResult.java:125) > at junit.framework.TestCase.run(TestCase.java:129) > at junit.framework.TestSuite.runTest(TestSuite.java:255) > at junit.framework.TestSuite.run(TestSuite.java:250) > at > org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) > at > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) > Caused by: org.springframework.beans.factory.BeanCreationException: Error > creating bean with name 'camel-1': Invocation of init method failed; nested > exception is java.lang.IllegalArgumentException: PropertiesComponent with > name properties must be defined in CamelContext to support property > placeholders. > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) > at > org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1109) > at > org.apache.camel.spring.CamelBeanPostProcessor$1.getOrLookupCamelContext(CamelBeanPostProcessor.java:69) > at > org.apache.camel.impl.DefaultCamelBeanPostProcessor.postProcessBeforeInitialization(DefaultCamelBeanPostProcessor.java:85) > at > org.apache.camel.spring.CamelBeanPostProcessor.postProcessBeforeInitialization(CamelBeanPostProcessor.java:148) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:394) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1448) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) > ... 27 more > Caused by: java.lang.IllegalArgumentException: PropertiesComponent with name > properties must be defined in CamelContext to support property placeholders. > at > org.apache.camel.impl.DefaultCamelContext.resolvePropertyPlaceholders(DefaultCamelContext.java:1063) > at > org.apache.camel.util.CamelContextHelper.parseBoolean(CamelContextHelper.java:337) > at > org.apache.camel.core.xml.AbstractCamelContextFactoryBean.initCamelContext(AbstractCamelContextFactoryBean.java:543) > at > org.apache.camel.core.xml.AbstractCamelContextFactoryBean.afterPropertiesSet(AbstractCamelContextFactoryBean.java:266) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) > ... 40 more{code} > I believe this is a side-effect of the optimization introduced in CAMEL-5508, > which was incorporated into 2.10.1 and 2.11.0. > I'll attach a small patch that modifies one of the unit tests in the > camel-spring component to reproduce the issue. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira