Cargar clase de aplicación desde el complemento
-
23-08-2019 - |
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
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))