Pregunta

En un complemento de Grails 1.1, intento cargar una clase desde la aplicación principal usando el siguiente código:

class MyClass {
  static Map getCustomConfig(String configName){
    return new ConfigSlurper().
      parse(ApplicationHolder.application.classLoader.loadClass(configName))                    
  }
}

Dónde configName es el nombre de la clase en $MAIN_APP/grails-app/conf que contiene la información de configuración.Sin embargo, cuando el código anterior se ejecuta dentro de una prueba unitaria applicationHolder.application devuelve nulo, lo que hace que el método anterior arroje un NullPointerException.Un griales Problema con JIRA se creó para este problema, pero se marcó como solucionado a pesar de que el problema parece persistir.

Sé que dentro de la clase descriptora del complemento puedo acceder a la aplicación principal (una instancia de GrailsApplication) a través del implícito application variable.Pero el código que se muestra arriba no está en el descriptor del complemento.

¿Hay alguna manera de cargar una clase desde la aplicación principal dentro de un complemento (pero fuera del descriptor del complemento)?

Gracias Don

¿Fue útil?

Solución

Resulta que hay 2 posibles respuestas.

La respuesta correcta

GrailsApplication no está disponible en pruebas unitarias, por lo que para que el código anterior funcione debe ser una prueba de integración

El truco que funciona

Cambiar

parse(ApplicationHolder.application.classLoader.loadClass(configName))

a

parse(MyClass.classLoader.loadClass(configName))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top