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