aries-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jean-Baptiste Onofré (Jira) <j...@apache.org>
Subject [jira] [Commented] (ARIES-1957) Using Generic types throws Unknown type exception
Date Wed, 20 May 2020 07:37:00 GMT

    [ https://issues.apache.org/jira/browse/ARIES-1957?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17111868#comment-17111868
] 

Jean-Baptiste Onofré commented on ARIES-1957:
---------------------------------------------

There's a unit test in Aries Blueprint testing constructor with generic (using BeamRecipe).
However, I'm not sure it's exactly the same use case. Let me check and eventually improve
the test to reproduce/identify the issue.

It seems it worked fine with blueprint 1.8.x right ?

> 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)

Mime
View raw message