in webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java [73:126]
public T inject(InjectionPoint injectionPoint)
{
T injected;
BeanManagerImpl beanManager = creationalContext.getWebBeansContext().getBeanManagerImpl();
//Injected contextual bean
Bean<?> injectedBean = beanManager.getInjectionResolver().getInjectionPointBean(injectionPoint);
//Injection for dependent instance InjectionPoint fields
boolean dependentProducer = false;
if(WebBeansUtil.isDependent(injectedBean) && !injectionPoint.isTransient() && injectedBean instanceof AbstractProducerBean
&& creationalContext.getBean() != null && beanManager.isPassivatingScope(creationalContext.getBean().getScope()))
{
dependentProducer = true;
}
CreationalContext<?> injectionPointContext;
if (injectionPoint.getAnnotated().isAnnotationPresent(TransientReference.class))
{
injectionPointContext = transientCreationalContext;
}
else
{
injectionPointContext = creationalContext;
}
//Gets injectable reference for injected bean
injected = (T) beanManager.getInjectableReference(injectionPoint, injectionPointContext);
if (injected == null)
{
if (beanManager.isNormalScope(injectedBean.getScope()))
{
throw new IllegalStateException("InjectableReference is 'null' for " + injectionPoint.toString());
}
Class<?> type = ClassUtil.getClass(injectionPoint.getType());
if (type.isPrimitive())
{
injected = (T) ClassUtil.getDefaultValue(type);
}
}
/*X TODO see spec issue CDI-140 */
if(dependentProducer)
{
if(injected != null && !Serializable.class.isAssignableFrom(injected.getClass()))
{
throw new IllegalProductException("A producer method or field of scope @Dependent returns an unserializable object for injection " +
"into an injection point "+ injectionPoint +" that requires a passivation capable dependency");
}
}
return injected;
}