in webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java [962:1022]
private void validateAlternatives(Map<BeanArchiveInformation, Map<AnnotatedType<?>, ExtendedBeanAttributes<?>>> beanAttributesPerBda)
{
Set<Class<?>> xmlConfiguredAlternatives = webBeansContext.getAlternativesManager().getXmlConfiguredAlternatives();
InjectionResolver injectionResolver = webBeansContext.getBeanManagerImpl().getInjectionResolver();
for (Class<?> alternativeClass : xmlConfiguredAlternatives)
{
// If the class itself is annotated with @Alternative, then all is fine
if (AnnotationUtil.hasClassAnnotation(alternativeClass, Alternative.class) ||
AnnotationUtil.hasMetaAnnotation(alternativeClass.getAnnotations(), Alternative.class))
{
continue;
}
if (hasAlternativeProducerMethod(alternativeClass))
{
continue;
}
boolean foundAlternativeClass = false;
Set<Bean<?>> beans = injectionResolver.implResolveByType(false, alternativeClass, AnyLiteral.INSTANCE);
if (beans == null || beans.isEmpty())
{
out:
for (Map<AnnotatedType<?>, ExtendedBeanAttributes<?>> annotatedTypeExtendedBeanAttributesMap : beanAttributesPerBda.values())
{
for (Map.Entry<AnnotatedType<?>, ExtendedBeanAttributes<?>> exType : annotatedTypeExtendedBeanAttributesMap.entrySet())
{
if (alternativeClass.equals(exType.getKey().getJavaClass()))
{
if (exType.getValue().beanAttributes.isAlternative() ||
exType.getKey().getAnnotation(Alternative.class) != null)
{
foundAlternativeClass = true;
break out; // all fine, continue with the next
}
}
}
}
}
else
{
for (Bean<?> bean : beans)
{
if (bean.isAlternative())
{
foundAlternativeClass = true;
break;
}
}
}
if (!foundAlternativeClass)
{
throw new WebBeansDeploymentException("Given alternative class : " + alternativeClass.getName() +
" is not annotated wih @Alternative or not an enabled bean");
}
}
}