Maciavelli
Maciavelli

Reputation: 101

Injecting blueprint bean into camel processor

please help me. How to inject bean declared in blueprint.xml to Camel processor? I am creating OSGI bundle for deployment in Jboss Fuse 6.1 container. My current blueprint.xml:

 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:camel="http://camel.apache.org/schema/blueprint"
               xmlns:camelcxf="http://camel.apache.org/schema/blueprint/cxf"
               xmlns:cxf="http://cxf.apache.org/blueprint/core"
               xmlns:jaxws="http://cxf.apache.org/blueprint/jaxws"

               xsi:schemaLocation="
           http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
             http://camel.apache.org/schema/blueprint/cxf http://camel.apache.org/schema/blueprint/cxf/camel-cxf.xsd
           http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd
            http://cxf.apache.org/blueprint/jaxws http://cxf.apache.org/schemas/blueprint/jaxws.xsd
     http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd"
    >
<bean id="MyProcessor" class="com.test.MyProcessor" />
<bean id="Sender" class="com.test.Sender" scope="prototype">
         <property name="senderId" value="admin" />
         <property name="password" value="admin" />
    </bean>
          <camelContext trace="false" id="blueprintContext" xmlns="http://camel.apache.org/schema/blueprint">
            <route>
                <from uri="activemq:queue:paymentsqueue?username=admin&amp;password=admin" id="NotificationRoute">
                    <description/>
                </from>
                <log message="The message contains ${body}"/>
                <process ref="MyProcessor"/>
            </route>
        </camelContext>
    </blueprint>

This is camel processor:

import org.apache.aries.blueprint.annotation.Inject; 
    public class MyProcessor implements Processor {

    @Inject
    private Sender sender;

    @Override
    public void process(Exchange x) throws Exception {
        log.info("test: " +sender.getSenderId());
    }

But I get NullPointerException. So is it possible to inject bean Sender which created by container into MyProccessor? How it could be done?

Upvotes: 1

Views: 1528

Answers (1)

Souciance Eqdam Rashti
Souciance Eqdam Rashti

Reputation: 3191

What is you want to acheive by the injection?

Normally processors are used like this:

 public void process(Exchange x) throws Exception {
    from("direct://start")
    .to("MyProcessor")        
    log.info("test: " +sender.getSenderId());
 }

Besides according to http://camel.apache.org/bean-integration.html injecting a processor is not supported.

Upvotes: 1

Related Questions