[
https://issues.jboss.org/browse/SEAMFACES-242?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12683694#comment-12683694
]
Fab Mars edited comment on SEAMFACES-242 at 4/12/12 5:38 PM:
-------------------------------------------------------------
You'll have it very soon.
Yes you can since the JSF Application(wrapper) retrieves Converter/Validators
matching *exactly* the specified FQCN. Not "anything that is assignable to the
FQCN".
By the way, the code ends up calling this method. The javadoc is (mostly)
right, the code doesn't match.
I'll check the impacts, etc.
{code}
/**
* Get a single CDI managed instance of a specific class. Return only the
first result if multiple beans are available.
* [...]
*/
public static <T> T getContextualInstance(final BeanManager manager, final
Class<T> type) {
T result = null;
Bean<T> bean = (Bean<T>) manager.resolve(manager.getBeans(type));
if (bean != null) {
CreationalContext<T> context =
manager.createCreationalContext(bean);
if (context != null) {
result = (T) manager.getReference(bean, type, context);
}
}
return result;
}
{code}
was (Author: fabmars):
You'll have it very soon.
By the way, the code ends up calling this method. The javadoc is (mostly)
right, the code doesn't match.
I'll check the impacts, etc.
{code}
/**
* Get a single CDI managed instance of a specific class. Return only the
first result if multiple beans are available.
* [...]
*/
public static <T> T getContextualInstance(final BeanManager manager, final
Class<T> type) {
T result = null;
Bean<T> bean = (Bean<T>) manager.resolve(manager.getBeans(type));
if (bean != null) {
CreationalContext<T> context =
manager.createCreationalContext(bean);
if (context != null) {
result = (T) manager.getReference(bean, type, context);
}
}
return result;
}
{code}
> WELD-001318 AmbiguousResolutionException with Converter having subclass
> -----------------------------------------------------------------------
>
> Key: SEAMFACES-242
> URL: https://issues.jboss.org/browse/SEAMFACES-242
> Project: Seam Faces
> Issue Type: Bug
> Components: CDI Integration, Validation & Conversion
> Affects Versions: 3.1.0.Final
> Environment: GF 3.1.2 with JDK 1.6.0b29 + SeamFaces 3.1.0 + RichFaces
> 4.2.0
> Reporter: Fab Mars
>
> On some page I have <rich:inputNumberSpinner label="Count"
> value="#{orderLine.quantity}" converter="IntegerOrNullConverter".../>
> The converter to use is explicit. But I also extended that converter class
> twice for other purposes.
> When accessing the page I get a WELD-001318 ambiguous dependency. Stacktrace
> below.
> SeamApplicationWrapper#createConverter ends up calling
> BeanManagerUtils#isDependentScoped which tries to CDI-resolve the the
> converter type. Naturally weld finds the 3 converters (the one I asked for
> and the 2 subclasses) and it complains as it should. I strongly believe
> calling BM#resolve here is wrong.
> The same will happen with SeamApplicationWrapper#createValidator.
> 1) These methods should deal with only the actual requested type
> 2) The use of BeanManagerUtils.getContextualInstance in
> SeamApplicationWrapper.attemptExtension will also lead to problems.
> 3) More generally, I BeanManagerUtils.isDependentScoped isn't selective
> enough either
> Instead of #resolve, another utility method like this may be called:
> {code}
> public <T> Set<Bean<?>> getExactBeanForType(final Class<T> type) {
> Set<Bean<?>> beans = manager.getBeans(type);
> for(Bean<?> bean : beans) {
> if(type.equals(bean.getBeanClass())) {
> return Collections.<Bean<?>>singleton(bean);
> }
> }
>
> return Collections.<Bean<?>>emptySet();
> }
> {code}
> Stacktrace of the issue:
> {code}
> GRAVE: org.jboss.weld.exceptions.AmbiguousResolutionException: WELD-001318
> Cannot resolve an ambiguous dependency between [Managed Bean [class
> org.mars.toolkit.jsf.converter.MonthConverter] with qualifiers [@Any
> @Default], Managed Bean [class
> org.mars.toolkit.jsf.converter.IntegerOrNullConverter] with qualifiers [@Any
> @Default], Managed Bean [class org.mars.toolkit.jsf.converter.YearConverter]
> with qualifiers [@Any @Default]]
> at
> org.jboss.weld.manager.BeanManagerImpl.resolve(BeanManagerImpl.java:1013)
> at
> org.jboss.seam.faces.util.BeanManagerUtils.isDependentScoped(BeanManagerUtils.java:74)
> at
> org.jboss.seam.faces.environment.SeamApplicationWrapper.attemptExtension(SeamApplicationWrapper.java:81)
> at
> org.jboss.seam.faces.environment.SeamApplicationWrapper.createConverter(SeamApplicationWrapper.java:60)
> at
> org.jboss.seam.faces.environment.SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.createConverter(SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.java)
> at
> com.sun.faces.facelets.tag.jsf.ValueHolderRule$LiteralConverterMetadata.applyMetadata(ValueHolderRule.java:85)
> at
> com.sun.faces.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:81)
> at
> javax.faces.view.facelets.MetaTagHandler.setAttributes(MetaTagHandler.java:129)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.setAttributes(DelegatingMetaTagHandler.java:102)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.setAttributes(BehaviorsAddingComponentHandlerWrapper.java:113)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.doNewComponentActions(ComponentTagHandlerDelegateImpl.java:409)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:159)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandle.java:137)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BeaviorsAddingComponentHandlerWrapper.java:53)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelgateImpl.java:184)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
> at
> com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
> at
> com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:86)
> at
> com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:308)
> at
> com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:367)
> at
> com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
> at
> com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199)
> at
> com.sun.faces.facelets.tag.ui.IncludeHandler.apply(IncludeHandler.java:120)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
> at
> com.sun.faces.facelets.tag.ui.DefineHandler.applyDefinition(DefineHandler.java:107)
> at
> com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:178)
> at
> com.sun.faces.facelets.impl.DefaultFaceletContext$TemplateManager.apply(DefaultFaceletContext.java:395)
> at
> com.sun.faces.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:366)
> at
> com.sun.faces.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:112)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
> at
> org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53)
> at com.sun.faces.
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
_______________________________________________
seam-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/seam-issues