java - 在Grails中运行集成测试时,如何解决HibernateGormStaticApi的java.lang.NoClassDefFoundError?

标签 java hibernate postgresql grails groovy

我正在使用Postgresql 9.4在Grails 2.4.4上为Web应用程序编写Spock集成测试,并停留在以下错误上。我包括测试规范和引发错误的代码部分。仅在运行Lubuntu 14.10的我的机器上奇怪地发生了此错误。该测试在我同事的机器(也是Lubuntu 14.10)上运行良好。我已经复制了他的项目工作区并将grails sdk复制到我的机器上,结果没有任何变化。感谢任何人都可以提供的帮助。

Failure:  br.ufscar.sagui.controleacesso.AutorizaPassagemControllerIntegrationSpec |  java.lang.NoClassDefFoundError: org/codehaus/groovy/grails/orm/hibernate/HibernateGormStaticApi$6
        at br.ufscar.sagui.controleacesso.autorizacao.AutorizacaoPassante.afterInsert(AutorizacaoPassante.groovy:65)
        at org.grails.datastore.gorm.support.EventTriggerCaller$MethodCaller.call(EventTriggerCaller.java:153)
        at org.grails.datastore.gorm.support.EventTriggerCaller.call(EventTriggerCaller.java:96)
        at org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener.onApplicationEvent(AbstractPersistenceEventListener.java:47)
        at br.ufscar.sagui.controleacesso.test.SaguiControleAcessoTestUtil.adicionarAutorizacaoPassanteVisitante(SaguiControleAcessoTestUtil.groovy:514)
        at br.ufscar.sagui.controleacesso.AutorizaPassagemControllerIntegrationSpec.setupSpec(AutorizaPassagemControllerIntegrationSpec.groovy:41) Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.grails.orm.hibernate.HibernateGormStaticApi$6
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        ... 6 more Caused by: java.util.zip.ZipException: error reading zip file
        at java.util.zip.ZipFile.access$1400(ZipFile.java:61)
        at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:717)
        at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:420)
        at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:450)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
        ... 9 more

我安装的插件(“grails list-plugins”的输出):
Plug-ins you currently have installed are listed below:
-------------------------------------------------------------
cache               1.1.8            --  Cache Plugin
hibernate4          4.3.6.1          --  Hibernate 4 for Grails
plastic-criteria    1.5.1            --  Plastic Criteria Plugin
platform-core       1.0.0            --  Plugin Platform Core
release             3.0.1            --  Release Plugin
rest-client-builder 1.0.3            --  REST Client Builder Plugin
sagui-controleacesso0.1              --  Sagui Controleacesso Plugin
sagui-core          1.0-SNAPSHOT     --  Sagui Core Plugin
spring-security-core2.0-RC4          --  Spring Security Core Plugin
tomcat              7.0.55           --  Apache Tomcat plugin for Grails
webxml              1.4.1            --  WebXmlConfig

To find more info about plugin type 'grails plugin-info [NAME]'

To install type 'grails install-plugin [NAME] [VERSION]'

For further info visit http://grails.org/Plugins

引发错误的类(AutorizacaoPassante):
package br.ufscar.sagui.controleacesso.autorizacao

import br.ufscar.sagui.controleacesso.controle.ControleAutorizacao
import br.ufscar.sagui.controleacesso.midia.provisoria.MidiaIdentificacaoProvisoria

    /**
     * Classe de domínio que descreve uma autorização de passante. Pode autorizar uma passagem independente de vínculo.
     * Associa uma mídia de identificação a uma unidade organizacional, opcionalmente um veículo (somente para passante
     * visitante), e um periodo de validade.
     *
     * @author Erick, Francisco, Jorge.
     * @since 10/12/2014
     */
    class AutorizacaoPassante implements Comparable<AutorizacaoPassante>{

        String id
        Date dateCreated // Data em que o registro foi criado.
        Date inicioAutorizacao // Data em que a autorização se inicia.
        Date fimAutorizacao // Data em que a autorização termina.
        String observacao
        Boolean ativo
        MidiaIdentificacaoProvisoria midiaProvisoria

        static constraints = {
            observacao(nullable: true, blank: true, widget: "textarea")
            inicioAutorizacao(nullable: false)
            fimAutorizacao(nullable: false)
            ativo(nullable: false)
            midiaProvisoria(nullable: false)
        }

        static mapping = {
            id (generator: "uuid")
            table (schema: "controleacesso")
        }

        @Override
        int compareTo(AutorizacaoPassante autorizacaoPassante) {
            return  id <=> autorizacaoPassante.id
        }

        def beforeValidate() {

            def podeSerSalvo = true

            def autorizacao = AutorizacaoPassante.findByMidiaProvisoriaAndAtivo(this.midiaProvisoria,true)

            if(autorizacao && autorizacao.compareTo(this)!=0)
                podeSerSalvo =  false

            if (!podeSerSalvo) {
                this.errors.reject('erro.midia.midiaJaPossuiAutorizacaoAtiva')
                this.errors.rejectValue('midia', 'erro.midia.midiaJaPossuiAutorizacaoAtiva')
            }
        }

        private def adicionarAutorizacaoTabelaControle(){
            if (new ControleAutorizacao(autorizacao: this).save(flush: true))
                log.info("controleAutorizacao inserido: ${this.id}")
        }


        def afterInsert(){
            withNewSession {    // Line 65, where the error is thrown.
                if (this.ativo)
                    adicionarAutorizacaoTabelaControle()
            }
        }

        def afterUpdate(){
            withNewSession {
                if (this.ativo)
                        adicionarAutorizacaoTabelaControle()
                else{
                    if (ControleAutorizacao.findByAutorizacao(this).delete(flush: true))
                        log.info("controleAutorizacao removido: ${this.id}")
                }
            }
        }
    }

测试类别:
package br.ufscar.sagui.controleacesso

import br.ufscar.sagui.controleacesso.dispositivo.DispositivoAcesso
import br.ufscar.sagui.controleacesso.test.SaguiControleAcessoTestUtil
import grails.test.spock.IntegrationSpec
import groovy.json.JsonSlurper
import spock.lang.Shared

class AutorizaPassagemControllerIntegrationSpec extends IntegrationSpec {

    static transactional = true

    AutorizaPassagemController controller = new AutorizaPassagemController()

    @Shared def visitante
    @Shared def estado
    @Shared def midia
    @Shared def tipoLeitor
    @Shared def tipoDispositivo
    @Shared def dispositivo
    @Shared def leitor
    @Shared def grupoLeitor
    @Shared def tipoUnidade
    @Shared def unidade
    @Shared def autorizacao

    def setupSpec() {

        visitante = SaguiControleAcessoTestUtil.adicionarPassanteVisitante("Visitante 1", "12234344",TipoDocumento.CPF)
        estado = SaguiControleAcessoTestUtil.adicionarEstadoMidiaIdentificacao("Estado de midia de identificação ativo", true)
        midia = SaguiControleAcessoTestUtil.adicionarMidiaProvisoria("1234",estado)
        tipoLeitor = SaguiControleAcessoTestUtil.adicionarTipoLeitorAcesso("Leitor tipo não-urna.", false)
        tipoDispositivo = SaguiControleAcessoTestUtil.adicionarTipoDispositivoAcesso("Tipo de dispositivo de acesso teste.")
        dispositivo = SaguiControleAcessoTestUtil.adicionarDispositivoAcesso("Dispositivo teste.", "3456", tipoDispositivo)
        leitor = SaguiControleAcessoTestUtil.adicionarLeitorAcesso("Leitor teste","2345",0,1,true, tipoLeitor,
                DirecaoAcesso.BIDIRECIONAL, dispositivo)
        grupoLeitor = SaguiControleAcessoTestUtil.adicionarGrupoLeitorAcesso("Grupo teste 1.", [leitor])
        tipoUnidade = SaguiControleAcessoTestUtil.adicionarTipoUnidadeOrganizacional("Unidade teste.")
        unidade = SaguiControleAcessoTestUtil.adicionarUnidadeOrganizacional("Unidade teste.", "ET", "Portaria 1",Common.criaData(2014,1,1), Common.criaData(2015,1,1), tipoUnidade)
        autorizacao = SaguiControleAcessoTestUtil.adicionarAutorizacaoPassanteVisitante(visitante,unidade,Common.criaData(2010,1,1),
        Common.criaData(2015,1,1),midia)  // Line 41, where the exception is thrown.

    }

    void "autorizaPassagem deve autorizar Tag em uma passagem válida."() {

        setup:
        def codigoLeitor = "2345"
        def codigoMidia = "1234"
        def dispositivoId = DispositivoAcesso.findByCodigo("3456")?.id
        def dataOcorrencia = "01/01/2015 00:00:00"
        JsonSlurper jsonSlurper = new JsonSlurper()

        controller.request.parameters = [codigoMidia: codigoMidia, codigoLeitor: codigoLeitor, data: dataOcorrencia, dispositivoId: dispositivoId]

        when:
        controller.autorizarPassagem()
        def retornoAutorizarPassagem =  controller.response.contentAsString as String
        def retornoMap = jsonSlurper.parseText(retornoAutorizarPassagem) as Map
        then:
        retornoMap==["EVENTO":"1", "FXCREDITO":"0", "MSG":"Teste", "NIVEL":"1"]
    }
}

测试实用程序方法类:
package br.ufscar.sagui.controleacesso.test

import br.ufscar.sagui.controleacesso.acl.AplicacaoPoliticaAcesso
import br.ufscar.sagui.controleacesso.acl.PoliticaAcesso
import br.ufscar.sagui.controleacesso.acl.TabelaHorarioPoliticaAcesso
import br.ufscar.sagui.controleacesso.autorizacao.AutorizacaoPassante
import br.ufscar.sagui.controleacesso.autorizacao.AutorizacaoPassantePessoa
import br.ufscar.sagui.controleacesso.autorizacao.AutorizacaoPassanteVisitante
import br.ufscar.sagui.controleacesso.dispositivo.DispositivoAcesso
import br.ufscar.sagui.controleacesso.dispositivo.TipoDispositivoAcesso
import br.ufscar.sagui.controleacesso.dispositivo.leitor.GrupoLeitorAcesso
import br.ufscar.sagui.controleacesso.dispositivo.leitor.LeitorAcesso
import br.ufscar.sagui.controleacesso.dispositivo.leitor.TipoLeitorAcesso
import br.ufscar.sagui.controleacesso.midia.EstadoMidiaIdentificacao
import br.ufscar.sagui.controleacesso.midia.MidiaIdentificacao
import br.ufscar.sagui.controleacesso.midia.RegistroMudancaEstadoMidiaIdentificacao
import br.ufscar.sagui.controleacesso.midia.permanente.MidiaIdentificacaoPermanenteCartao
import br.ufscar.sagui.controleacesso.midia.permanente.MidiaIdentificacaoPermanenteTag
import br.ufscar.sagui.controleacesso.midia.provisoria.MidiaIdentificacaoProvisoria
import br.ufscar.sagui.core.Pessoa
import br.ufscar.sagui.core.TipoUnidadeOrganizacional
import br.ufscar.sagui.core.UnidadeOrganizacional
import br.ufscar.sagui.core.Vinculo
import br.ufscar.sagui.core.grupo.Grupo
import org.springframework.util.Assert

/**
 * Created by francisco on 29/01/2015.
 */

class SaguiControleAcessoTestUtil {

    static GrupoLeitorAcesso adicionarGrupoLeitorAcesso(String nomeGrupo, List<LeitorAcesso> leitores = []){

        Assert.notNull nomeGrupo, "O objeto [nomeGrupo] não pode ser nulo"

        def grupo = new GrupoLeitorAcesso()
        grupo.nomeGrupo = nomeGrupo
        grupo.leitores = (leitores as Set)

        if(grupo.save(flush: true)){
            println("Grupo leitor acesso com id [${grupo.id}] salvo.")
        }
        else{
            println("Falha ao salvar o grupo de leitores de acesso [${grupo}].")
            println(grupo.getErrors())
            return null
        }
        return grupo
    }

    static TipoLeitorAcesso adicionarTipoLeitorAcesso (String nome, Boolean urna) {
        Assert.notNull(nome, "Nome nulo.")
        Assert.notNull(urna, "Urna nula.")

        def tipoLeitor = new TipoLeitorAcesso(nome: nome, urna: urna)

        if (tipoLeitor.save()) {
            println("Tipo de leitor de acesso com id [${tipoLeitor.id}] salvo.")
        } else{
            println("Falha ao salvar tipo de leitor de acesso [${tipoLeitor}].")
            println(tipoLeitor.getErrors())
            return null
        }
        return tipoLeitor
    }
    static LeitorAcesso adicionarLeitorAcesso(String nomeLeitor,String codigo, Integer nivelOrigem, Integer nivelDestino,Boolean permitirPassanteVisitante, TipoLeitorAcesso tipo,
                                       DirecaoAcesso direcaoAcesso,DispositivoAcesso dispositivo){

        Assert.notNull nomeLeitor, "O objeto [nomeLeitor] não pode ser nulo"
        Assert.notNull nivelOrigem, "O objeto [nivelOrigem] não pode ser nulo"
        Assert.notNull nivelDestino, "O objeto [nivelDestino] não pode ser nulo"
        Assert.notNull permitirPassanteVisitante, "O objeto [permitirPassanteVisitante] não pode ser nulo"
        Assert.notNull tipo, "O objeto [tipo] não pode ser nulo"
        Assert.notNull direcaoAcesso, "O objeto [direcaoAcesso] não pode ser nulo"
        Assert.notNull codigo, "O objeto [codigo] não pode ser nulo"
        Assert.notNull dispositivo, "O objeto [dispositivo] não pode ser nulo"

        def leitor = new LeitorAcesso()
        leitor.nome = nomeLeitor
        leitor.nivelDestino = nivelDestino
        leitor.nivelOrigem = nivelOrigem
        leitor.permitirPassanteVisitante = permitirPassanteVisitante
        leitor.tipo = tipo
        leitor.direcaoAcesso = direcaoAcesso
        leitor.codigo = codigo
        leitor.dispositivo = dispositivo

        if(leitor.save()){
            println("Leitor de acesso com id [${leitor.id}] salvo.")
        }
        else{
            println("Falha ao salvar leitor de acesso [${leitor}].")
            println(leitor.getErrors())
            return null
        }
        return leitor
    }

    static TipoDispositivoAcesso adicionarTipoDispositivoAcesso(String nome){
        def dispositivo = new TipoDispositivoAcesso(nome: nome)

        if (dispositivo.save(flush: true)){
            println("Tipo de dispositivo de acesso com id [${dispositivo.id}] salvo.")
        }else{
            println("Falha ao salvar tipo de dispositivo de acesso [${dispositivo}]")
            println(dispositivo.getErrors())
            return null
        }
        return  dispositivo
    }
    static TipoUnidadeOrganizacional adicionarTipoUnidadeOrganizacional(String nome){
        def tipo = new TipoUnidadeOrganizacional(nome: nome)

        if (tipo.save(flush: true)){
            println("Tipo de unidade organizacional com id [${tipo.id}] salva.")
        }else{
            println("Falha ao salvar o tipo de unidade organizacional [${tipo}].")
            println(tipo.getErrors())
            return null
        }
        return tipo
    }
    static UnidadeOrganizacional adicionarUnidadeOrganizacional(String nome, String sigla, String portaria, Date inicio,
                                                                Date fim, TipoUnidadeOrganizacional tipo){

        def unidade = new UnidadeOrganizacional(nome: nome, sigla: sigla, portariaCriacao: portaria,
                inicioFuncionamento: inicio, fimFuncionamento: fim, tipo: tipo)

        if (unidade.save(flush: true)){
            println("Unidade organizacional com id [${unidade.id}] salva.")
        } else{
            println("Falha ao salvar a unidade organizacional [${unidade}].")
            println(unidade.getErrors())
            return null
        }
        return unidade
    }

    static DispositivoAcesso adicionarDispositivoAcesso(String nomeDispositivo,String codigo, TipoDispositivoAcesso tipo){

        Assert.notNull nomeDispositivo, "O objeto [nomeDispositivo] não pode ser nulo"
        Assert.notNull codigo, "O objeto [codigo] não pode ser nulo"
        Assert.notNull tipo, "O objeto [tipo] não pode ser nulo"

        def dispositivo = new DispositivoAcesso()
        dispositivo.nome = nomeDispositivo
        dispositivo.codigo=codigo
        dispositivo.tipo = tipo

        if(dispositivo.save(flush: true)){
            println("Dispositivo de acesso com id [${dispositivo.id}] salvo.")
        }
        else{
            println("Erro ao salvar dispositivo de acesso [${dispositivo}].")
            println(dispositivo.getErrors())
            return null
        }
        return dispositivo
    }

    static PassanteVisitante adicionarPassanteVisitante(String nome, String documento, TipoDocumento tipoDocumento, String observacao = null){

        Assert.notNull nome, "A literal [nome] não pode ser nulo"
        Assert.notNull documento, "O literal [documento] não pode ser nulo"
        Assert.notNull tipoDocumento, "O objeto [tipoDocumento] não pode ser nulo"

        def visitante = new PassanteVisitante()
        visitante.setNome(nome)
        visitante.setDocumento(documento)
        visitante.setTipoDocumento(tipoDocumento)
        visitante.setObservacao(observacao)


        if (visitante.save()) {
            println("Passante Visitante com id [${visitante.id}] salvo.")
        } else {
            println("Falha ao salvar o passante visitante [${visitante}].")
            println(visitante.getErrors())
            return null
        }
        return visitante
    }

    static PassantePessoa adicionarPassantePessoa(Pessoa pessoa){

        Assert.notNull pessoa, "O objeto [pessoa] não pode ser nulo"

        def passante = new PassantePessoa(pessoa: pessoa)

        if(passante.save(flush: true)){
            println("Passante pessoa com id [${passante.id}] salvo.")
        }
        else{
            println("Falha ao salvar passante pessoa [${passante}]")
            println(passante.getErrors())
            return null
        }
        return passante
    }

    static PoliticaAcesso adicionarPoliticaAcesso(String nomePolitica,Boolean antipassBack, Boolean controlarRota, Boolean ativa, Boolean negar,GrupoLeitorAcesso grupoLeitorAcesso,String observacao = null){

        Assert.notNull nomePolitica, "O objeto [nomePolitica] não pode ser nulo"
        Assert.notNull antipassBack, "O objeto [antipassBack] não pode ser nulo"
        Assert.notNull controlarRota, "O objeto [controlarRota] não pode ser nulo"
        Assert.notNull ativa, "O objeto [ativar] não pode ser nulo"
        Assert.notNull negar, "O objeto [negar] não pode ser nulo"
        Assert.notNull grupoLeitorAcesso, "O objeto [grupoLeitorAcesso] não pode ser nulo"

        def politica = new PoliticaAcesso()
        politica.antipassBack = antipassBack
        politica.ativa = ativa
        politica.negar = negar
        politica.controlarRota = controlarRota
        politica.grupoLeitorAcesso = grupoLeitorAcesso
        politica.observacao = observacao
        politica.nome = nomePolitica

        if(politica.save(flush: true)){
            println("Politica de acesso com id [${politica.id}] salva.")
        }
        else{
            println("Falha ao salvar politica de acesso [${politica}].")
            println(politica.getErrors())
            return null
        }
        return politica
    }

    static TabelaHorarioPoliticaAcesso adicionarTabelaHorarioPoliticaAcesso(Integer diaSemana,Integer horaInicio, Integer minutoInicio, Integer horaFim, Integer minutoFim,PoliticaAcesso politicaAcesso){

        Assert.notNull diaSemana, "O objeto [diaSemana] não pode ser nulo"
        Assert.notNull horaInicio, "O objeto [horaInicio] não pode ser nulo"
        Assert.notNull minutoInicio, "O objeto [minutoInicio] não pode ser nulo"
        Assert.notNull horaFim, "O objeto [horaFim] não pode ser nulo"
        Assert.notNull minutoFim, "O objeto [minutoFim] não pode ser nulo"
        Assert.notNull politicaAcesso, "O objeto [politicaAcesso] não pode ser nulo"

        def tabela = new TabelaHorarioPoliticaAcesso()
        tabela.diaSemana = diaSemana
        tabela.horaInicio = horaInicio
        tabela.minutoInicio = minutoInicio
        tabela.horaFim = horaFim
        tabela.minutoFim = minutoFim
        tabela.politicaAcesso = politicaAcesso

        if(tabela.save(flush: true)){
            println("Tabela de horario com id [${tabela.id}] salva.")
        }
        else{
            println("Falha ao salvar tabela de horario [${tabela}].")
            println(tabela.getErrors())
            return null
        }
        return tabela
    }

    static AplicacaoPoliticaAcesso adicionarAplicacaoPoliticaAcesso(PoliticaAcesso politicaAcesso, Grupo grupo , Passante passante, Boolean ativo){

        Assert.notNull politicaAcesso, "O objeto [politicaAcesso] não pode ser nulo"
        if((grupo == null && passante == null)||(grupo != null && passante != null))
            Assert.fail "O objeto [grupo] e [passante] não podem ser nulos nem verdadeiros ao mesmo tempo"
        Assert.notNull ativo, "O boleano [ativo] não pode ser nulo"


        def aplicacaoPoliticaAcesso = new AplicacaoPoliticaAcesso(politicaAcesso: politicaAcesso, grupo: grupo,
                passante: passante, ativo: ativo)

        if(aplicacaoPoliticaAcesso.save(flush: true)){
            println("Aplicacao de política de acesso com id [${aplicacaoPoliticaAcesso.id}] salva.")
        }
        else{
            println("Falha ao salvar aplicacao de política de acesso [${aplicacaoPoliticaAcesso}].")
            println(aplicacaoPoliticaAcesso.getErrors())
            return null
        }
        return aplicacaoPoliticaAcesso
    }

    static AutorizacaoPassanteVisitante adicionarAutorizacaoPassanteVisitante(PassanteVisitante visitante, UnidadeOrganizacional unidade, Date inicioAutorizacao, Date fimAutorizacao, MidiaIdentificacaoProvisoria midiaProvisoria, Veiculo veiculo = null, String observacao = null, Boolean ativo = true){

        Assert.notNull visitante, "O objeto [visitante] não pode ser nulo"
        Assert.notNull unidade, "O objeto [unidade] não pode ser nulo"
        Assert.notNull inicioAutorizacao, "O objeto [inicioAutorizacao] não pode ser nulo"
        Assert.notNull fimAutorizacao, "O objeto [fimAutorizacao] não pode ser nulo"
        Assert.notNull midiaProvisoria, "O objeto [MidiaIdentificacaoProvisoria] não pode ser nulo"

        def autorizacao = new AutorizacaoPassanteVisitante()
        autorizacao.passanteVisitante = visitante
        autorizacao.unidadeOrganizacionalDestino = unidade
        autorizacao.inicioAutorizacao = inicioAutorizacao
        autorizacao.fimAutorizacao = fimAutorizacao
        autorizacao.midiaProvisoria = midiaProvisoria

        autorizacao.veiculoPassanteVisitante = veiculo
        autorizacao.ativo = ativo
        autorizacao.observacao = observacao

        //Cria registro que relaciona visitante e veiculo
        if(veiculo&&visitante)
            adicionarPassanteVisitanteVeiculo(visitante,veiculo)

        if (autorizacao.save(flush: true)) {
           println("Autorizacao passante visitante com id [${autorizacao.id}] salva.")
        } else {
            println("Falha ao salvar autorizacao passante visitante [${autorizacao}].")
            println(autorizacao.getErrors())
            return null
        }
        return autorizacao
    }

    static AutorizacaoPassantePessoa adicionarAutorizacaoPassantePessoa(PassantePessoa passantePessoa, Date inicioAutorizacao,  Date fimAutorizacao, String observacao = null, Boolean ativo = true, MidiaIdentificacaoProvisoria midiaProvisoria){

        Assert.notNull passantePessoa, "O objeto [visitante] não pode ser nulo"
        Assert.notNull inicioAutorizacao, "O objeto [inicioAutorizacao] não pode ser nulo"
        Assert.notNull fimAutorizacao, "O objeto [fimAutorizacao] não pode ser nulo"
        Assert.notNull midiaProvisoria, "O objeto [MidiaIdentificacaoProvisoria] não pode ser nulo"

        def autorizacao = new AutorizacaoPassantePessoa()
        autorizacao.passantePessoa = passantePessoa
        autorizacao.inicioAutorizacao = inicioAutorizacao
        autorizacao.fimAutorizacao = fimAutorizacao
        autorizacao.midiaProvisoria = midiaProvisoria

        autorizacao.ativo = ativo
        autorizacao.observacao = observacao

        if (autorizacao.save(flush: true)) {
            println("Autorizacao Passante Pessoa com id [${autorizacao.id}] salva.")
        } else {
            println("Falha ao salvar autorizaçao passante pessoa [${autorizacao}].")
            println(autorizacao.getErrors())
            return null
        }
        return autorizacao
    }

    static EstadoMidiaIdentificacao adicionarEstadoMidiaIdentificacao(String nome, Boolean ativo){
        def midia = new EstadoMidiaIdentificacao(nome: nome, ativo: ativo,)

        if(midia.save(flush: true)){
            println("Estado de midia de identificação com id [${midia.id}] salvo." )
        } else {
            println("Falha ao salvar o estado de midia de identificação [${midia}].")
            println(midia.getErrors())
            return null
        }
        return midia
    }

    static MidiaIdentificacaoProvisoria adicionarMidiaProvisoria(String codigoMidia, EstadoMidiaIdentificacao estado) {

        Assert.notNull codigoMidia, "O objeto [codigoMidia] não pode ser nulo"
        Assert.notNull estado, "O objeto [estado] não pode ser nulo"

        def midiaProvisoria = new MidiaIdentificacaoProvisoria()
        midiaProvisoria.estadoMidiaIdentificacao = estado
        midiaProvisoria.codigo = codigoMidia

        if (midiaProvisoria.save(flush: true)) {
            println("Midia de identificação provisória com id [${midiaProvisoria?.id}] salva.")
        } else {
            println("Falha ao salvar a midia de identificaçao provisoria com id [${midiaProvisoria}].")
            println(midiaProvisoria.getErrors())
            return null
        }
        return midiaProvisoria
    }
}

谢谢!

最佳答案

问题出在休眠插件上。我从.m2文件夹中删除了它,并通过运行应用程序将其重新安装。那解决了问题。它一定已损坏。

谢谢!

关于java - 在Grails中运行集成测试时,如何解决HibernateGormStaticApi的java.lang.NoClassDefFoundError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28308154/

相关文章:

java - 通过 RMI 传递事件监听器

java - 不使用泛型时,确保在关系映射上定义目标实体

Java:远程方法调用(RMI)

postgresql - 存储对多个表的外键引用的最佳方法是什么?

java - 构建Java GUI的有效设计方法?

java - hibernate 检测级联插入

java - 映射我的 bean 时 Hibernate 配置文件中出现异常

java - Hibernate 不批量插入

sql - 从 Redshift 中的表中获取缺失的日期

php postgresql pg_fetch_all