Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-69982

Can't check if object is null in pipeline - Cannot invoke method get() on null object

    • Icon: Bug Bug
    • Resolution: Not A Defect
    • Icon: Minor Minor
    • groovy-plugin
    • None

       
      Can't check a object is null inside a jenkins pipeline, this should work in groovy but does not work in a jenkins pipeline

      Apologies if I have logged this in the wrong place or if this is not possible in a jenkins pipeline
       
      Pipeline

      pipeline {
          agent any
          stages {
              stage('Test') {
                  steps {
                      script {
                          def data = readYaml text: """
      builds:
        test:
          parameters:
            booleanParam:
              FOO: 'true'
        test2:
      """
                          if ( data.get('builds').get('test2').get('parameters') != null ) {
                              echo "test2 params exist"
                          } else {
                              echo "test2 params DONT exist"
                          }
                      }
                  }
              }
          }
      }
      

      Error

      java.lang.NullPointerException: Cannot invoke method get() on null object
      	at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:47)
      	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
      	at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:34)
      	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
      	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:180)
      	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:182)
      	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
      	at WorkflowScript.run(WorkflowScript:15)
      	at ___cps.transform___(Native Method)
      	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:90)
      	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:113)
      	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:83)
      	at jdk.internal.reflect.GeneratedMethodAccessor399.invoke(Unknown Source)
      	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
      	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
      	at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
      	at com.cloudbees.groovy.cps.Next.step(Next.java:83)
      	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:177)
      	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:166)
      	at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:136)
      	at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:275)
      	at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:166)
      	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
      	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)
      	at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:187)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:420)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$400(CpsThreadGroup.java:95)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:330)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:294)
      	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)
      	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      	at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:139)
      	at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:30)
      	at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:70)
      	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
      	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
      	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      	at java.base/java.lang.Thread.run(Thread.java:829)
      Finished: FAILURE
      

       

          [JENKINS-69982] Can't check if object is null in pipeline - Cannot invoke method get() on null object

          Markus Winter added a comment -

          data.get('builds').get('test2')
          returns null as per the Yaml specification.

          So not a bug.

          Markus Winter added a comment - data.get('builds').get('test2') returns null as per the Yaml specification. So not a bug.

          Markus Winter added a comment -

          long answer: 

          with data.get("builds").get("test2") you can't distinguish if "test2" is defined at all or if it is assigned the null value (as is in your case).

          You might want to use

          data.get("builds").containsKey("test2") to explicitly check if "test2" is defined.

          Markus Winter added a comment - long answer:  with data.get("builds").get("test2") you can't distinguish if "test2" is defined at all or if it is assigned the null value (as is in your case). You might want to use data.get("builds").containsKey("test2") to explicitly check if "test2" is defined.

            vjuranek vjuranek
            psimms_r7 Peter Simms
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: