Jakarta ee CDI编程查找异常(注入点)

Jakarta ee CDI编程查找异常(注入点),jakarta-ee,cdi,Jakarta Ee,Cdi,我的TomEE服务器上有一个bug。CDI动态查找未按计划工作 特别是当我要查找的bean是由工厂(@products)以InjectionPoint为参数生成的时候 这是我的问题的一个简单例子 限定符@RandomNumber @Qualifier @Retention(RUNTIME) @Target({ METHOD, FIELD, PARAMETER, TYPE }) public @interface RandomNumber { @Nonbinding int min() defa

我的TomEE服务器上有一个bug。CDI动态查找未按计划工作

特别是当我要查找的bean是由工厂(@products)以InjectionPoint为参数生成的时候

这是我的问题的一个简单例子

限定符@RandomNumber

@Qualifier
@Retention(RUNTIME)
@Target({ METHOD, FIELD, PARAMETER, TYPE })
public @interface RandomNumber {

@Nonbinding
int min() default 0;

@Nonbinding
int max() default 10; 
}
他的字面意思是字面意思

public class RandomNumberLiteral extends AnnotationLiteral<RandomNumber> implements RandomNumber {

private final int   min;

private final int   max;

public RandomNumberLiteral(final int min, final int max) {

    this.min = min;
    this.max = max;
}

@Override
public int max() {

    return this.max;
}

@Override
public int min() {

    return this.min;
}

}
测试类(动态查找的选择结果既不含糊也不令人不满意)

我需要帮助!
谢谢大家

你使用的是什么版本的tomee?嗨,这是1.5.1版本。我认为注入注入点在技术上是不可能的,因为实际上没有注入点(我使用的是动态查找)。你通常是正确的。这是在OWB1.2.1(我相信)中提到的,如果您升级到TomEE 1.7.x,应该包括在内。谢谢!我试试这个。
@Produces
@RandomNumber
public Integer producesNumber(final InjectionPoint ip) {

final int min = ip.getAnnotated().getAnnotation(RandomNumber.class).min();
final int max = ip.getAnnotated().getAnnotation(RandomNumber.class).max();

return (new Random().nextInt((max - min) + 1) + min);
}
public class Test {

@Inject
@RandomNumber(min = 20, max = 50)
private Integer                         random;

@Inject
@Any
private Instance<Integer>               randomInstance;

public void test() {
    System.out.println("Random1: " + this.random);
    System.out.println("Random2: " + this.randomInstance.select(new RandomNumberLiteral(20,50)).get());
}
}
javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
java.util.EmptyStackException
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:363)
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:283)

blablabla

Caused by: java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:102)
at org.apache.webbeans.component.InjectionPointBean.createInstance(InjectionPointBean.java:83)
at org.apache.webbeans.component.InjectionPointBean.createInstance(InjectionPointBean.java:28)
at org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:186)
at org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:70)
at org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:132)
at org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:872)
at org.apache.webbeans.inject.InjectableMethods.doInjection(InjectableMethods.java:96)
at        org.apache.webbeans.component.ProducerMethodBean.createDefaultInstance(ProducerMethodBean.java:161)
at org.apache.webbeans.component.ProducerMethodBean.createInstance(ProducerMethodBean.java:123)
at org.apache.webbeans.component.AbstractOwbBean.createNewInstance(AbstractOwbBean.java:233)
at org.apache.webbeans.portable.creation.AbstractProducer.produce(AbstractProducer.java:77)
at org.apache.webbeans.component.InjectionTargetWrapper.produce(InjectionTargetWrapper.java:133)
at org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:180)
at org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:70)
at org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:132)
at org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:872)
at org.apache.webbeans.inject.instance.InstanceImpl.get(InstanceImpl.java:126)