-
Bug
-
Resolution: Unresolved
-
Minor
-
None
While troubleshooting an environment impacted by https://issues.jenkins.io/browse/JENKINS-72567, it seemed that the JCasC base configurator considers static method and may cause unexpected issues - such as in this case a StackOverflowError.
How to Reproduce
Trying to simplify the blazemeter plugin scenario, you can reproduce a SOE with the following minimal Builder and BuilderDescriptor:
The builder:
import hudson.tasks.Builder; import jenkins.tasks.SimpleBuildStep; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.StaplerRequest; import java.io.Serializable; public class MyBuilder extends Builder implements SimpleBuildStep, Serializable { @DataBoundConstructor public MyBuilder() { } @SuppressWarnings({"UnusedDeclaration"}) public static final class DescriptorImpl extends MyBuilderDescriptor { @Override public boolean configure(StaplerRequest req, net.sf.json.JSONObject formData) throws FormException { return super.configure(req, formData); } } }
The descriptor:
import hudson.Extension; import hudson.model.AbstractProject; import hudson.tasks.BuildStepDescriptor; import hudson.tasks.Builder; import jenkins.model.Jenkins; import org.jenkinsci.Symbol; @Extension @Symbol({"myBuilder"}) public class MyBuilderDescriptor extends BuildStepDescriptor<Builder> { private String myAttribute = "default"; private static MyBuilderDescriptor descriptor; static { descriptor = Jenkins.get().getDescriptorByType(MyBuilderDescriptor.class); } public MyBuilderDescriptor() { super(MyBuilder.class); } public static void setDescriptor(MyBuilderDescriptor descriptor) { MyBuilderDescriptor.descriptor = descriptor; } public static MyBuilderDescriptor getDescriptor() { return MyBuilderDescriptor.descriptor; } public String getMyAttribute() { return myAttribute; } public void setMyAttribute(String myAttribute) { this.myAttribute = myAttribute; } @Override public boolean isApplicable(Class<? extends AbstractProject> jobType) { return false; } }
The global.jelly:
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form"> <f:section title="My Attribute"> <f:entry title="My Attribute" field="myAttribute"> <f:textbox style="width:20em;"/> </f:entry> </f:section> </j:jelly>
When you have this extension, exporting the CasC configuration will yield a SOE:
[...] at io.jenkins.plugins.casc.Configurator.describe(Configurator.java:183) at io.jenkins.plugins.casc.Attribute._describe(Attribute.java:330) at io.jenkins.plugins.casc.Attribute.describe(Attribute.java:264) at io.jenkins.plugins.casc.Configurator.describe(Configurator.java:183) at io.jenkins.plugins.casc.Attribute._describe(Attribute.java:330) at io.jenkins.plugins.casc.Attribute.describe(Attribute.java:264) at io.jenkins.plugins.casc.Configurator.describe(Configurator.java:183) [...]
- relates to
-
JENKINS-72567 Blazemeter plugin version 4.20 breaks JCasC
-
- Open
-