2009-05-22 8 views
0

Dans un plugin Grails 1.1, je suis en train de charger une classe de l'application principale en utilisant le code suivant:charge classe d'application de plug-in

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

configName est le nom de la classe dans $MAIN_APP/grails-app/conf contenant le informations de configuration. Toutefois, lorsque le code ci-dessus s'exécute dans un test unitaire applicationHolder.application renvoie null, provoquant la méthode ci-dessus pour lancer un NullPointerException. Un Grails JIRA issue a été créé pour ce problème, mais il a été marqué comme fixe malgré le fait que le problème semble toujours exister.

Je sais que dans la classe du descripteur de plugin je peux accéder à l'application principale (une instance de GrailsApplication) via la variable implicite application. Mais le code ci-dessus n'est pas dans le descripteur du plugin.

Existe-t-il un moyen de charger une classe à partir de l'application principale dans un plugin (mais en dehors du descripteur de plugin)?

Merci, Don

Répondre

0

Il se trouve qu'il ya 2 réponses possibles.

La bonne réponse

GrailsApplication ne sont pas disponibles dans les tests unitaires, de sorte que le code ci-dessus fonctionne, il devrait être un test d'intégration

Le Hack qui fonctionne

changement

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

à

parse(MyClass.classLoader.loadClass(configName))