FieldInjectProgram(Field field, InjectionPoint ip) { _field = field; _field.setAccessible(true); _ip = ip; InjectManager beanManager = getBeanManager(); try { _fieldFactory = beanManager.getReferenceFactory(_ip); } catch (AmbiguousResolutionException e) { String loc = getLocation(field); throw new AmbiguousResolutionException(loc + e.getMessage(), e); } catch (UnsatisfiedResolutionException e) { String loc = getLocation(field); throw new UnsatisfiedResolutionException(loc + e.getMessage(), e); } catch (IllegalProductException e) { String loc = getLocation(field); throw new IllegalProductException(loc + e.getMessage(), e); } catch (InjectionException e) { String loc = getLocation(field); throw new InjectionException(loc + e.getMessage(), e); } }
@Override public <T> void inject(T instance, CreationalContext<T> cxt) { try { CreationalContextImpl<?> env; if (cxt instanceof CreationalContextImpl<?>) env = (CreationalContextImpl<?>) cxt; else env = null; // server/30i1 vs ioc/0155 Object value = _fieldFactory.create(null, env, _ip); _field.set(instance, value); } catch (AmbiguousResolutionException e) { throw new AmbiguousResolutionException(getFieldName(_field) + e.getMessage(), e); } catch (IllegalProductException e) { throw new IllegalProductException(getFieldName(_field) + e.getMessage(), e); } catch (InjectionException e) { throw new InjectionException(getFieldName(_field) + e.getMessage(), e); } catch (Exception e) { throw ConfigException.create(_field, e); } }