2016-05-15 10 views
1

にGrailsのGORM /ドメイン・クラスの結果を保存する私は登録ページが正常に記入されたときに、関連するアカウントの階層を作成するための責任のサービスがあります。`NullPointerException`

かかわらず、私は何をすべきかの
def userRole = Role.findByAuthority("ROLE_USER") 
    final account = new Account(email: command.email, password: command.password) 
    account.save(flush: true) 

    final publisher = new Publisher(name: command.name) //, account: account) 
    publisher.save(flush: true) 

    final accountRole = AccountRole.create account, userRole 

AccountRole.create account, userRoleは、この行で失敗:私はnew AccountRole(account: account, role: userRole)を試してみましたが、私は手動でsaveを呼び出すときに、これはあまりにも失敗し

static AccountRole create(Account account, Role role) { 
    def instance = new AccountRole(account: account, role: role) 
    instance.save() // throws NullPointerException 
    instance 
} 

AccountAccountRoleは、Grails 3 Spring Securityプラグインによって生成されたクラス(わずかに微調整)です。

java.lang.reflect.InvocationTargetException: null 
    at grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter.doFilter(UpdateRequestContextHolderExceptionTranslationFilter.groovy:64) 
    at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:53) 
    at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62) 
    at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58) 
    at grails.plugin.springsecurity.web.filter.DebugFilter.invokeWithWrappedRequest(DebugFilter.groovy:102) 
    at grails.plugin.springsecurity.web.filter.DebugFilter.doFilter(DebugFilter.groovy:69) 
    at grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter.doFilter(UpdateRequestContextHolderExceptionTranslationFilter.groovy:64) 
    at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:53) 
    at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62) 
    at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException: null 
    at package.AccountRole.create(AccountRole.groovy:48) 
    at package.RegistrationService.$tt__handleNewRegistration(RegistrationService.groovy:25) 

バージョン情報:ここでは

は失敗しAccountRole.create(...)通話のためのスタックトレースです

| Grails Version: 3.1.5 
| Groovy Version: 2.4.6 
| JVM Version: 1.8.0_73 

私の悲惨さから私を保存してください!私はこれで数時間を費やしました:(

+0

この動作をサンプルアプリケーションに提供できますか?あなたのドメインクラスのものだけが正しいディレクトリにないので、実際にはドメインクラスではありません。 –

+0

この例のPublisher部分は無関係なようです...それを取り除きたいかもしれません。私はローカル変数宣言、特に変更するもの( "保存"するときと同じように)のために "決着"を使ったこともありません。 – billjamesdev

答えて

2

確かに十分な情報はありませんが、それはコンストラクタコールで作成したばかりなのでinstanceはnullではありませんが、確かめてください。

static AccountRole create(Account account, Role role) { 
    def instance = new AccountRole(account: account, role: role) 
    println "instance null? ${instance == null}" 
    instance.save() // throws NullPointerException 
    instance 
} 

それは、検証中に問題が例外を引き起こしているので、私の推測がuserRoleまたはaccountのいずれかに何か問題があるということである可能性が高いです。userRoleが正しく取得されたこととから、検証エラーがないことを確認してくださいアカウントsave()電話:

def account = new Account(email: command.email, password: command.password) 
account.save(flush: true) 
if (account.hasErrors()) { 
    log.warn "Failed to save Account $account: $account.errors" 
}