Injection of a proxied interface
agori Jun 5, 2010 10:01 AMI am trying to write an extension where a particular annotated interface is implemented at startup (using CGLIB) generating a proxy class.
Then user should be allowed to inject this implementation:
@Inject MyInterface bean;
The problem is that WELD can't resolve the dependency, and I don't know why.
The extension is this:
Enhancer e = new Enhancer();
e.setInterfaces(new Class[]{javaClass}); //it is MyInterface
e.setCallback(...);
final Class proxyClass = e.create().getClass();
AnnotatedTypeBuilder builder = AnnotatedTypeBuilder.newInstance(proxyClass).readAnnotationsFromUnderlyingType();
BeanBuilder beanBuilder = new BeanBuilder(builder.create(), bm);
beanBuilder.setBeanLifecycle(...);
beanBuilder.defineBeanFromAnnotatedType();
beanBuilder.setScope(Default.class);
Bean bean = beanBuilder.create();
additionalBeans.add(bean);
As you can see I am using weld exception to build the Bean object. The Bean is then added on AfterBeanDiscovery event.
What is wrong with my idea/code?
The exception is:
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Injection point has unsatisfied dependencies. Injection point: field org.lambico.cdi.LambicoTest.dao; Qualifiers: [@javax.enterprise.inject.Default()] at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:276) at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:122) at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:141) at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:331) at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:317) at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:399) at org.jboss.arquillian.weld.WeldSEContainer.deploy(WeldSEContainer.java:113) at org.jboss.arquillian.impl.handler.ContainerDeployer.callback(ContainerDeployer.java:62) at org.jboss.arquillian.impl.handler.ContainerDeployer.callback(ContainerDeployer.java:50) at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:63) ... 14 more