Jerome MICHEL created KARAF-6537:
------------------------------------
Summary: Runtime error when trying to use generics in blueprint
Key: KARAF-6537
URL: https://issues.apache.org/jira/browse/KARAF-6537
Project: Karaf
Issue Type: Bug
Components: karaf
Affects Versions: 4.2.6
Environment: Karaf 4.2.6
Java JDK 11.0.5
Reporter: Jerome MICHEL
We currently have a working project on Karaf 4.1.1 & Java-8 but we want to
migrate to Java-11 so we needed to migrate to Karaf 4.2.x which has Java-11
support.
We choose to migrate to Karaf 4.2.6 due to issues with Log4j and pax-logging
dependency in Karaf 4.2.7
While we were able to create generic beans from blueprint in Karaf 4.1.1, it
seems the mecanism has changed and this is no longuer the case, every
constructor we use with Generics now throws a RuntimeException. As an example
we used a lot of SimpleObjectProperty which was included in JavaFX in Java-8
(We also integrate OpenJFX through our migration to Java-11). We had this
declaration which was working really fine in Karaf 4.1.1 :
{code:java}
<bean id="MySuperProperty" class="javafx.beans.property.SimpleObjectProperty">
<argument ref="MySuperObject" />
</bean>{code}
Now with Karaf 4.2.6 the bundle containing this declaration fail to start and a
diag for this bundles gives :
{code:java}
Status: Failure Blueprint Exception: Unable to instantiate components
org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to
instantiate components at
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:741)
at
org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:433)
at
org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at
org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)
at
org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:45)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834) Caused by:
java.lang.RuntimeException: Unknown type T at
org.apache.aries.blueprint.utils.generics.TypeInference.getParameters(TypeInference.java:449)
at
org.apache.aries.blueprint.utils.generics.TypeInference.match(TypeInference.java:262)
at
org.apache.aries.blueprint.utils.generics.TypeInference.findMatching(TypeInference.java:231)
at
org.apache.aries.blueprint.utils.generics.TypeInference.findMatchingConstructors(TypeInference.java:125)
at
org.apache.aries.blueprint.container.BeanRecipe.findMatchingConstructors(BeanRecipe.java:373)
at
org.apache.aries.blueprint.container.BeanRecipe.getInstanceFromType(BeanRecipe.java:346)
at
org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:283)
at
org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:685)
at
org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666)
at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at
org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90) at
org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360)
at
org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:190)
at
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:737)
... 12 more
{code}
Trying with other class we came to a conclusion that the faulty stuff was the
Generic from the constructor of the SimpleObjectProperty which may be :
{code:java}
public class SimpleObjectProperty<T> extends ObjectPropertyBase<T> {
[...]
public SimpleObjectProperty(T var) {...}
[...]
}{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)