API Rest Java EE erros:必须是公共作用域,否则将忽略该方法。EntityManager没有持久性
我正在为提供程序控件制作api,但在尝试访问api方法时出现2个错误: 警告 警告:在资源和/或提供程序类中检测到以下警告: 警告:子资源方法java.util.List br.com.sabrina.api.controller.ProviderController.List()必须是公共范围的,否则将忽略该方法 警告:子资源方法br.com.sabrina.api.model.ProviderModel br.com.sabrina.api.controller.ProviderController.search(int)必须是公共范围的,否则将忽略该方法 错误 2018年7月27日下午1:29:06 org.apache.catalina.core.StandardWrapper 严重:路径为[/ApiRest]的上下文中Servlet[Jersey Web Application]的Servlet.service()引发异常 javax.persistence.PersistenceException:没有EntityManager命名提供程序的持久性提供程序 关于我没有得到的警告,什么可能是错误的,关于 persistence.xml我已经正确创建和配置了它, 我不知道可能是什么问题 项目结构 课程 ProviderController.javaAPI Rest Java EE erros:必须是公共作用域,否则将忽略该方法。EntityManager没有持久性,java,rest,api,Java,Rest,Api,我正在为提供程序控件制作api,但在尝试访问api方法时出现2个错误: 警告 警告:在资源和/或提供程序类中检测到以下警告: 警告:子资源方法java.util.List br.com.sabrina.api.controller.ProviderController.List()必须是公共范围的,否则将忽略该方法 警告:子资源方法br.com.sabrina.api.model.ProviderModel br.com.sabrina.api.controller.ProviderContro
package br.com.sabrina.api.controller;
import java.util.List;
import javax.persistence.EntityManager;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import br.com.sabrina.api.model.ProviderModel;
@Path("/provider")
public class ProviderController {
private JpaEntityManager JPAEM = new JpaEntityManager();
private EntityManager objEM = JPAEM.getEntityManager();
@GET
@Path("/list")
@Produces("application/json")
List<ProviderModel> list() {
try {
String query = "SELECT c FROM ProviderModel c ";
List<ProviderModel> providers = objEM.createQuery(query, ProviderModel.class).getResultList();
objEM.close();
return providers;
} catch(Exception e) {
throw new WebApplicationException(500);
}
}
@GET
@Path("/search/{id}")
@Produces("application/json")
ProviderModel search(@PathParam("id") int id) {
try {
ProviderModel provider = objEM.find(ProviderModel.class, id);
objEM.close();
return provider;
} catch(Exception e) {
throw new WebApplicationException(500);
}
}
@POST
@Path("/register")
@Consumes("application/json")
public Response register(ProviderModel objProvider) {
try {
objEM.getTransaction().begin();
objEM.persist(objProvider);
objEM.getTransaction().commit();
objEM.close();
return Response.status(200).entity("Cadastro realizado!").build();
} catch(Exception e) {
throw new WebApplicationException(500);
}
}
@PUT
@Path("/update")
@Consumes("application/json")
public Response update(ProviderModel objProvider) {
try {
objEM.getTransaction().begin();
objEM.persist(objProvider);
objEM.getTransaction().commit();
objEM.close();
return Response.status(200).entity("Cadastro alterado!").build();
} catch(Exception e) {
throw new WebApplicationException(500);
}
}
@DELETE
@Path("/delete/{id}")
public Response delete(@PathParam("id") int id) {
try {
ProviderModel objProvider = objEM.find(ProviderModel.class, id);
objEM.getTransaction().begin();
objEM.remove(objProvider);
objEM.getTransaction().commit();
objEM.close();
return Response.status(200).entity("Cadastro excluido!").build();
} catch(Exception e) {
throw new WebApplicationException(500);
}
}
}
package br.com.sabrina.api.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity //estrutura de mapeamento de objeto relacional
@Table(name="Provider")
public class ProviderModel {
//correspondente a tabela Provider do banco de dados
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int provider_id;
@Column(name="name")
String name;
@Column(name="cpf_cnpj")
String cpf_cnpj;
@Column(name="rg")
String rg;
@Column(name="address")
String adress;
@Column(name="city")
String city;
@Column(name="email")
String email;
@Column(name="register_date")
@Temporal(TemporalType.TIMESTAMP)
Date register_date;
public int getId() {
return provider_id;
}
public void setId(int provider_id) {
this.provider_id = provider_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package br.com.sabrina.api.controller;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JpaEntityManager {
private EntityManagerFactory factory = Persistence.createEntityManagerFactory("provider");
private EntityManager entityManager = factory.createEntityManager();
public EntityManager getEntityManager() {
return entityManager;
}
}
JpaEntityManager.java
package br.com.sabrina.api.controller;
import java.util.List;
import javax.persistence.EntityManager;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import br.com.sabrina.api.model.ProviderModel;
@Path("/provider")
public class ProviderController {
private JpaEntityManager JPAEM = new JpaEntityManager();
private EntityManager objEM = JPAEM.getEntityManager();
@GET
@Path("/list")
@Produces("application/json")
List<ProviderModel> list() {
try {
String query = "SELECT c FROM ProviderModel c ";
List<ProviderModel> providers = objEM.createQuery(query, ProviderModel.class).getResultList();
objEM.close();
return providers;
} catch(Exception e) {
throw new WebApplicationException(500);
}
}
@GET
@Path("/search/{id}")
@Produces("application/json")
ProviderModel search(@PathParam("id") int id) {
try {
ProviderModel provider = objEM.find(ProviderModel.class, id);
objEM.close();
return provider;
} catch(Exception e) {
throw new WebApplicationException(500);
}
}
@POST
@Path("/register")
@Consumes("application/json")
public Response register(ProviderModel objProvider) {
try {
objEM.getTransaction().begin();
objEM.persist(objProvider);
objEM.getTransaction().commit();
objEM.close();
return Response.status(200).entity("Cadastro realizado!").build();
} catch(Exception e) {
throw new WebApplicationException(500);
}
}
@PUT
@Path("/update")
@Consumes("application/json")
public Response update(ProviderModel objProvider) {
try {
objEM.getTransaction().begin();
objEM.persist(objProvider);
objEM.getTransaction().commit();
objEM.close();
return Response.status(200).entity("Cadastro alterado!").build();
} catch(Exception e) {
throw new WebApplicationException(500);
}
}
@DELETE
@Path("/delete/{id}")
public Response delete(@PathParam("id") int id) {
try {
ProviderModel objProvider = objEM.find(ProviderModel.class, id);
objEM.getTransaction().begin();
objEM.remove(objProvider);
objEM.getTransaction().commit();
objEM.close();
return Response.status(200).entity("Cadastro excluido!").build();
} catch(Exception e) {
throw new WebApplicationException(500);
}
}
}
package br.com.sabrina.api.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity //estrutura de mapeamento de objeto relacional
@Table(name="Provider")
public class ProviderModel {
//correspondente a tabela Provider do banco de dados
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int provider_id;
@Column(name="name")
String name;
@Column(name="cpf_cnpj")
String cpf_cnpj;
@Column(name="rg")
String rg;
@Column(name="address")
String adress;
@Column(name="city")
String city;
@Column(name="email")
String email;
@Column(name="register_date")
@Temporal(TemporalType.TIMESTAMP)
Date register_date;
public int getId() {
return provider_id;
}
public void setId(int provider_id) {
this.provider_id = provider_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package br.com.sabrina.api.controller;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JpaEntityManager {
private EntityManagerFactory factory = Persistence.createEntityManagerFactory("provider");
private EntityManager entityManager = factory.createEntityManager();
public EntityManager getEntityManager() {
return entityManager;
}
}
persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<!-- unidade de persistencia com o nome provider -->
<persistence-unit name="provider">
<!-- Implementação do JPA, no nosso caso Hibernate -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- Aqui são listadas todas as entidades -->
<class>br.com.sabrina.api.model.ProviderModel</class>
<properties>
<!-- Propriedades JDBC -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/provider" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="" />
<!-- Configurações específicas do Hibernate -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee" 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>ApiRest</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
</web-app>
org.hibernate.jpa.HibernatePersistenceProvider
br.com.sabrina.api.model.ProviderModel
web.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<!-- unidade de persistencia com o nome provider -->
<persistence-unit name="provider">
<!-- Implementação do JPA, no nosso caso Hibernate -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- Aqui são listadas todas as entidades -->
<class>br.com.sabrina.api.model.ProviderModel</class>
<properties>
<!-- Propriedades JDBC -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/provider" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="" />
<!-- Configurações específicas do Hibernate -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee" 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>ApiRest</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
</web-app>
蜂巢
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
Jersey Web应用程序
com.sun.jersey.spi.container.servlet.ServletContainer
1.
Jersey Web应用程序
/服务/*
谢谢list()和search()方法必须是公共的。这就是警告告诉您的。@jbnize那么我必须做什么更改呢?我的类ProviderController是公共的。方法必须是公共的。
persistence.xml
文件位于哪里?@palsamsotha WebContent/META-INF/persistence.xml