Author: cpopetz
Date: 2009-09-28 10:19:21 -0400 (Mon, 28 Sep 2009)
New Revision: 3791
Modified:
ri/trunk/impl/src/main/java/org/jboss/webbeans/SimpleInjectionTarget.java
Log:
allow creation of InjectionTarget<T> where T is non-Producible by deferring
exception until produce() is invoked
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/SimpleInjectionTarget.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/SimpleInjectionTarget.java 2009-09-25
19:32:22 UTC (rev 3790)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/SimpleInjectionTarget.java 2009-09-28
14:19:21 UTC (rev 3791)
@@ -57,8 +57,18 @@
this.beanManager = beanManager;
this.type = type;
this.injectionPoints = new HashSet<InjectionPoint>();
- this.constructor = Beans.getBeanConstructor(null, type);
- this.injectionPoints.addAll(Beans.getParameterInjectionPoints(null, constructor));
+ ConstructorInjectionPoint<T> constructor = null;
+ try
+ {
+ constructor = Beans.getBeanConstructor(null, type);
+ this.injectionPoints.addAll(Beans.getParameterInjectionPoints(null,
constructor));
+ }
+ catch (Exception e)
+ {
+ // this means the bean of a type that cannot be produce()d, but that is
non-fatal
+ // unless someone calls produce()
+ }
+ this.constructor = constructor;
this.injectableFields = new HashSet<FieldInjectionPoint<?,?>>();
this.injectableFields.addAll(Beans.getFieldInjectionPoints(null, type));
this.injectionPoints.addAll(injectableFields);
@@ -75,6 +85,16 @@
public T produce(CreationalContext<T> ctx)
{
+ if (constructor == null)
+ {
+ // this means we couldn't find a constructor on instantiation, which
+ // means there isn't one that's spec-compliant
+ // try again so the correct DefinitionException is thrown
+ Beans.getBeanConstructor(null, type);
+ // should not be reached
+ throw new IllegalStateException(
+ "We were not previously able to find the bean constructor, but now
are?");
+ }
return constructor.newInstance(beanManager, ctx);
}
Show replies by date