2
votes

Getting this exception in Gorm 6.1 with Grails 3.3.2:

    Exception in thread "Thread-8" BUG! exception in phase 'semantic analysis' in source unit '/Users/emmanuj/projects/cleena/demo/src/main/groovy/com/emmanuj/cleena/UserService.groovy' unexpected NullpointerException
            at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1070)
            at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
            at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
            at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
            at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:537)
            at grails.boot.GrailsApp.compileGroovyFile(GrailsApp.groovy:313)
            at grails.boot.GrailsApp.recompile(GrailsApp.groovy:299)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1427)
            at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
            at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
            at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:384)
            at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
            at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
            at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
            at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
            at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:182)
            at grails.boot.GrailsApp$_enableDevelopmentModeWatch_closure1.doCall(GrailsApp.groovy:240)
            at grails.boot.GrailsApp$_enableDevelopmentModeWatch_closure1.doCall(GrailsApp.groovy)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1427)
            at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
            at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
            at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
            at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
            at groovy.lang.Closure.call(Closure.java:414)
            at groovy.lang.Closure.call(Closure.java:408)
            at groovy.lang.Closure.run(Closure.java:495)
            at java.lang.Thread.run(Thread.java:748)
    Caused by: java.lang.NullPointerException
            at org.grails.datastore.gorm.services.implementers.AbstractDetachedCriteriaServiceImplementor.doImplement(AbstractDetachedCriteriaServiceImplementor.groovy:79)
            at org.grails.datastore.gorm.services.implementers.AbstractReadOperationImplementer.implement(AbstractReadOperationImplementer.groovy:62)
            at org.grails.datastore.gorm.services.transform.ServiceTransformation.visitAfterTraitApplied(ServiceTransformation.groovy:278)
            at org.grails.datastore.gorm.transform.AbstractTraitApplyingGormASTTransformation.visit(AbstractTraitApplyingGormASTTransformation.groovy:52)
            at org.grails.datastore.gorm.transform.AbstractTraitApplyingGormASTTransformation.visit(AbstractTraitApplyingGormASTTransformation.groovy:42)
            at org.grails.datastore.gorm.transform.AbstractGormASTTransformation.visit(AbstractGormASTTransformation.groovy:59)
            at org.codehaus.groovy.transform.ASTTransformationVisitor.visitClass(ASTTransformationVisitor.java:134)
            at org.codehaus.groovy.transform.ASTTransformationVisitor$2.call(ASTTransformationVisitor.java:178)
            at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1065)
            ... 34 more

Steps To Reproduce

  1. Create a new Grails 3.3.2 project
  2. Create a domain class called User like below:

    import grails.compiler.GrailsCompileStatic
    
    @GrailsCompileStatic
    class User {
    
        String name
        static constraints = {
        }
    }
    
  3. And the Following Gorm Data Services Interface and class:

    package com.emmanuj.cleena
    
    /**
     * DataService interface for user domain
     */
    interface IUserService {
        User get(Serializable id)
        List<User> list(Map args)
        Long count()
        void delete(Serializable id)
        User save(User user)
    }
    

And an abstract class implementation:

    @Slf4j
    @Service(User)
    abstract class UserService implements IUserService {
        def grailsApplication
        List<User> search(User currentUser, long radius, int offset, int max){
            return []
        }

        def getZipcodes(String zipCode, long radius) {
            return []
        }

    }
  1. Run your grails app from the interactive prompt.
  2. Make a change to UserService
  3. Exception/Crash during recompile.

Groovy version is 2.4.13

2

2 Answers

0
votes

I opened an issue on the github repo. Looks like a GORM Hibernate bug: https://github.com/grails/gorm-hibernate5/issues/72. But they've closed it as "won't fix". Not sure why...

0
votes

Restarting the Grails server fixed the issue.

Below is the actual explanation -

I Created a class that was working fine and then I updated it to Associate another dependent class, and Grails threw this error. The error simply means it cannot compile your already compiled class when it requires creating few more objects when server is running.