J'ai créé un service Web XML simple à l'aide de l'assistant "RESTful Web Services from Database ..." de NetBeans 7. À ce stade, je souhaite publier une liste d'utilisateurs à partir de la base de données mySQL associée. Lorsque j'essaie d'accéder au service via son URL (http: // localhost: 8080/database/resources/users), j'obtiens une erreur qui lit "java.lang.NullPointerException". La trace de la pile:Service Web RESTful: java.lang.NullPointerException service.AbstractFacade.findAll
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)
entité utilisateur:
package entities;
...
@Entity
@Table(name="users")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
...
J'ai également changé la requête nommée à User.findAll dans le cas où les noms doit aligner avec le nom de l'entité. Cela n'a pas résolu le problème.
Je ne suis pas certain si c'est «normal» ou non, mais l'assistant a créé une classe UserFacade assez clairsemée; J'ai ajouté les méthodes manquantes après avoir étudié le sujet. De plus, le paquet javax.ejb.Stateless semble manquer (peut-être pas sur CLASSPATH de mon poste de travail); C'est la raison pour laquelle l'annotation @Stateless est désactivée.
classe UserFacade:
//@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();
}
}
exception est levée à la première ligne de la méthode findAll de AbstractFacade:
public List<T> findAll() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
...
}
Questions:
- l'annotation @Stateless nécessaire à cette Pour fonctionner?
- Ce modèle nécessite-t-il J2EE 6 plutôt que J2SE 6 (qui est ce qui est installé sur ma station de travail OS X)? L'espace de noms 'javax.ejb' semble suggérer des beans Java d'entreprise.
** modifier **
- Java SE 6 (1.6.0_29-b11-402)
'@NamedQuery (name =" Users.findAll ", query =" CHOISISSEZ-VOUS DES UTILISATEURS ")' ' pas '" CHOISIR u. * DE Utilisateurs u "'? – ori