I’m not using the annotations, but it sounds like the same issue. I tried something else that seems to work - if I use the Bean Component ( http://camel.apache.org/bean.html <http://camel.apache.org/bean.html> ), everything seems to be working as I’d expect.
So if I change my RouteBuilder to look like this: public class BeanComponentBuilder extends RouteBuilder { Logger log = LoggerFactory.getLogger(this.getClass()); String blueprintServiceReferenceId; @Override public void configure() throws Exception { from("timer://bean-component-builder?period=5000") .setBody( simple( "${exchangeProperty[" + Exchange.TIMER_FIRED_TIME + "]}") ) .log("Calling Service via Reference: ${body}" ) .toF( "bean:%s?cache=%b", blueprintServiceReferenceId, false ) .log("Finished" ) .to( "mock://result"); } public String getBlueprintServiceReferenceId() { return blueprintServiceReferenceId; } public void setBlueprintServiceReferenceId(String blueprintServiceReferenceId) { this.blueprintServiceReferenceId = blueprintServiceReferenceId; } } And my Blueprint to look like this: <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0" 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 http://camel.apache.org/schema/blueprint/camel-blueprint.xsd" > <reference id="echo-service" interface="com.pronoia.test.osgi.service.Echo" filter="instance=one" timeout="2000" /> <bean id="bean-component-builder" class="com.pronoia.test.camel.builder.impl.BeanComponentBuilder"> <property name="blueprintServiceReferenceId" value="echo-service" /> </bean> <camelContext id="bean-component-context" xmlns="http://camel.apache.org/schema/blueprint"> <routeBuilder ref="bean-component-builder" /> </camelContext> </blueprint> It seems to work as I’d expect. However, if I inject the service reference into the RouteBuilder at all, the dynamic behavior is broken. If I change my RouteBuiler to look like this: public class BeanComponentBuilder extends RouteBuilder { Logger log = LoggerFactory.getLogger(this.getClass()); String blueprintServiceReferenceId; Echo dummyServiceReference; @Override public void configure() throws Exception { from("timer://bean-component-builder?period=5000") .setBody( simple( "${exchangeProperty[" + Exchange.TIMER_FIRED_TIME + "]}") ) .log("Calling Service via Reference: ${body}" ) .toF( "bean:%s?cache=%b", blueprintServiceReferenceId, false ) .log("Finished" ) .to( "mock://result"); } public String getBlueprintServiceReferenceId() { return blueprintServiceReferenceId; } public void setBlueprintServiceReferenceId(String blueprintServiceReferenceId) { this.blueprintServiceReferenceId = blueprintServiceReferenceId; } public Echo getDummyServiceReference() { return dummyServiceReference; } public void setDummyServiceReference(Echo dummyServiceReference) { this.dummyServiceReference = dummyServiceReference; } } And my Blueprint to look like this: <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0" 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 http://camel.apache.org/schema/blueprint/camel-blueprint.xsd" > <reference id="echo-service" interface="com.pronoia.test.osgi.service.Echo" filter="instance=one" timeout="2000" /> <bean id="bean-component-builder" class="com.pronoia.test.camel.builder.impl.BeanComponentBuilder"> <property name="blueprintServiceReferenceId" value="echo-service" /> <property name="dummyServiceReference" ref="echo-service" /> </bean> <camelContext id="bean-component-context" xmlns="http://camel.apache.org/schema/blueprint"> <routeBuilder ref="bean-component-builder" /> </camelContext> </blueprint> All that’s different between the two is the reference to the service is injected into the route builder - but it’s never used. Quinn Stevenson > On Jan 27, 2016, at 10:32 AM, Ranx <brad.john...@mediadriver.com> wrote: > > This is serendipitous as I've recently run into this as well. I switched > from straight Blueprint routes and instantiation to using blueprint to > bootstrap the routebuilder(s). But the injection of the reference to the > service from blueprint doesn't appear to be proxied as I see the concrete > class and the hot swapping isn't working as expected. > > If I'm understanding this correctly it doesn't matter if the route builder > is bootstrapped through blueprint it is still going to use the simple > registry mechanics instead of the OSGi service registry. In bundle A I have > blueprint that looks like: > > <service interface="my.services.api.InvoiceDocumentService"> > <bean class="my.services.test.internal.TestInvoiceServiceImpl" > /> > </service> > > In bundle B I have this startup. > <camelContext xmlns="http://camel.apache.org/schema/blueprint"> > <package>my.routes.internal</package> > </camelContext> > > In the routes package I have an @BeanInject for the > my.services.api.InvoiceDocumentService. They live in different bundles and > the internals are not exported. But when I do a .getClass().getName on the > service api received in bundle B it shows the implementation class. I don't > believe that's the proxy class. > > So it appears that using this mechanic is skirting the OSGi service proxying > mechanism. Is that a correct assessment? > > > > -- > View this message in context: > http://camel.465427.n5.nabble.com/Invoking-Dynamic-OSGi-Blueprint-services-from-a-Java-RouteBuilder-tp5776755p5776848.html > Sent from the Camel - Users mailing list archive at Nabble.com.