Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
API Rest Java EE erros:必须是公共作用域,否则将忽略该方法。EntityManager没有持久性_Java_Rest_Api - Fatal编程技术网

API Rest Java EE erros:必须是公共作用域,否则将忽略该方法。EntityManager没有持久性

API 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

我正在为提供程序控件制作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.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;
    }
}
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