Hi Willem, I have find the missing piece. To be able to u...@autowired in a Java class, the spring file containing the camel route must include :
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <context:annotation-config/> Kind regards, Charles Moulliard Senior Enterprise Architect (J2EE, .NET, SOA) Apache Camel - ServiceMix Committer ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Blog : http://cmoulliard.blogspot.com | Twitter : http://twitter.com/cmoulliard Linkedin : http://www.linkedin.com/in/charlesmoulliard | Skype: cmoulliard On Wed, Jun 30, 2010 at 2:30 PM, Willem Jiang <[email protected]> wrote: > Hi Charles, > > Please check out my test case here[1] > > [1]http://svn.apache.org/viewvc?rev=959163&view=rev > > Willem > ---------------------------------- > Apache Camel, Apache CXF committer > Open SOA http://www.fusesource.com > Blog http://willemjiang.blogspot.com > Tiwtter http://twitter.com/willemjiang > > > Charles Moulliard wrote: >> >> Hi Willem, >> >> I have tried what you proposes but get a NPE when I try to use camel >> ProducerTemplate in the class >> >> �...@autowired >> private ProducerTemplate producerTemplate; >> >> <!-- add route in camel context --> >> <camelContext id="camelAlarmManager" >> xmlns="http://camel.apache.org/schema/spring"> >> <template id="camelTemplate" /> >> <routeBuilder ref="alarmManager" /> >> >> </camelContext> >> >> Any idea is welcome ? >> >> KR, >> >> Charles Moulliard >> >> Senior Enterprise Architect (J2EE, .NET, SOA) >> Apache Camel - ServiceMix Committer >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> Blog : http://cmoulliard.blogspot.com | Twitter : >> http://twitter.com/cmoulliard >> Linkedin : http://www.linkedin.com/in/charlesmoulliard | Skype: cmoulliard >> >> >> >> On Tue, Jun 29, 2010 at 3:53 PM, Willem Jiang <[email protected]> >> wrote: >>> >>> Charles Moulliard wrote: >>>> >>>> There is no @Endpoint(ref="camelTemplate") annotation. >>>> >>>> If I use the following syntax --> �...@produce(context="camelTemplate"), it >>>> works >>> >>> The CamelPostProcessor will not handle this injection, as they are using >>> different camel context, so you don't get the exception. >>> >>> But the the template is not injected, and you can't use it to send >>> message. >>> >>> Willem >>> ---------------------------------- >>> Apache Camel, Apache CXF committer >>> Open SOA http://www.fusesource.com >>> Blog http://willemjiang.blogspot.com >>> Tiwtter http://twitter.com/willemjiang >>> >>>> KR, >>>> >>>> Charles Moulliard >>>> >>>> Senior Enterprise Architect (J2EE, .NET, SOA) >>>> Apache Camel - ServiceMix Committer >>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>> Blog : http://cmoulliard.blogspot.com | Twitter : >>>> http://twitter.com/cmoulliard >>>> Linkedin : http://www.linkedin.com/in/charlesmoulliard | Skype: >>>> cmoulliard >>>> >>>> >>>> >>>> On Tue, Jun 29, 2010 at 3:21 PM, Willem Jiang <[email protected]> >>>> wrote: >>>>> >>>>> Charles Moulliard wrote: >>>>>> >>>>>> If I try to use annotation in the class requesting the Producer >>>>>> >>>>>> �...@produce(ref="camelTemplate") >>>>>> private ProducerTemplate producerTemplate; >>>>>> >>>>>> and >>>>>> >>>>>> Camel Spring XML file >>>>>> >>>>>> <!-- add route in camel context --> >>>>>> <camelContext id="camelAlarmManager" >>>>>> xmlns="http://camel.apache.org/schema/spring"> >>>>>> <template id="camelTemplate" /> >>>>>> </camelContext> >>>>>> >>>>>> I get the following error : >>>>>> >>>>>> Caused by: java.lang.IllegalArgumentException: registry entry called >>>>>> camelTemplate of type org.apache.camel.Endpoint must be specified >>>>>> at >>>>>> org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:244) >>>>>> at >>>>>> >>>>>> >>>>>> org.apache.camel.util.CamelContextHelper.mandatoryLookup(CamelContextHelper.java:123) >>>>>> at >>>>>> >>>>>> >>>>>> org.apache.camel.util.CamelContextHelper.getEndpointInjection(CamelContextHelper.java:138) >>>>>> at >>>>>> >>>>>> >>>>>> org.apache.camel.impl.CamelPostProcessorHelper.getEndpointInjection(CamelPostProcessorHelper.java:125) >>>>>> at >>>>>> >>>>>> >>>>>> org.apache.camel.impl.CamelPostProcessorHelper.createInjectionProducerTemplate(CamelPostProcessorHelper.java:167) >>>>>> at >>>>>> >>>>>> >>>>>> org.apache.camel.impl.CamelPostProcessorHelper.getInjectionValue(CamelPostProcessorHelper.java:134) >>>>>> at >>>>>> >>>>>> >>>>>> org.apache.camel.spring.CamelBeanPostProcessor.injectField(CamelBeanPostProcessor.java:215) >>>>>> >>>>>> What is wrong ? >>>>> >>>>> Can you check if your annotation has other kind of annotation like >>>>> @Endpoint(ref="camelTemplate")? >>>>> >>>>> From the stack trace it looks like your class plan to inject a endpoint >>>>> with >>>>> the name of camelTemplate. >>>>> >>>>> Willem >>>>> >>>>> >>>>>> KR, >>>>>> >>>>>> >>>>>> Charles Moulliard >>>>>> >>>>>> Senior Enterprise Architect (J2EE, .NET, SOA) >>>>>> Apache Camel - ServiceMix Committer >>>>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>>> Blog : http://cmoulliard.blogspot.com | Twitter : >>>>>> http://twitter.com/cmoulliard >>>>>> Linkedin : http://www.linkedin.com/in/charlesmoulliard | Skype: >>>>>> cmoulliard >>>>>> >>>>>> >>>>>> >>>>>> On Tue, Jun 29, 2010 at 2:36 PM, Willem Jiang <[email protected]> >>>>>> wrote: >>>>>>> >>>>>>> I think we could export the CamelContext as the service, then use >>>>>>> camelContext.getRegistry().lookup("producerTemplate") to get the >>>>>>> template. >>>>>>> >>>>>>> Or we could think about export the producerTemplate as a service, >>>>>>> than >>>>>>> other >>>>>>> bundle has a way to access certain camel context. >>>>>>> >>>>>>> Willem >>>>>>> ---------------------------------- >>>>>>> Apache Camel, Apache CXF committer >>>>>>> Open SOA http://www.fusesource.com >>>>>>> Blog http://willemjiang.blogspot.com >>>>>>> Tiwtter http://twitter.com/willemjiang >>>>>>> >>>>>>> Christian Schneider wrote: >>>>>>>> >>>>>>>> Probably not directly but we could publish a service that serves >>>>>>>> the >>>>>>>> context. I am not sure if serving the context is a good idea though >>>>>>>> as >>>>>>>> it >>>>>>>> promotes an >>>>>>>> ugly style. It is like directly accessing a spring context. We >>>>>>>> should >>>>>>>> give >>>>>>>> this some thoughts before starting. But Charles could already do >>>>>>>> this >>>>>>>> in >>>>>>>> his >>>>>>>> project for the mean >>>>>>>> time. >>>>>>>> >>>>>>>> Greetings >>>>>>>> >>>>>>>> Christian >>>>>>>> >>>>>>>> Am 29.06.2010 08:00, schrieb Charles Moulliard: >>>>>>>>> >>>>>>>>> Can we export a camelContext (from one bundle) by exposing it as a >>>>>>>>> OSGI service using<osgi:reference> ? >>>>>>>>> >>>>>>>>> >>>>>>>>> On Tue, Jun 29, 2010 at 1:56 AM, Willem >>>>>>>>> Jiang<[email protected]> >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> Hi Charles, >>>>>>>>>> >>>>>>>>>> Both solutions are OK if you can get the SpringCamelContext for >>>>>>>>>> your >>>>>>>>>> bundle >>>>>>>>>> utility. >>>>>>>>>> And the option 1 is easy to understand :) >>>>>>>>>> >>>>>>>>>> Willem >>>>>>>>>> ---------------------------------- >>>>>>>>>> Apache Camel, Apache CXF committer >>>>>>>>>> Open SOA http://www.fusesource.com >>>>>>>>>> Blog http://willemjiang.blogspot.com >>>>>>>>>> Tiwtter http://twitter.com/willemjiang >>>>>>>>>> >>>>>>>>>> Charles Moulliard wrote: >>>>>>>>>>> >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> I have two bundles, one playing the role of an utility package >>>>>>>>>>> and >>>>>>>>>>> another where the camel context instantiates a Camel >>>>>>>>>>> ProducerTemplate. >>>>>>>>>>> What is the best way to retrieve the ProducerTemplate from my >>>>>>>>>>> bundle >>>>>>>>>>> utility : >>>>>>>>>>> >>>>>>>>>>> 1) using SpringCamelContext --> SpringCamelContext camel = >>>>>>>>>>> (SpringCamelContext) ac.getBean("producerTemplate"); >>>>>>>>>>> 2) using @ProducerTemplate + ref to the bean object --> >>>>>>>>>>> @ProducerTemplate(ref="producerTemplate"); >>>>>>>>>>> 3) ... >>>>>>>>>>> >>>>>>>>>>> Kind regards, >>>>>>>>>>> >>>>>>>>>>> Charles Moulliard >>>>>>>>>>> >>>>>>>>>>> Senior Enterprise Architect (J2EE, .NET, SOA) >>>>>>>>>>> Apache Camel - ServiceMix Committer >>>>>>>>>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>>>>>>>> Blog : http://cmoulliard.blogspot.com | Twitter : >>>>>>>>>>> http://twitter.com/cmoulliard >>>>>>>>>>> Linkedin : http://www.linkedin.com/in/charlesmoulliard | Skype: >>>>>>>>>>> cmoulliard >>>>>>>>>>> >>> >> > >
