Exception when viewing job parameters having validating string parameters

XMLWordPrintable

      Upgrade from Jenkins version 2.516.3 to 2.528.1 we detected exceptions in the system log of Jenkins related to validating string plugin even if this plugins is not upgraded and using latest available version 255.v31e2e6d0d273.

      It seems that changes introduced in Jenkins 2.528.1 have caused these issues, as even undefined parameters are now displayed as ‘N/A’ instead of empty field.

      UPDATE 2025-11-14: Detected this in 2.516.3 so it is not related to the latest LTS upgrade at least.

      Example of errors seen in system log without the long full stack trace:

      Oct 28, 2025 12:47:51 PM WARNING hudson.ExpressionFactory2$JexlExpression evaluate
      Caught exception evaluating: h.xmlEscape(it.regex) in /job/running-job/3/parameters/. Reason: java.lang.NullPointerException: Cannot invoke "String.length()" because "text" is null
      java.lang.NullPointerException: Cannot invoke "String.length()" because "text" is null
      	at hudson.Util.xmlEscape(Util.java:1049)
      	at hudson.Functions.xmlEscape(Functions.java:878)
      	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
      	at org.apache.commons.jexl.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:258)
      	at org.apache.commons.jexl.parser.ASTMethod.execute(ASTMethod.java:104)
      	at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83)
      	at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57)
      	at org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:51)
      	at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80)
      	at hudson.ExpressionFactory2$JexlExpression.evaluate(ExpressionFactory2.java:76)
      	at org.apache.commons.jelly.expression.ExpressionSupport.evaluateRecurse(ExpressionSupport.java:61)
      	at org.apache.commons.jelly.expression.ExpressionSupport.evaluateAsString(ExpressionSupport.java:46)
      	at org.apache.commons.jelly.expression.CompositeExpression.evaluateAsString(CompositeExpression.java:256)
      	at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.buildAttributes(ReallyStaticTagLibrary.java:114)
      	at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:98)
      	at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:100)
      	at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
      	at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:271)
      	at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:102)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
      	at org.apache.commons.jelly.tags.core.WhenTag.doTag(WhenTag.java:46)
      	at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:271)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
      	at org.apache.commons.jelly.tags.core.ChooseTag.doTag(ChooseTag.java:38)
      	at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:271)
      	at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:102)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
      	at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:121)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
      	at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:98)
      	at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:174)
      	at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:271)
      	at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
      	at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:150)
      	at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:271)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:100)
      	at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
      	at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:271)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
      	at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:121)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:100)
      	at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
      	at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:271)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:102)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:102)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:102)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:102)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:100)
      	at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
      	at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:271)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
      	at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:121)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
      	at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:121)
      	at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
      	at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
      	at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:98)
      	at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:67)
      	at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:55)
      	at org.kohsuke.stapler.jelly.ScriptInvoker.execute(ScriptInvoker.java:62)
      	at org.kohsuke.stapler.jelly.ScriptInvoker.execute(ScriptInvoker.java:42)
      	at org.kohsuke.stapler.Facet.handleIndexRequest(Facet.java:275)
      	at org.kohsuke.stapler.jelly.JellyFacet.handleIndexRequest(JellyFacet.java:105)
      	at org.kohsuke.stapler.IndexViewDispatcher.dispatch(IndexViewDispatcher.java:34)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:800)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:938)
      	at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:590)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:800)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:938)
      	at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:590)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:800)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:938)
      	at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:369)
      	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:61)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:800)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:938)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:721)
      	at org.kohsuke.stapler.Stapler.service(Stapler.java:253)
      	at Jenkins Main ClassLoader//jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
      	at Jenkins Main
      ...
      

      Steps to reproduce this issue:

      Step 1: Create Two Pipeline Jobs

      Job 1: running-job

      1. Go to Jenkins dashboard.
      2. Click "+ New Item".
      3. Name the job "running-job".
      4. Select Pipeline, then click OK.
      5. Scroll down to the Pipeline section and paste the following script:
        pipeline {
            agent  any
        
            parameters {
                validatingString(
                    name: 'Parameter',
                    regex: '.+',
                    defaultValue: 'default',
                )
            }
            stages {
                stage('Dummy-stage'){
                    steps {
                        sh "echo $Parameter"
                    }
                }
            }
        }
        
      6. Click Save.
      7. Click Build Now.

      Job 2: trigger-job

      1. Go to Jenkins dashboard.
      2. Click + New Item.
      3. Name the job "trigger-job".
      4. Select Pipeline, then click OK.
      5. Scroll down to the Pipeline section and paste the following script:
        pipeline {
            agent any
        
            stages {
                stage('Trigger running-job with parameters') {
        
                    steps {
                                build job: "running-job", parameters: [
                                validatingString(name: 'Parameter', value: 'test'),
                                // Same behavior with any of the following commented lines:
                                //validatingString(name: 'Parameter'),
                                //validatingString(name: 'Parameter', value: ''),
                                    ]
                    }
                }
            }
        }
        
      6. Click Save.
      7. Click Build Now.

      Step 2: View the Error in Jenkins System Logs

      1. Build the trigger-job.
      2. Open the Console Output of the trigger-job.
      3. Click the build link to the triggered running-job.
      4. Click on Parameters.
      5. Go to Manage Jenkins → System Log.
      6. You should now see the error mentioned.

            Assignee:
            Pratham
            Reporter:
            Björn Oscarsson
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: