[ https://issues.apache.org/jira/browse/ARIES-960?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15636947#comment-15636947 ]
Guillaume Nodet commented on ARIES-960: --------------------------------------- I have a few improvements based on some stuff in this thread, but this is currently not sufficient to fix this issue. The problem is that we need to do type inference in order to map S to PojoA and T to PojoB. I'll try to have another look next week. > ComponentDefinitionException: Unable to find a matching constructor - cannot > create beans with generics > ------------------------------------------------------------------------------------------------------- > > Key: ARIES-960 > URL: https://issues.apache.org/jira/browse/ARIES-960 > Project: Aries > Issue Type: Bug > Components: Blueprint > Affects Versions: blueprint-core-1.0.1 > Environment: Karaf > Karaf version 2.3.0 > Karaf home /home/ceefour/git/bippo-commerce5/karaf > Karaf base /home/ceefour/git/bippo-commerce5/karaf > OSGi Framework org.apache.felix.framework - 4.0.3 > JVM > Java Virtual Machine OpenJDK 64-Bit Server VM version 23.2-b09 > Version 1.7.0_07 > Vendor Oracle Corporation > Uptime 7 minutes > Total compile time 33.261 seconds > Threads > Live threads 101 > Daemon threads 86 > Peak 135 > Total started 177 > Memory > Current heap size 228,508 kbytes > Maximum heap size 466,048 kbytes > Committed heap size 256,000 kbytes > Pending objects 0 > Garbage collector Name = 'PS Scavenge', Collections = 55, Time = > 0.443 seconds > Garbage collector Name = 'PS MarkSweep', Collections = 2, Time = > 0.280 seconds > Classes > Current classes loaded 11,212 > Total classes loaded 11,213 > Total classes unloaded 1 > Operating system > Name Linux version 3.2.0-32-generic > Architecture amd64 > Processors 8 > Reporter: Hendy Irawan > > This is similar to #ARIES-834 and #ARIES-843, which was reported as fixed, > but for some reason, it's not fixed in my case. > {code} > 2012-11-07 18:30:50,648 | ERROR | rint Extender: 3 | BlueprintContainerImpl > | container.BlueprintContainerImpl 375 | 7 - > org.apache.aries.blueprint.core - 1.0.1 | Unable to start blueprint container > for bundle berbatik_security.xml > org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to > find a matching constructor on class org.soluvas.web.login.SoluvasRealm for > arguments > [org.apache.aries.blueprint.container.BeanRecipe$UnwrapperedBeanHolder@5c2a497b, > > org.apache.aries.blueprint.container.BeanRecipe$UnwrapperedBeanHolder@5c3e5982] > when instanciating bean shiroRealm > at > org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:336)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:806)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)[7:org.apache.aries.blueprint.core:1.0.1] > at > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1.7.0_07] > at java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0_07] > at > org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:106)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:933)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:907)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:888)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:820)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)[7:org.apache.aries.blueprint.core:1.0.1] > at > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1.7.0_07] > at java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0_07] > at > org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:646)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:353)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:252)[7:org.apache.aries.blueprint.core:1.0.1] > at > org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)[7:org.apache.aries.blueprint.core:1.0.1] > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)[:1.7.0_07] > at > java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1.7.0_07] > at java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0_07] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)[:1.7.0_07] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)[:1.7.0_07] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)[:1.7.0_07] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)[:1.7.0_07] > at java.lang.Thread.run(Thread.java:722)[:1.7.0_07] > {code} > The constructor: > {code} > public SoluvasRealm(Supplier<SecurityCatalog> securityCatalogSupplier, > SecurityRepository securityRepo) { > super(); > this.securityCatalogSupplier = securityCatalogSupplier; > this.securityRepo = securityRepo; > setName(securityRepo.getDomainBase()); > CredentialsMatcher cm = new > LdapBindCredentialsMatcher(securityRepo.getBindConfig(), > securityRepo.getUsersRdn() + "," + > securityRepo.getDomainBase()); > setCredentialsMatcher(cm); > } > {code} > Relevant beans: > {code} > <bean id="securityPackage" > class="org.soluvas.security.impl.SecurityPackageImpl" factory-method="init" /> > <bean id="aggregatingSecurityCatalogSupplier" > class="org.soluvas.commons.AggregatingSupplier"> > <argument> > <bean class="org.soluvas.security.impl.SecurityFactoryImpl" > factory-method="init" /> > </argument> > <argument> > <bean factory-ref="securityPackage" > factory-method="getSecurityCatalog" /> > </argument> > <argument> > <list /> > </argument> > </bean> > <service ref="aggregatingSecurityCatalogSupplier" auto-export="interfaces"> > <service-properties> > <entry key="clientId" value="${clientId}" /> > <entry key="tenantEnv" value="${tenantEnv}" /> > <entry key="tenantId" value="${tenantId}" /> > <entry key="suppliedClass" > value="org.soluvas.security.SecurityCatalog" /> > <entry key="layer" value="application" /> > </service-properties> > </service> > <bean id="securityRepo" > class="org.soluvas.security.ldap.LdapSecurityRepository"> > <argument ref="ldapPool" /> > <argument value="${mallLdapBaseDn}" /> > <argument> > <bean factory-ref="ldapConfigSupplier" factory-method="get" /> > </argument> > <argument ref="rolePersonAssoc" /> > </bean> > <service ref="securityRepo" auto-export="interfaces"> > <service-properties> > <entry key="clientId" value="${clientId}" /> > <entry key="tenantId" value="${tenantId}" /> > <entry key="tenantEnv" value="${tenantEnv}" /> > </service-properties> > </service> > <bean id="shiroRealm" class="org.soluvas.web.login.SoluvasRealm" > init-method="init"> > <argument ref="aggregatingSecurityCatalogSupplier" /> > <argument ref="securityRepo" /> > </bean> > {code} > Removing the generics in the constructor parameter makes it work: > {code} > Supplier<SecurityCatalog> securityCatalogSupplier > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)