Hi Charles,

I think you made a mistake on Produce annotation.
Here is the Java doc of the @Produce
/**
* Marks a field or property as being a producer to an {...@link org.apache.camel.Endpoint} either via its * <a href="http://camel.apache.org/uris.html";>URI</a> or via the name of the endpoint reference * which is then resolved in a registry such as the Spring Application Context.
 */
It's used as a Endpoint not a ProducerTemplate.

For your case you can use the spring's @Autowired to inject the template.

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:
There is no @Endpoint(ref="camelTemplate") annotation.

If I use the following syntax -->  @Produce(context="camelTemplate"), it works

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




Reply via email to