[ https://issues.apache.org/jira/browse/ARIES-1957?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17253784#comment-17253784 ]
Harrison Tarr commented on ARIES-1957: -------------------------------------- Hi just chiming in, I'm also running into this error. I'm trying to use generic parameters on my class but get a class cast exception when it tries to go from my `GenericWrapper<SpecificClass>` to `GenericWrapper<Object`, so I thought of passing the generic as an argument to the constructor - maybe it would inform the class that its type should be `SpecificClass` and not `Object` > Using Generic types throws Unknown type exception > ------------------------------------------------- > > Key: ARIES-1957 > URL: https://issues.apache.org/jira/browse/ARIES-1957 > Project: Aries > Issue Type: Bug > Components: Blueprint > Affects Versions: blueprint-core-1.8.0 > Environment: Karaf 4.2.6 > JDK 11.5 > Reporter: Jerome MICHEL > Assignee: Jean-Baptiste Onofré > Priority: Major > Fix For: blueprint-core-1.8.4, blueprint-core-1.9.1 > > > We are currently trying to migrate from Karaf 4.1.1 which uses Apache Aries > Blueprint v1.8.0 to Karaf 4.2.6 which uses Aries Blueprint v1.10.2 > While we were able to handle beans with Generic constructors in the previous > version, any usage of Generics now throws a RuntimeException saying the type > is not known. > With this definition in Blueprint : > {code:java} > <bean id="sharedModel" class="javafx.beans.property.SimpleObjectProperty> > <argument> > <bean class="com.example.MySuperModel" /> > </argument> > </bean>{code} > The definition of the javaFX class is like : > > > {code:java} > public class SimpleObjectProperty<T> extends ObjectPropertyBase<T> { > [...] > public SimpleObjectProperty() { > ... > } > public SimpleObjectProperty(T var) { > ... > } > }{code} > The instanciation of this bean result in : > > > {code:java} > 2019-12-05T09:35:44,162 | ERROR | Blueprint Extender: 3 | > org.apache.aries.blueprint.container.BlueprintContainerImpl | 102 - > org.apache.aries.blueprint.core - 1.10.2 | Unable to start container for > blueprint bundle com.test.hmi/1.4.0.SNAPSHOT > org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to > instantiate components > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:741) > ~[102:org.apache.aries.blueprint.core:1.10.2] > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:433) > [102:org.apache.aries.blueprint.core:1.10.2] > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298) > [102:org.apache.aries.blueprint.core:1.10.2] > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?] > at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?] > at > org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106) > [102:org.apache.aries.blueprint.core:1.10.2] > at > org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:45) > [102:org.apache.aries.blueprint.core:1.10.2] > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?] > at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) > [?:?] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > [?:?] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > [?:?] > at 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.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} > > We tried to investigate around this error trying to know if we made a mistake > on our side. > As far as we tested and tried to debug in the blueprint's classes, we found > that when blueprint is matching constructors from what the class has and the > parameters he received only _Class_ and _ParametrizedType_ are handled in > _TypeInference#getParameters(Type)_. But due to genericity, we arrived with a > _TypeVariable,_ which is of type T with Object as generic bound. > So maybe this type can also be handled like other cases ? -- This message was sent by Atlassian Jira (v8.3.4#803005)