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

IllegalArgumentException for ChoiceParameter on bindJSON saving job configuration

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • core
    • None
    • Jenkins 2.204.2
      fixed in 2.242
    • Jenkins 2.242

      I'm had implement a jenkins.branch.BranchProperty that list all available ParameterDefinition.

      It normally works but when I select a ChoiceParameter I got the following Exception on save:

      java.lang.IllegalArgumentException: Unable to convert to class java.lang.Object
      	at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:738)
      	at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
      	at org.kohsuke.stapler.RequestImpl.injectSetters(RequestImpl.java:834)
      	at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:784)
      	at org.kohsuke.stapler.RequestImpl.access$200(RequestImpl.java:83)
      	at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:678)
      Caused: java.lang.IllegalArgumentException: Failed to instantiate class hudson.model.ParameterDefinition from {"name":"SCENARIO","choices":"1\n2\n3","description":"","":"","stapler-class":"hudson.model.ChoiceParameterDefinition","$class":"hudson.model.ChoiceParameterDefinition"}
      	at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:681)
      	at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:717)
      	at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
      	at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:778)
      Caused: java.lang.IllegalArgumentException: Failed to convert the parameterDefinitions parameter of the constructor public com.thedigitalstack.jenkins.plugins.parametricrun.ParameterBranchProperty(java.lang.String,boolean,java.lang.String,java.util.List)
      	at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:780)
      	at org.kohsuke.stapler.RequestImpl.access$200(RequestImpl.java:83)
      	at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:678)
      Caused: java.lang.IllegalArgumentException: Failed to instantiate class jenkins.branch.BranchProperty from {"actionLabel":"Action Label","useBadge":false,"badgeTemplate":"Run with #$PARAMETER","parameterDefinitions":{"name":"SCENARIO","choices":"1\n2\n3","description":"","":"","stapler-class":"hudson.model.ChoiceParameterDefinition","$class":"hudson.model.ChoiceParameterDefinition"},"stapler-class":"com.thedigitalstack.jenkins.plugins.parametricrun.ParameterBranchProperty","$class":"com.thedigitalstack.jenkins.plugins.parametricrun.ParameterBranchProperty"}
             ...
      

      The RequestImpl instantiate a ChoiceParameterDefinition class and than using reflection lookup a setter @DataBoundSetter annotated for "choice" property. It takes the parameter type from method (in this unlikely case Object) and than use apache beanutils to convert the actual value "v1\n2\n3" (String) to Object. Since there are no converter registered for Object it fails.

        1. image-2020-03-11-17-00-27-616.png
          38 kB
          Nikolas Falco
        2. payload.json
          5 kB
          Nikolas Falco

            nfalco Nikolas Falco
            nfalco Nikolas Falco
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: