首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JAX-RS @EJB注入给NullPointerException

JAX-RS @EJB注入给NullPointerException
EN

Stack Overflow用户
提问于 2018-09-17 14:04:24
回答 2查看 743关注 0票数 0

我正在尝试部署一个war文件,以便在WildFly群集上运行。在执行GET请求时,会出现NullPointerException,因为注入失败,而且引用显然为null。

SomeDao.java

代码语言:javascript
运行
复制
import java.util.List;
import java.util.UUID;

import javax.ejb.Local;

@Local
public interface SomeDao {
    public List<MyEntity> listAll();
    public void store(MyEntity entity);
}

SpecializedDao.java

代码语言:javascript
运行
复制
import java.util.List;
import java.util.UUID;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class SpecializedDao implements SomeDao {
    @PersistenceContext(unitName="primary")
    protected EntityManager entityManager;

    public SpecializedDao() {}

    @Override
    public List<MyEntity> listAll() {
        return this.entityManager
                .createQuery("SELECT entity FROM MyEntity entity", MyEntity.class)
                .getResultList();
    }

    @Override
    public void store(MyEntity entity) {
        entityManager.getTransaction().begin();
        entityManager.persist(entity);
        entityManager.getTransaction().commit();
    }
}

然后,有一个端点需要注入一个SpecializedDao实例。

MyEndpoint.java

代码语言:javascript
运行
复制
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Stateless
@Path("/something")
public class MyEndpoint {

    @EJB
    private SomeDao dao;

    @GET
    @Path("/test")
    @Produces({MediaType.APPLICATION_JSON})
    public Response test() {
        MyEntity testEntity = new MyEntity("something", "something");

        dao.store(testEntity);

        return Response.ok("All done!").build();
    }


}

beans.xml

代码语言:javascript
运行
复制
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       version="1.2" bean-discovery-mode="annotated">
</beans>

NullPointerException是在dao.store(testEntity)启动的,因为dao引用了一个空对象。我非常肯定persistence.xml文件是正确的,因为EntityManager在另一个测试用例上工作,所以我认为问题在注入。

我在哪里做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-18 06:58:29

其他你可以检查的东西。

  1. 您的beans.xml是否位于正确的文件夹(即WEB中的webapp/war情况下)?
  2. 您包括了群集CDI分数/依赖项(org.wildfly.swarm:cdi)吗?
  3. 我不是群专家,但CDI部分可能只在注入"àla JSR-299“(即使用java.inject.@Inject )(而不是使用@EJB)的bean时才有效。 @注入专用SomeDao刀;
  4. 最终:尝试使用beans.xml中的bean-correct mode=“all”(尽管“注释”似乎是正确的)。
票数 1
EN

Stack Overflow用户

发布于 2018-09-17 20:23:50

你没有忘记放一个"beans.xml“文件(在WEB/META文件夹下)吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52369604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档