grails 2.3.6中的FixtureLoader 1.2无法加载数据或创建加载程序
在引导过程中,我在将Grails 2.3.6加载到夹具时遇到问题。 尝试加载数据时抛出空指针 这是我尝试使用的代码:grails 2.3.6中的FixtureLoader 1.2无法加载数据或创建加载程序,grails,grails-2.0,fixtures,Grails,Grails 2.0,Fixtures,在引导过程中,我在将Grails 2.3.6加载到夹具时遇到问题。 尝试加载数据时抛出空指针 这是我尝试使用的代码: class BootStrap { def fixtureLoader def init = { ServletContext ctx -> environments { ... development { fixtureLoader.load("developm
class BootStrap {
def fixtureLoader
def init = { ServletContext ctx ->
environments {
...
development {
fixtureLoader.load("developmentTinySanityCheckData")
}
}
}
...
我的项目位于~/grails-2.3.6-workspace/imca2
因此,我希望上面的内容能够加载developmentsTanityCheckData.groovy
从~/grails-2.3.6-workspace/imca2/fixtures
该文件确实存在且可读:
ls -lt ~/grails-2.3.6-workspace/imca2/fixtures
-rw-r--r-- 1 nick nick 83 2014-03-16 19:32 developmentTinySanityCheckData.groovy
并包含以下最小数据:
fixture {
DoctorDecisionMakerType(com.ubergen.DecisionMakerType) {
code = "Doctor"
}
}
但是加载失败,因为GrailsContextLoaderNullPointerException:无法对null对象调用load()
[localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: Cannot invoke method load() on null object
java.lang.NullPointerException: Cannot invoke method load() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45)
...
at BootStrap$_closure1_closure3_closure6.call(BootStrap.groovy)
at groovy.lang.Closure.call(Closure.java:405)
at BootStrap$_closure1_closure3_closure6.call(BootStrap.groovy)
...
无法注入FIXTURELOADER?
我假设null对象意味着fixture加载器没有被实例化;也许它不是由依赖注入程序创建的?我不知道这是否正确
我试图强制fixtureLoader与以下内容共存:
class BootStrap {
def fixtureLoader
def init = { ServletContext ctx ->
fixtureLoader = ctx.getBean('fixtureLoader'); // INJECT LOADER
environments {
...
development {
fixtureLoader.load("developmentTinySanityCheckData")
}
}
}
...
但是Get-getBean()的签名不适用于参数[fixtureLoader]
ERROR context.GrailsContextLoader - Error initializing the application: No signature of method: org.apache.catalina.core.ApplicationContextFacade.getBean() is applicable for argument types: (java.lang.String) values: [fixtureLoader]
版本:
ubuntu 10.04
eclipse / SpringToolSuite 3.4.0
grails 2.3.6
groovy 2.1.9 (for both project and workspace)
grails plugins:
build-test-data 2.1.2
fixtures 1.2
我最初的问题是试图在fixtureLoader上调用load时抛出了一个空指针。fixtureLoader似乎不可用,至少在开发模式下是这样 在签入BuildConfig.groovy时,我发现
plugins {
...
compile ":build-test-data:2.1.2"
test ":fixtures:1.2"
}
这可能意味着夹具加载程序仅在执行模式为test时创建并可用
我将此更正为:
plugins {
...
compile ":build-test-data:2.1.2"
compile ":fixtures:1.2"
}
加载器也是在开发模式下创建和工作的。尽管您在第二种方法中尝试从ApplicationContext获取bean的方式是错误的,但按照您的方法,我没有遇到任何问题<上面的代码>ctx是servletContext,而不是applicationContext。为了做到这一点,必须使用像
grailsApplication.mainContext.getBean('fixtureLoader')
这样的东西。grailsApplication被注入到BootStrap.groovy
。然而,第一种方法应该按原样工作。它在Grails2.3.6中对我有效。真正的问题是,试图在fixtureLoader上调用load会抛出一个空指针。试图从上下文中获取bean只是对修复它的胡乱猜测,感觉不对。我现在已经找到了问题所在。这是一个复制/粘贴错误。我马上就发布。我应该很清楚我在开发模式中遇到了问题。事实证明,这是相关的。