我正在尝试将EJB 3.1注入到其中一个RESTful服务中。我遵循了这个帖子:Inject an EJB into JAX-RS (RESTful service)并尝试了除建立注入提供者之外的所有选项。我正在尝试的当前解决方案使用@RequestScoped
和@Inject
的组合,但我注入的bean变量仍然是null
。我在/WEB-INF
文件夹中有一个beans.xml
。将企业bean注入JAX-RS 2.0 REST服务时出现NullPointerException
如何将EJB注入到我的REST服务类中?
UserService
@Local
@Path("user/v1")
@Produces(MediaType.APPLICATION_JSON)
public class UserServiceV1 implements SystemLogger {
@Inject
private ApplicationBean appBean;
@GET
@Path("pingbean")
@Produces(MediaType.APPLICATION_JSON)
public Response pingAppBean() {
if(appBean == null) {
return Response.status(Response.Status.UNAUTHORIZED).entity("{\"faild\": \"App bean is null\"}").build();
}
String message = appBean.getHello();
return Response.status(Response.Status.OK)
.entity(message)
.build();
}
}
ApplicationBean中 的SystemHandler
驻留在罐子模块和是一个标准类的业务逻辑。
@Stateless
@Local
public class ApplicationBean implements ApplicationBeanLocal {
@Override
public String getHello() {
return "Hello from ApplicationBean";
};
}
JAX-RS配置
@ApplicationPath("service")
public class ApplicationService extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new HashSet<>();
resources.add(UserServiceV1.class);
resources.add(ApplicationBean.class);
resources.add(CorsFilterProvider.class);
return resources;
}
}
异常
14:07:01,230 ERROR [io.undertow.request] UT005023: Exception handling request to /MyApp/service/user/v1/login: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException
at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:76) [resteasy-jaxrs-3.0.14.Final.jar:3.0.14.Final]
at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:212) [resteasy-jaxrs-3.0.14.Final.jar:3.0.14.Final]
RestEasy的/ JAX-RS 我根据the documentation
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.0.14.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-cdi</artifactId>
<version>3.0.14.Final</version>
<scope>provided</scope>
</dependency>
添加RestEasy的一个实施CDI
编辑:更改问题和标题中的代码详细信息
我使用@EJB注入其他项目豆类,我已经做了与JAX-RS 1.1。但我目前的项目使用JAX-RS 2.0,请参阅resteasy-jaxrs依赖项。明天将尽力解决问题,欢迎任何意见。 – Chris
您使用的是什么应用程序服务器和版本?我假设JBoss EAP或Wildfly,因为你声明RestEasy而不是Jersey作为依赖。 – RafaelHamasaki
如果您想使用RestEasy版本,而不是JBoss提供的版本(可能是较旧的JAX-RS 1.1兼容版本),您还必须从部署中排除该模块。 参见: [链接](https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html/Development_Guide/Exclude_a_Subsystem_from_a_Deployment.html) [链接](HTTPS://docs.jboss .org/author/display/WFLY8/Class + Loading + in + WildFly) – RafaelHamasaki