NullPointerException в GORM 6.1.10 - PullRequest
       12

NullPointerException в GORM 6.1.10

0 голосов
/ 17 сентября 2018

Я обновляю GORM 6.1.9.RELEASE до 6.1.10.RELEASE, чтобы исправить следующее:

https://github.com/grails/grails-data-mapping/issues/1072

Я столкнулся с другой проблемой, когда мой геттер вмой класс домена не вызывается для пустого поля.

Возьмите пример класса домена:

class Factory {

    String name
    Factory primaryFactory

    static constraints = {
        primaryFactory nullable: true
    }

    Factory getPrimaryFactory() {
        primaryFactory ?: this
    }
}

Теперь возьмите следующий код в Bootstrap.groovy, где создается Factory с установленным primaryFactory.в NULL:

def init = {

    def testFactory = new Factory(name: 'Test Factory').save()

    assert Factory.count() == 1
}

Когда я создаю следующий TestController, testFactory.primaryFactory.name не отображается в GORM 6.1.10.RELEASE, пока он находится в 6.1.9.RELEASE:

class TestController {

    def index() {
        Factory testFactory = Factory.findByName('Test Factory')
        println "Primary Factory: $testFactory.primaryFactory.name"
        render 'Check Console'
    }
}

Выводится следующая ошибка:

2018-09-17 12:34:22.161 ERROR --- [nio-8080-exec-1] 
o.g.web.errors.GrailsExceptionResolver   : NullPointerException 
occurred when processing request: [GET] /test/index
Cannot get property 'name' on null object. Stacktrace follows:

java.lang.reflect.InvocationTargetException: null
at org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:211)
at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
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: Cannot get property 'name' on null object
at com.mycompany.myapp.TestController.index(TestController.groovy:7)
... 14 common frames omitted

Ниже приведен пример проекта github, для повторного создания просто измените версию GORM в gradle.properties с 6.1.9.RELEASE на 6.1.10.RELEASE:

https://github.com/georgy3k/gorm-6.1.10-NullPointerException

РЕДАКТИРОВАТЬ:

Кажется, я также не могу явно вызвать getter.Когда я пытаюсь сделать это в этом коде:

class TestController {

    def index() {
        Factory testFactory = Factory.findByName('Test Factory')
        String testFactoryPrimaryName = testFactory.getPrimaryFactory().name
        println "Primary Factory: $testFactoryPrimaryName"
        render 'Check Console'
    }
}

Это выдает следующую ошибку:

2018-09-18 11:47:40.837 ERROR --- [nio-8080-exec-4] o.g.web.errors.GrailsExceptionResolver   : NullPointerException occurred when processing request: [GET] /test/index
Cannot get property 'name' on null object. Stacktrace follows:

java.lang.reflect.InvocationTargetException: null
at org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:211)
at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
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: Cannot get property 'name' on null object
at com.mycompany.myapp.TestController.index(TestController.groovy:9)
... 14 common frames omitted
...