You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by "Valentin Mahrwald (JIRA)" <ji...@apache.org> on 2010/05/29 13:09:37 UTC
[jira] Commented: (ARIES-325) static factory methods with the same
names are not distinguished during bean instantiation
[ https://issues.apache.org/jira/browse/ARIES-325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12873270#action_12873270 ]
Valentin Mahrwald commented on ARIES-325:
-----------------------------------------
Hm, I could not recreate this problem in a unit test environment using
public class Factory {
public static X getObject() { return some X; }
}
public class ExtFactory extends Factory {
public static Y getObject() { return some Y; }
}
with (X,Y) = (Collection,List), (List,ArrayList), (Number, Integer), (Frame, JFrame) so most combinations of interfaces, abstract classes and concrete classes.
The only thing that I found that did fail in the way is (X,Y) = (Double,Integer). Now this is not valid Java (as far as my compiler is concerned) and ExtFactory will no longer compile. But with a previously compiled ExtFactory class file I saw the same error.
Richard, do you have a concrete example where this problem occurs?
> static factory methods with the same names are not distinguished during bean instantiation
> ------------------------------------------------------------------------------------------
>
> Key: ARIES-325
> URL: https://issues.apache.org/jira/browse/ARIES-325
> Project: Aries
> Issue Type: Bug
> Components: Blueprint
> Reporter: Richard Ellis
> Assignee: Valentin Mahrwald
> Priority: Minor
>
> I have a class SuperClass with a static method:
> public static SuperObject getObject(){...return SuperObject}
> this class is subclassed by SubClass which also has a static method:
> public static SubObject getObject(){...return SubObject}
> where SubObject extends SuperObject
> when I use <bean id="someFactoryBean" class="SubClass" factory-method="getObject"/> I get a ComponentDefinitionException:
> ServiceRecipe E org.apache.aries.blueprint.container.ServiceRecipe createService Error retrieving service from ServiceRecipe[name='.component-2']
> org.osgi.service.blueprint.container.ComponentDefinitionException: Multiple matching factory methods getObject found on class
> my.package.SubClass for arguments [] when instanciating bean someFactoryBean: [
> public static my.package.SubClass.getObject(),
> public static my.package.SuperClass.getObject()]
> at org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:248)
> at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:675)
> at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64)
> at org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:60)
> at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64)
> at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:219)
> at org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:198)
> at org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:137)
> at org.apache.aries.blueprint.container.ServiceRecipe.createRecipe(ServiceRecipe.java:350)
> at org.apache.aries.blueprint.container.ServiceRecipe.createService(ServiceRecipe.java:256)
> at org.apache.aries.blueprint.container.ServiceRecipe.internalGetService(ServiceRecipe.java:228)
> at org.apache.aries.blueprint.container.ServiceRecipe.getService(ServiceRecipe.java:307)
> at org.apache.aries.blueprint.container.ServiceRecipe$TriggerServiceFactory.getService(ServiceRecipe.java:365)
> at org.eclipse.osgi.internal.serviceregistry.ServiceUse$1.run(ServiceUse.java:120)
> at java.security.AccessController.doPrivileged(AccessController.java:202)
> at org.eclipse.osgi.internal.serviceregistry.ServiceUse.getService(ServiceUse.java:118)
> at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:449)
> at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:430)
> at org.eclipse.osgi.framework.internal.core.BundleContextImpl.getService(BundleContextImpl.java:667)
> at org.apache.aries.blueprint.container.BlueprintContainerImpl.getService(BlueprintContainerImpl.java:400)
> at org.apache.aries.blueprint.container.ReferenceRecipe.getService(ReferenceRecipe.java:180)
> at org.apache.aries.blueprint.container.ReferenceRecipe.access$000(ReferenceRecipe.java:49)
> at org.apache.aries.blueprint.container.ReferenceRecipe$ServiceDispatcher.call(ReferenceRecipe.java:201)
> at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe$CgLibProxyFactory$1.loadObject(AbstractServiceReferenceRecipe.java:634)
> I think the bean should be instantiated using the static method declared on the class I specified as an attribute.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.