Thank you Mr. Clement for your response.
Before trying to use manipulation, which I already done in the past. I wanted
to show you this interesting scenario,
This worked for me:
new PrimitiveComponentType()
.setBundleContext(context)
.setClassName(PlainHelloImpl.class.getName())
.addService(new Service())
.createInstance(); // Create the instance
But this did not work for me:
new PrimitiveComponentType()
.setBundleContext(context)
.setClassName(PlainHelloImpl.class.getName())
.createInstance(); // Create the instance
As you can see, the only difference is adding the service. What? Why?
Zaid
-----Original Message-----
From: Clement Escoffier [mailto:[email protected]]
Sent: 02 آذار, 2014 10:48 م
To: Apache Felix - Users Mailing List
Subject: Re: Using iPOJO API shows “ Cannot create a POJO instance, the POJO
constructor cannot be found”
Hi,
When using the iPOJO API, it tries to manipulate the component implement
classes at runtime (if there are not already manipulated). It looks like this
manipulation does not happen in your case. To be sure it is the issue, try to
manipulate the class first (add @Component on it, and use ant of maven to build
your bundle).
Clement
On 2 mars 2014, at 19:13, Zaid Jamal Saeed Al Mahmoud
<[email protected]> wrote:
> Hey, I am trying to use iPOJO API to create component type. (I don’t want to
> use iPOJO Annotations).
>
> 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?
>
>
>
> Kind Regards,
> Zaid Almahmoud
> Research Assistant
>
> Khalifa University of Science, Technology, and Research Abu Dhabi -
> United Arab Emirates
> TEL: 00971-2-401-8178
> MOB: 00971-50-9619601
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]