Grails Spring Security OpenID插件引导中的NPE

Grails Spring Security OpenID插件引导中的NPE,grails,openid,Grails,Openid,我试图在grails中使用Spring安全OpenID插件。我使用提供的脚本生成各种类,在Config.groovy中有以下内容: grails.plugins.springsecurity.userLookup.userDomainClassName = 'net.example.manager.User' grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'net.example.manager.UserRol

我试图在grails中使用Spring安全OpenID插件。我使用提供的脚本生成各种类,在Config.groovy中有以下内容:

grails.plugins.springsecurity.userLookup.userDomainClassName = 'net.example.manager.User'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'net.example.manager.UserRole'
grails.plugins.springsecurity.authority.className = 'net.example.manager.Role'
grails.plugins.springsecurity.openid.domainClass = 'net.example.manager.OpenID'
当我运行grails run app时,出现以下错误:

[main] ERROR context.GrailsContextLoader  - Error executing bootstraps: Cannot invoke method newInstance() on null object
java.lang.NullPointerException: Cannot invoke method newInstance() on null object
at SpringSecurityOpenidGrailsPlugin$_closure2.doCall(SpringSecurityOpenidGrailsPlugin.groovy:140)
at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212)
at grails.web.container.EmbeddableServer$start.call(Unknown Source)
at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158)
at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy)
at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
at _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:149)
at _GrailsRun_groovy$_run_closure5.call(_GrailsRun_groovy)
at _GrailsRun_groovy.runInline(_GrailsRun_groovy:116)
at _GrailsRun_groovy.this$4$runInline(_GrailsRun_groovy)
at _GrailsRun_groovy$_run_closure1.doCall(_GrailsRun_groovy:59)
at RunApp$_run_closure1.doCall(RunApp.groovy:33)
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:427)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:415)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.executeTargets(Gant.groovy:590)
at gant.Gant.executeTargets(Gant.groovy:589)
我在OpenID插件的源代码中找到了这个区域的错误(错误发生在最后一行):


我的域类存在,但由于某些原因grails无法获取该类,我不知道为什么。

我也遇到了同样的问题,尽管我收到了一条短得多的错误消息。无论出于何种原因,对“conf.userLookup.userDomainClassName”的调用都正确地返回了类名,并且与类完全匹配,但“ctx.grailsApplication.getClassForName(userClassName)”返回了null。对我来说,这只发生在本地运行时。当我推到我的远程分支并在那里运行它时,我没有遇到任何问题

我通过避免调用“getForClassName”修复了这个问题。我在Config.groovy文件中添加了以下行:

grails.plugins.springsecurity.userLookup.userDomainClass = mypackage.User;
// The old way this was done was breaking when run locally for some reason.
//String userClassName = conf.userLookup.userDomainClassName
//def userClass = ctx.grailsApplication.getClassForName(userClassName)
//
// So I replaced it with this:
Class userClass = conf.userLookup.userDomainClass;
并在我的SpringSecurityOpenidGrailsPlugin.groovy文件中做了以下更改:

grails.plugins.springsecurity.userLookup.userDomainClass = mypackage.User;
// The old way this was done was breaking when run locally for some reason.
//String userClassName = conf.userLookup.userDomainClassName
//def userClass = ctx.grailsApplication.getClassForName(userClassName)
//
// So I replaced it with this:
Class userClass = conf.userLookup.userDomainClass;

现在它运行正常。

我也遇到了同样的问题,不过我收到的错误消息要短得多。无论出于何种原因,对“conf.userLookup.userDomainClassName”的调用都正确地返回了类名,并且与类完全匹配,但“ctx.grailsApplication.getClassForName(userClassName)”返回了null。对我来说,这只发生在本地运行时。当我推到我的远程分支并在那里运行它时,我没有遇到任何问题

我通过避免调用“getForClassName”修复了这个问题。我在Config.groovy文件中添加了以下行:

grails.plugins.springsecurity.userLookup.userDomainClass = mypackage.User;
// The old way this was done was breaking when run locally for some reason.
//String userClassName = conf.userLookup.userDomainClassName
//def userClass = ctx.grailsApplication.getClassForName(userClassName)
//
// So I replaced it with this:
Class userClass = conf.userLookup.userDomainClass;
并在我的SpringSecurityOpenidGrailsPlugin.groovy文件中做了以下更改:

grails.plugins.springsecurity.userLookup.userDomainClass = mypackage.User;
// The old way this was done was breaking when run locally for some reason.
//String userClassName = conf.userLookup.userDomainClassName
//def userClass = ctx.grailsApplication.getClassForName(userClassName)
//
// So I replaced it with this:
Class userClass = conf.userLookup.userDomainClass;

现在它运行良好。

我不想问显而易见的问题,但是您的包和类名是否与顶部的配置匹配?您是否在
Bootstrap.groovy
中添加了一些代码来创建一些用户和角色?如果是这样,你能发布它吗?是的,包/类名匹配。不,我的Bootstrap.groovy中没有用于创建用户的内容。(事实上,我在Bootstrap.groovy中注释掉了所有内容,我仍然得到这个错误)你知道!尝试将这些类添加到“默认”包中,并检查是否仍然出现错误?!(可能发生了名字冲突?!)我想顺便说一句!我不想问显而易见的问题,但是您的包和类名是否与顶部的配置匹配?您是否在
Bootstrap.groovy
中添加了一些代码来创建一些用户和角色?如果是这样,你能发布它吗?是的,包/类名匹配。不,我的Bootstrap.groovy中没有用于创建用户的内容。(事实上,我在Bootstrap.groovy中注释掉了所有内容,我仍然得到这个错误)你知道!尝试将这些类添加到“默认”包中,并检查是否仍然出现错误?!(可能发生了名字冲突?!)我想顺便说一句!