camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Claus Ibsen (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CAMEL-7390) CamelNamespaceHandler issue when using Spring's AbstractRefreshableApplicationContext.setAllowBeanDefinitionOverriding(false)
Date Sun, 27 Apr 2014 08:36:14 GMT

    [ https://issues.apache.org/jira/browse/CAMEL-7390?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13982253#comment-13982253
] 

Claus Ibsen commented on CAMEL-7390:
------------------------------------

Yes in those cases you need to explicit set id's of the templates. 

> CamelNamespaceHandler issue when using Spring's AbstractRefreshableApplicationContext.setAllowBeanDefinitionOverriding(false)
> -----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-7390
>                 URL: https://issues.apache.org/jira/browse/CAMEL-7390
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-spring
>    Affects Versions: 2.11.2
>            Reporter: Nathan Jensen
>            Priority: Minor
>
> Some of the Spring ApplicationContext implementations (i.e. AbstractRefreshableApplicationContext)
allow you to call setAllowBeanDefinitionOverriding(false) to enforce that beans initialized
by spring do not reuse ids.  This can be especially helpful in a pluggable application where
different developers may contribute different spring files.
> CamelNamespaceHandler.registerTemplates() is helpful and automatically creates a template
and consumerTemplate if they're not defined on a camelContext.  Unfortunately, if there are
multiple camelContexts, then it creates a template for each camelContext with the id of "template",
which will then cause an exception IF the spring application context is not allowing bean
definition overriding.  An example of the exception:
> {noformat}
> Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: Invalid bean definition with name 'template' defined in null: Cannot
register bean definition [Generic bean: class [org.apache.camel.spring.CamelProducerTemplateFactoryBean];
scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true;
primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null]
for bean 'template': There is already [Generic bean: class [org.apache.camel.spring.CamelProducerTemplateFactoryBean];
scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true;
primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null]
bound.
> Offending resource: class path resource [springfile.xml]
> 	at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:72)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:82)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.apache.camel.spring.handler.CamelNamespaceHandler.registerTemplates(CamelNamespaceHandler.java:519)
~[camel-spring-2.11.2.jar:2.11.2]
> 	at org.apache.camel.spring.handler.CamelNamespaceHandler$CamelContextBeanDefinitionParser.doParse(CamelNamespaceHandler.java:369)
~[camel-spring-2.11.2.jar:2.11.2]
> 	at org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser.parseInternal(AbstractSingleBeanDefinitionParser.java:85)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:59)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1423)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1413)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)
~[org.springframework.beans-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
~[org.springframework.context-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
~[org.springframework.context-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
~[org.springframework.context-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:530)
~[org.springframework.context-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> 	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:444)
~[org.springframework.context-3.1.4.RELEASE.jar:3.1.4.RELEASE]
> {noformat}
> This appears to only be a problem if using multiple camel contexts and setting allowBeanDefinitionOverriding
to false.  If you need to enforce the unique bean ids, I suspect a workaround is to define
a template with a unique id for each camelContext in the XML, but then you lose the helpful
benefit of not having to define that for every context.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message