Use reference to access your App component that Ds creates for you. You currently have two instances of App - one from DS and one from your <bean>.
On Fri, 9 Jun 2023, 23:33 z8sbk.yahoo.com.ar via user, < user@karaf.apache.org> wrote: > Hi Paul, > I'm not sure what you mean with using <reference> instead of <bean>. I > tried this: > > > <?xml version="1.0" encoding="UTF-8"?> > <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> > > <reference id="conf" interface="com.conf.IConf"/> > > <bean id="app" class="com.app.App" > > > <property name="conf" ref="conf"/> > > </bean> > > > <camelContext xmlns="http://camel.apache.org/schema/blueprint"> > <route> > <from uri="timer:simple?period=5000"/> > <to uri="bean:app?method=doIt"/> > </route> > </camelContext> > > </blueprint> > > Now the error is: > > 19:21:14.974 ERROR [xxxx\apache-karaf-4.2.15/deploy] Unable to start > container for blueprint bundle confByDS.xml/0.0.0 > org.osgi.service.blueprint.container.ComponentDefinitionException: Unable > to find property descriptor conf on com.app.App > at > org.apache.aries.blueprint.container.BeanRecipe.getPropertyDescriptor(BeanRecipe.java:831) > ~[!/:1.10.3] > at > org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:813) > ~[!/:1.10.3] > at > org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:784) > ~[!/:1.10.3] > at > org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:765) > ~[!/:1.10.3] > at > org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:699) > ~[!/:1.10.3] > at > org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666) > ~[!/:1.10.3] > at > org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81) > ~[!/:1.10.3] > > Could you please fix my previous blueprint? > Thanks in advanced. > > El viernes, 9 de junio de 2023, 17:25:31 ART, Paul McCulloch < > pkmccull...@gmail.com> escribió: > > > You need to use <reference> in your blueprint to access your ds component. > Using <bean> creates a new instance, but doesn't wire it into the ds > infrastructure. > > On Fri, 9 Jun 2023, 16:22 z8sbk.yahoo.com.ar via user, < > user@karaf.apache.org> wrote: > > Hi, > I'm trying to understand how declarative service works. In a bundle, I > have these two clasess, very basic: > > @Component > public class App implements IApp { > > @Reference > private IConf conf; > > public App() {} > > public void doIt() { > > System.out.println("foo=" + conf.getFoo()); > > } > > } > > @Component(name = "Conf", immediate = true, configurationPid = "confByDS") > public class Conf implements IConf { > > private String foo = "bar"; > > > public Conf() {} > @Override > > public String getFoo() { > > return foo; > > } > > @Activate > @Modified > public void activate(ComponentContext context) { > > foo = context.getProperties().get("foo") != null ? (String) > context.getProperties().get("foo") : this.foo; > > } > > } > > Then, I have this blueprint/camel route: > > <?xml version="1.0" encoding="UTF-8"?> > <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> > > <bean id="app" class="com.app.App" /> > <camelContext xmlns="http://camel.apache.org/schema/blueprint"> > <route> > <from uri="timer:simple?period=5000"/> > <to uri="bean:app?method=doIt"/> > </route> > </camelContext> > > </blueprint> > > After deploying the bundle, when I put the blueprint in /deploy, throws a > NullPointerException in conf.getFoo(), which means that the Conf reference > is not injected: > > Message History > > --------------------------------------------------------------------------------------------------------------------------------------- > RouteId ProcessorId Processor > Elapsed (ms) > [route3 ] [route3 ] [timer://simple?period=5000 > ] [ 7] > [route3 ] [to2 ] [bean:app?method=doIt > ] [ 0] > > Stacktrace > > --------------------------------------------------------------------------------------------------------------------------------------- > java.lang.NullPointerException: null > at com.app.App.doIt(App.java:17) ~[!/:?] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > ~[?:1.8.0_321] > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > ~[?:1.8.0_321] > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:1.8.0_321] > > I think I'm misunderstanding how the DI in Karaf works plus DS, could you > please tell me what am I missing? Does DS work with Camel XML DSL routes? > > Thanks in advanced. > Nick. > > >