Java CDI在合格的jaxrs资源类中不起作用
编辑:我上传了一个。您可以使用Java CDI在合格的jaxrs资源类中不起作用,java,jakarta-ee,jax-rs,cdi,Java,Jakarta Ee,Jax Rs,Cdi,编辑:我上传了一个。您可以使用mvn clean install构建,并在部署后打开以下URL: http://localhost:8080/jaxrs-测试/不合格->响应:Hello-there:de.test。SomeBean@........ http://localhost:8080/jaxrs-测试/合格->响应:Hello-there:null 使用openjdk11在wildfly-23.0.0.Final上测试 原始问题: 考虑以下类别: App.java-Jaxrs应用程序
mvn clean install
构建,并在部署后打开以下URL:
http://localhost:8080/jaxrs-测试/不合格->响应:Hello-there:de.test。SomeBean@........
http://localhost:8080/jaxrs-测试/合格->响应:Hello-there:null
使用openjdk11在wildfly-23.0.0.Final上测试
原始问题: 考虑以下类别: App.java-Jaxrs应用程序:
@ApplicationPath("/api")
public class App extends Application {
}
Q.java-限定符注释:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Q {
}
java—一些简单的类:
public class X {
public String getX(){
return "some x";
}
}
java-jaxrs资源:
@Path("/foo")
@Q
public class Foo {
@Inject
private X test;
@Path("bar")
@GET
public String getBar() {
return test.getX();
}
}
pom包含以下依赖项(没有其他相关项):
导致空指针异常,因为Foo资源中的test
为空。
当删除限定符注释时,X
的请求和注入工作正常
为什么呢?我在文件中找不到任何提示。
有没有办法让CDI在合格的jaxrs资源类中工作
对于qualified,我指的是除
@命名
之外的任何限定符,因为后者不会阻止类获取限定符@Default
,您可以显示stacktrace吗。您对错误的解释一定有问题。我只是好奇,但为什么您需要一个带有@Qualifier
注释的JAX-RS端点???@aschoerk:除了纯默认的空指针异常之外,没有堆栈跟踪。请看我的编辑,我上传了一个最小的例子-你可以自己测试。@CarlitosWay:我需要一些技巧来“绕过”一些现有的端点。我最终解决了与装饰师的问题,但我仍然好奇我在这里做错了什么。
<dependencies>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
http://localhost:8080/app/api/foo/bar