NetBeans 7의 "RESTful Web Services from Database ..."마법사를 사용하여 간단한 XML 웹 서비스를 만들었습니다. 이 시점에서 관련된 mySQL 데이터베이스에서 사용자 목록을 게시하려고합니다.RESTful 웹 서비스 : java.lang.NullPointerException service.AbstractFacade.findAll
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 어노테이션이 비활성화 된 이유입니다.
UserFacade 클래스 :
public List<T> findAll() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
...
}
질문 :
- 이 필요한 @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은 방법의 첫 번째 행에서 발생합니다 기능하는거야?
- 이 패턴에는 J2SE 6 (내 OS X 워크 스테이션에 설치된 것)이 아닌 J2EE 6가 필요합니까? 'javax.ejb'네임 스페이스는 엔터프라이즈 자바 빈을 제안하는 것으로 보인다.
** 편집 **
- 자바 SE 6 (1.6.0_29-b11-402)
'@NamedQuery'(이름 = "Users.findAll는"쿼리 = "사용자 U로부터 U 선택")? ''u. * 사용자를 선택하지 않았습니다. ' "? – ori