iPOJO API似乎很难处理,特别是在嵌入OSGI框架时。在通过将API编码行保留在OSGI包中来完成类加载器问题之后,我在这里遇到了一个新的不同问题:
在我的bundle start方法中,我有以下代码:
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
类与以下内容位于同一个包中:
public class InstanceFactoryImpl implements instancefactory.InstanceFactory{
@Override
public void start() {
}
@Override
public void stop() {
}
}
当我在我的java应用程序中将我的包加载到Felix框架时,我收到以下错误:
[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
我在以下行收到错误:
x.createInstance();
我尝试显式定义构造函数,并添加一个名为“init”的方法。所有这一切都失败了,同样的错误不断出现。我该怎么办?感谢?
答案 0 :(得分:2)
iPOJO核心软件包与iPOJO API软件包之间的版本不匹配。如果您使用的是iPOJO 1.11.0,则需要使用iPOJO API 1.11.0。
在iPOJO 1.11.0中,我们改变了操纵器过程。这使得由较旧版本的iPOJO API检测的捆绑包不合适。
的更多详情