Hendy Irawan created ARIES-960:
----------------------------------
Summary: 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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira