java.lang.VerifyError:期望分支上的stackmap帧... JPA + postgresql

时间:2015-02-18 10:34:18

标签: hibernate postgresql jpa bytecode-manipulation

我正在努力解决我在启动方法时不断收到的错误,这些方法将一些对象从服务器返回到ExtJs。 我是JavaEE的新手,我想我在某个地方犯了错误。

以下是来自JBossDevStudio控制台的日志:

11:04:37,217 ERROR [io.undertow.request] (default task-20) UT005023: Exception handling request to /SimpleApp/rest/person: org.jboss.resteasy.spi.UnhandledException: java.lang.VerifyError: Expecting a stackmap frame at branch target 18
Exception Details:
Location:
entity/Person._persistence_isAttributeFetched(Ljava/lang/String;)Z @4: ifnull
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: 2ab4 005f c600 0e2a b400 5f2b b600 bd99
0000010: 0007 04a7 0004 03ac                    

at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:76) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:212) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:149) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:372) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.0.10.Final.jar:]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.7.0_67]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0_67]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_67]
Caused by: java.lang.VerifyError: Expecting a stackmap frame at branch target 18
Exception Details:
Location:
entity/Person._persistence_isAttributeFetched(Ljava/lang/String;)Z @4: ifnull
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: 2ab4 005f c600 0e2a b400 5f2b b600 bd99
0000010: 0007 04a7 0004 03ac                    

at java.lang.Class.forName0(Native Method) [rt.jar:1.7.0_67]
at java.lang.Class.forName(Unknown Source) [rt.jar:1.7.0_67]
at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getClassForName(PrivilegedAccessHelper.java:88) [eclipselink.jar:2.0.2.v20100323-r6872]
at org.eclipse.persistence.descriptors.ClassDescriptor.convertClassNamesToClasses(ClassDescriptor.java:1214) [eclipselink.jar:2.0.2.v20100323-r6872]
at org.eclipse.persistence.sessions.Project.convertClassNamesToClasses(Project.java:362) [eclipselink.jar:2.0.2.v20100323-r6872]
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:322) [eclipselink.jar:2.0.2.v20100323-r6872]
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:151) [eclipselink.jar:2.0.2.v20100323-r6872]
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:207) [eclipselink.jar:2.0.2.v20100323-r6872]
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:195) [eclipselink.jar:2.0.2.v20100323-r6872]
at org.jboss.as.jpa.container.TransactionScopedEntityManager.createEntityManager(TransactionScopedEntityManager.java:177) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
at org.jboss.as.jpa.container.TransactionScopedEntityManager.getEntityManager(TransactionScopedEntityManager.java:82) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
at org.jboss.as.jpa.container.AbstractEntityManager.createQuery(AbstractEntityManager.java:130) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
at main.Controller.getPeople(Controller.java:38) [classes:]
at main.Controller.personSort(Controller.java:48) [classes:]
at main.Controller$Proxy$_$$_WeldClientProxy.personSort(Unknown Source) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_67]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.7.0_67]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.7.0_67]
at java.lang.reflect.Method.invoke(Unknown Source) [rt.jar:1.7.0_67]
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:296) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:250) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:237) [resteasy-jaxrs-3.0.10.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356) [resteasy-jaxrs-3.0.10.Final.jar:]
... 31 more

当我在ExtJS中点击网格上的列标签时,我会在服务器上点击方法,该方法应该向数据库询问记录,使用我提供的参数对它们进行排序并返回给客户端。首先,我想调用getPeople()方法没有任何崩溃,稍后我会考虑其余的。 ExtJS和服务器之间的通信工作正常。 这是我实现的类和persistence.xml:

控制器:

package main;

import java.util.List;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
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.QueryParam;
import javax.ws.rs.core.MediaType;

import entity.IPersonDao;
import entity.Person;


  @Path("/")

public class Controller {

@Inject
RestService helloService;

@Inject
IPersonDao personDAO;

@GET
@Path("/person")
@Produces({ "application/json" })
public List<Person> personSort(@QueryParam("page") int page,@QueryParam("start") int start,@QueryParam("limit") int limit,@QueryParam("sort") SortParamList sort)
{
    List<Person> people=personDAO.getPeople(); //after that instruction everything crashes
    //return Response.ok("Ok",MediaType.APPLICATION_JSON).build();
    return people;
}

}

人:

package entity;

import java.io.Serializable;

import javax.inject.Inject;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

@SuppressWarnings("serial")

@XmlRootElement
@Table(name="People")
@Entity
public class Person implements Serializable{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long Id;

    protected String Imie;
    protected String Nazwisko;
    protected String Pesel;

    @Inject
    public Person()
    {}

    public Person(String imie,String nazwisko,String pesel)
    {
        this.Imie=imie;
        this.Nazwisko=nazwisko;
        this.Pesel=pesel;

    }

    public String getImie() {
        return Imie;
    }

    public void setImie(String imie) {
        Imie = imie;
    }

    public String getNazwisko() {
        return Nazwisko;
    }

    public void setNazwisko(String nazwisko) {
        Nazwisko = nazwisko;
    }

    public String getPesel() {
        return Pesel;
    }

    public void setPesel(String pesel) {
        Pesel = pesel;
    }



}

IPersonDao:

package entity;

import java.util.List;

import javax.ejb.Local;

@Local
public interface IPersonDao {

    public abstract List<Person> getPeople();

}

PersonDao的:

package entity;

import java.util.List;

import javax.ejb.Stateful;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;


@Stateful
public class PersonDAO implements IPersonDao {

//  @PersistenceContext(unitName="SimpleApp")
    @Inject
    private EntityManager em;

    //public void Persist(Person person){ ???!?!?!!? O_o
    //  em.persist(person);
    //}
    /* (non-Javadoc)
     * @see entity.IPersonDao#getPeople()
     */

    public List<Person> getPeople(){
        TypedQuery<Person> query=em.createQuery("Select p FROM Person p Order by p.Id",Person.class);
        return query.getResultList();
    }
}

的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
       xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
       <persistence-unit name="SimpleApp" transaction-type="JTA">
             <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
             <jta-data-source>java:jboss/datasources/sampleDS</jta-data-source>

             <class>entity.Person</class>
              <properties>
                    <!-- Properties for Hibernate -->
                    <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/sampleDB"/>
                    <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
                    <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
                    <property name="hibernate.connection.username" value="postgres"/>
                    <property name="hibernate.connection.password" value="admin"/>
                    <!--property name="hibernate.archive.autodetection" value="class"/ -->
                    <property name="hibernate.show_sql" value="true" />
                    <property name="hibernate.format_sql" value="true" />
                    <!--property name="hibernate.hbm2ddl.auto" value="update" /-->
                    <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
                    <property name="javax.persistence.sql-load-script-source" value="META-INF/db_init.sql"/>
                    <property name="javax.persistence.schema-generation.scripts.action" value="none"/>

             </properties>
       </persistence-unit>
</persistence>

我尝试了很多@Inject或PersistenContext的组合。 我尝试了UseSplitVerifier选项,但没有任何效果。

1 个答案:

答案 0 :(得分:0)

事实证明,ExtJs客户端和JavaEE服务器之间的REST通信存在问题。我已经设置了新的Dynamic项目并将persistence.xml放在这样:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="y" transaction-type="JTA">
    <jta-data-source>java:jboss/datasources/sampleDS</jta-data-source>
    <class>entity.Person</class>
    <properties>
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
      <property name="javax.persistence.jdbc.url"    value="jdbc:postgresql://localhost/sampleDB" />
      <property name="javax.persistence.jdbc.user" value="postgres" />    
      <property name="javax.persistence.jdbc.password" value="admin" />
      <property name="eclipselink.ddl-generation" value="create-tables" />
      <property name="eclipselink.ddl-generation.output-mode" value="database" />
    </properties>
  </persistence-unit>
</persistence>

我还在wildfly配置这个数据源:

 <datasource jndi-name="java:jboss/datasources/sampleDS" pool-name="sampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:postgresql://localhost/sampleDB</connection-url>
                    <driver>postgresql</driver>
                    <security>
                        <user-name>postgres</user-name>
                        <password>admin</password>
                    </security>
                </datasource>

其余的只是从一个项目到另一个项目的复制/粘贴操作。目前一切正常。但是我无法解释问题的根源。