2009-05-22 3 views
0

В Grails 1.1 плагина, я пытаюсь загрузить класс из основного приложения, используя следующий код:нагрузки класс приложения из плагина

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

Где configName это имя класса в $MAIN_APP/grails-app/conf, содержащем информация о конфигурации. Однако, когда вышеприведенный код проходит внутри единичного теста, applicationHolder.application возвращает значение null, в результате чего вышеописанный метод выдает NullPointerException. Для этой проблемы был создан Grails JIRA issue, но он был отмечен как фиксированный, несмотря на то, что проблема по-прежнему существует.

Я знаю, что в классе дескриптора плагина я могу получить доступ к основному приложению (экземпляр GrailsApplication) через неявную переменную application. Но код, показанный выше, находится не в дескрипторе плагина.

Есть ли способ загрузить класс из основного приложения в плагин (но вне дескриптора плагина)?

Спасибо, Дон

ответ

0

Оказывается, есть 2 возможных ответов.

Правильный ответ

GrailsApplication не доступен в стандартных тестах, так что для приведенного выше кода для работы он должен быть интеграционный тест

The Hack, которая работает

Изменение

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

до

parse(MyClass.classLoader.loadClass(configName))