gpt4 book ai didi

mysql - RESTful web 服务 : java. lang.NullPointerException service.AbstractFacade.findAll

转载 作者:可可西里 更新时间:2023-11-01 08:37:20 27 4
gpt4 key购买 nike

我使用 NetBeans 7 的“来自数据库的 RESTful Web 服务...”向导创建了一个简单的 XML Web 服务。此时,我想发布关联 mySQL 数据库中的用户列表。

当我尝试通过其 URL (http://localhost:8080/database/resources/users) 访问该服务时,我收到一条错误消息“java.lang.NullPointerException”。堆栈跟踪:

service.AbstractFacade.findAll(AbstractFacade.java:41)
service.UserFacade.findAll(UserFacade.java:51)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:165)
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:276)
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:83)
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133)
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:71
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1171) com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1103) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1053)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1043)
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:406)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:477)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:662)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

用户实体:

package entities;
...
@Entity
@Table(name="users")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
...

我还将命名查询更改为 User.findAll,以防名称需要与实体名称对齐。这并没有解决问题。

我不确定它是否“正常”,但向导创建了一个相当稀疏的 UserFacade 类;在研究了该主题后,我添加了缺少的方法。此外,似乎缺少 javax.ejb.Stateless 包(可能不在我工作站的 CLASSPATH 中);这就是禁用@Stateless 注释的原因。

用户外观类:

//@Stateless
@Path("users")
public class UserFacade extends AbstractFacade<User> {

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

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

public UserFacade() {
super(User.class);
}

@GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public User find(@PathParam("id") BigDecimal id) {
return super.find(id);
}

@GET
@Override
@Produces({"application/xml", "application/json"})
public List<User> findAll() {
return super.findAll();
}

}

在 AbstractFacade 的 findAll 方法的第一行抛出异常:

public List<T> findAll() {  

javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
...
}

问题:

  • 此功能是否需要 @Stateless 注释?
  • 此模式是否需要 J2EE 6 而不是 J2SE 6(我的 OS X 工作站上安装的是 J2SE 6)? “javax.ejb”命名空间似乎暗示了企业 java bean。

** 编辑 **

  • Java SE 6 (1.6.0_29-b11-402)

最佳答案

自动生成的查询“SELECT u FROM Users u”没有任何问题。根据建议“u”可能是错误的评论,因为它不代表列,该建议是不正确的,因为这里的“u”是表用户的别名。

我会进一步调试 findAll() 以检查某些内容是否为空,即 EntityManager。

UserFacade 中的 @Stateless 注释是必需的,删除它可能会导致 EntityManager 为空(请注意,我写“删除”是因为 NetBeans 放置如果对你来说,如果你使用“来自数据库的 RestFul Web 服务”向导)。参见 here一个类似的问题。

关于您的最新编辑:是的,这些功能需要使用 Java Platform, Enterprise Edition 构建.特别是,RESTful Web 服务使用 Java API for RESTful Web Services (JAX-RS),它包含在 Java EE 6 平台中,如解释的那样here .

GlassFish Server Open Source Edition 是 Java EE 6 平台规范的第一个兼容实现:我建议使用此 Application Server 并遵循上面链接的教程。

关于mysql - RESTful web 服务 : java. lang.NullPointerException service.AbstractFacade.findAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8626669/

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