gpt4 book ai didi

jboss - JAX-RS + JBoss 7.1.1 + RESTEasy : NullPointException using CDI

转载 作者:行者123 更新时间:2023-12-02 00:03:35 25 4
gpt4 key购买 nike

我正在开发一个 Java EE 6 解决方案,并且还试图找出依赖注入(inject)不起作用的根本原因......我的服务中的 NullPointerException(userDao 行):

休息服务

@Path("rest")
public class UserRESTService {

@EJB
UserDAO userDao;

@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("{type}")
public String getJqGridData(@PathParam("type") String type) {

System.out.println("type: " + type);

List<USUARIO> usuarios = userDao.findAll();
int pageSize = 10;
int pageNumber = ((int) usuarios.size()/pageSize)+1;

JqGridData<USUARIO> data = new JqGridData<USUARIO>(pageNumber, 1, usuarios.size(), usuarios);

System.out.println("Grid Data: " + data.getJsonString());
return data.getJsonString();
}

}

网络.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>MyWeb</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.application.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>

<context-param>
<param-name>com.sun.faces.writeStateAtFormEnd</param-name>
<param-value>false</param-value>
</context-param>

<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>

<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>bch.com.br.service.rest.RESTEasySingleton</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

</web-app>

REST 单例

public class RESTEasySingleton extends Application
{
private Set<Object> singletons = new HashSet();
private Set<Class<?>> empty = new HashSet();

public RESTEasySingleton() {
this.singletons.add(new UserRESTService());
}

public Set<Class<?>> getClasses()
{
return this.empty;
}

public Set<Object> getSingletons()
{
return this.singletons;
}
}

@Stateless
public class UserDAO extends BaseDAO<USUARIO>{

@PersistenceContext(unitName="MyJPA")
private EntityManager em;

public UserDAO(Class<USUARIO> entityClass) {
super(entityClass);
}

public UserDAO() {
super(USUARIO.class);
}

@SuppressWarnings("unchecked")
public List<USUARIO> findAll() {

Query q = getEntityManager().createQuery("SELECT e FROM " + USUARIO.class.getName() + " e");
List<USUARIO> list = (List<USUARIO>) q.getResultList();
return list;
}

@Override
protected EntityManager getEntityManager() {
return em;
}

}

虽然,注入(inject)在另一个托管 bean 中工作正常......

@ManagedBean
@RequestScoped
@Named
public class UserBean {

public UserBean() {
// TODO Auto-generated constructor stub
}

private List<USUARIO> users = new ArrayList<USUARIO>();
private String name;


@Transient
@EJB
UserDAO userDao;

...

}

有什么想法吗?

最佳答案

@RequestScoped 添加到您的 rest 端点。我还会在您的 web.xml 中删除对 resteasy bootstrap 的引用,因为您正在部署到不需要它的 EE6 容器(应用程序扩展就足够了)。

关于jboss - JAX-RS + JBoss 7.1.1 + RESTEasy : NullPointException using CDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19879783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com