I logged a ticket to improve this
https://issues.apache.org/jira/browse/CAMEL-8926

On Wed, Jul 1, 2015 at 8:43 PM, Claus Ibsen <claus.ib...@gmail.com> wrote:
> Hi
>
> Ah its because Camel uses this to find the beans
>
> Map<String, RoutesBuilder> beans =
> applicationContext.getBeansOfType(RoutesBuilder.class, true, true);
>
> And I suspect it causes spring to try to auto wire and create the
> bean. Then thereafter the filtering is done, eg frankly we would need
> to know the class name before we can exclude it.
>
> On Wed, Jul 1, 2015 at 5:04 PM, furchess123 <con...@hotmail.com> wrote:
>> Hi,
>> I am using Camel 2.14.2.  All my RouteBuilder implementations are @Component
>> annotated Spring beans, auto-wired with processors, error handlers,
>> AggregationStrategy implementation beans, etc. I have been using
>> *contextScan* to load these Spring beans into Camel context. However, I have
>> one route builder implementation that is a prototype-scoped Spring bean,
>> distinct instances of which may have to be created on-demand at runtime. It
>> must NOT be component-scanned at startup.
>>
>> Per Camel's  reference guide
>> <http://people.apache.org/~dkulp/camel/spring.html>  , I have tried to
>> exclude that particular class from being component-scanned by Camel using
>> the following:
>>
>> <camelContext xmlns="http://camel.apache.org/schema/spring";>
>>         <contextScan>
>>             *<excludes>
>>                 com.myco.something.route.MyExcludedRouteBuilder
>>             </excludes>*
>>         </contextScan>
>>     </camelContext>
>>
>> *This doesn't work.* Camel doesn't seem to ignore this route builder class
>> and tries to instantiate it at startup. I don't provide a no-arg constructor
>> for that class (instances are requested from the Spring context on demand
>> with a specific "from" endpoint value) so CamelContextFactoryBean throws the
>> following exception:
>>
>> ...
>> Caused by: org.springframework.beans.factory.BeanCreationException: Error
>> creating bean with name 'MyExcludedRouteBuilder' defined in file
>> [.../route/MyExcludedRouteBuilder.class]: Instantiation of bean failed;
>> nested exception is org.springframework.beans.BeanInstantiationException:
>> Could not instantiate bean class
>> [com.myco.something.route.MyExcludedRouteBuilder]: No default constructor
>> found; nested exception is java.lang.NoSuchMethodException:
>> com.myco.something.route.MyExcludedRouteBuilder.<init>()
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1095)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1040)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:505)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
>>         at
>> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
>>         at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
>>         at
>> org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:489)
>>         at
>> org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1060)
>>         at
>> org.apache.camel.spring.ContextScanRouteBuilderFinder.appendBuilders(ContextScanRouteBuilderFinder.java:49)
>>         at
>> org.apache.camel.spring.CamelContextFactoryBean.findRouteBuildersByContextScan(CamelContextFactoryBean.java:233)
>>         at
>> org.apache.camel.core.xml.AbstractCamelContextFactoryBean.findRouteBuilders(AbstractCamelContextFactoryBean.java:881)
>>         at
>> org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:344)
>>         at
>> org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(*CamelContextFactoryBean.java:326*)
>>         ... 56 more
>> Caused by: org.springframework.beans.BeanInstantiationException: Could not
>> instantiate bean class [com.myco.something.route.MyExcludedRouteBuilder]: No
>> default constructor found; nested exception is
>> java.lang.NoSuchMethodException:
>> com.myco.something.route.MyExcludedRouteBuilder.<init>()
>>         at
>> org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:85)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1088)
>>         ... 68 more
>> Caused by: java.lang.NoSuchMethodException:
>> com.myco.something.route.MyExcludedRouteBuilder.<init>()
>>         at java.lang.Class.getConstructor0(Class.java:2892)
>>         at java.lang.Class.getDeclaredConstructor(Class.java:2058)
>>         at
>> org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:80)
>>         ... 69 more
>>
>>
>> I cannot find an example of using /excludes/ with /contextScan/, other than
>> what I see here:
>> http://camel.apache.org/spring.html
>>
>> It states that I can use the same ANT-style patterns to exclude/include
>> classes as with /<packageScan>/. I have tried wild cards as well as
>> specifying the full class name explicitly (as shown in the example above.)
>> Nothing excludes the class during Camel's context scanning. Why? Am I doing
>> it incorrectly?  Or is it a bug?
>>
>> Thanks for any help!
>>
>>
>>
>> --
>> View this message in context: 
>> http://camel.465427.n5.nabble.com/Excluding-prototype-scoped-Component-route-builder-from-contextScan-tp5768755.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: cib...@redhat.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
> hawtio: http://hawt.io/
> fabric8: http://fabric8.io/



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cib...@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
hawtio: http://hawt.io/
fabric8: http://fabric8.io/

Reply via email to