Hi, I'm trying to understand how declarative service works. In a bundle, I have
these two clasess, very basic:
@Componentpublic class App implements IApp {
@Referenceprivate 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@Modifiedpublic 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.