iPOJO API seems complicated to deal with, especially when embedding OSGI framework. After getting done with the class loader issues by keeping the API coding lines in an OSGI bundle, I am here having a new different issue:
In my bundle start method, I have the following code:
public void start(BundleContext context)
{
ComponentType x = new PrimitiveComponentType()
.setBundleContext(context)
.setClassName(InstanceFactoryImpl.class.getName())
.setValidateMethod("start")
.setInvalidateMethod("stop");
x.start();
try {
x.createInstance();
} catch (UnacceptableConfiguration e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MissingHandlerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("and we are done!");
}
InstanceFactoryImpl
class is in the same package as the following:
public class InstanceFactoryImpl implements instancefactory.InstanceFactory{
@Override
public void start() {
}
@Override
public void stop() {
}
}
When I load my bundle to Felix framework in my java application, I get the following error:
[ERROR] : [instancefactoryImpl.InstanceFactoryImpl-0] createInstance -> Cannot invoke the constructor (method not found) : instancefactoryImpl.InstanceFactoryImpl.<init>(org.apache.felix.ipojo.InstanceManager)
java.lang.NoSuchMethodException: instancefactoryImpl.InstanceFactoryImpl.<init>(org.apache.felix.ipojo.InstanceManager)
at java.lang.Class.getConstructor0(Class.java:2715)
at java.lang.Class.getDeclaredConstructor(Class.java:1987)
at org.apache.felix.ipojo.InstanceManager.createObject(InstanceManager.java:726)
at org.apache.felix.ipojo.InstanceManager.getPojoObject(InstanceManager.java:923)
at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__M_stateChanged(LifecycleCallbackHandler.java:156)
at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
at org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:536)
at org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:418)
at org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:179)
at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:319)
at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:240)
at org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:79)
at instancefactoryImpl.Activator.start(Activator.java:37)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2146)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2064)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)
at embedder.HostApplication.<init>(HostApplication.java:148)
at embedder.Embedder.main(Embedder.java:12)
[ERROR] instancefactoryImpl.InstanceFactoryImpl : Cannot create a POJO instance, the POJO constructor cannot be found
org.apache.felix.ipojo.ConfigurationException: The configuration is not correct for the type instancefactoryImpl.InstanceFactoryImpl : Cannot create a POJO instance, the POJO constructor cannot be found
at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:328)
at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:240)
at org.apache.felix.ipojo.api.ComponentType.createInstance(ComponentType.java:79)
at instancefactoryImpl.Activator.start(Activator.java:37)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2146)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2064)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)
at embedder.HostApplication.<init>(HostApplication.java:148)
at embedder.Embedder.main(Embedder.java:12)
Caused by: org.apache.felix.ipojo.ConfigurationException: Cannot create a POJO instance, the POJO constructor cannot be found
at org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:191)
at org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:319)
... 10 more
Caused by: java.lang.RuntimeException: Cannot create a POJO instance, the POJO constructor cannot be found
at org.apache.felix.ipojo.InstanceManager.createObject(InstanceManager.java:766)
at org.apache.felix.ipojo.InstanceManager.getPojoObject(InstanceManager.java:923)
at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__M_stateChanged(LifecycleCallbackHandler.java:156)
at org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
at org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:536)
at org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:418)
at org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:179)
... 11 more
Caused by: java.lang.NoSuchMethodException: instancefactoryImpl.InstanceFactoryImpl.<init>(org.apache.felix.ipojo.InstanceManager)
at java.lang.Class.getConstructor0(Class.java:2715)
at java.lang.Class.getDeclaredConstructor(Class.java:1987)
at org.apache.felix.ipojo.InstanceManager.createObject(InstanceManager.java:726)
... 17 more
I am getting the error at the following line:
x.createInstance();
I tried to explicitly define a constructor, and to add a method called "init". All this failed, and the same error keeps showing. What should I do? Thanks?