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

Exception in jenkins log: class org.jenkinsci.lib.configprovider.model.Config must override 'getDescriptor()' this method

      After trying the NodeJS Plugin upgrade to version 1.0 (which we had to roll back due to JENKINS-41535) we could see the following exceptions (in jenkins log) when attempting to load the Job configuration page for jobs utilizing this plugin:

      Jan 31, 2017 8:18:48 AM hudson.ExpressionFactory2$JexlExpression evaluate
      WARNING: Caught exception evaluating: descriptor.configs in .../configure. Reason: java.lang.reflect.InvocationTargetException
      java.lang.reflect.InvocationTargetException
              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.apache.commons.jexl.util.PropertyExecutor.execute(PropertyExecutor.java:125)
              at org.apache.commons.jexl.util.introspection.UberspectImpl$VelGetterImpl.invoke(UberspectImpl.java:314)
              at org.apache.commons.jexl.parser.ASTArrayAccess.evaluateExpr(ASTArrayAccess.java:185)
              at org.apache.commons.jexl.parser.ASTIdentifier.execute(ASTIdentifier.java:75)
              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:74)
              at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:58)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              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:120)
              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:95)
              at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:147)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
              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:269)
              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:269)
              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:120)
              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:269)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
              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:269)
              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:269)
              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:120)
              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:120)
              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:120)
              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:120)
              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:95)
              at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:147)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              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:120)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
              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:120)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
              at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
              at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
              at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
              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:120)
              at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
              at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95)
              at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63)
              at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53)
              at org.kohsuke.stapler.jelly.JellyFacet$1.dispatch(JellyFacet.java:95)
              at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
              at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
              at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:236)
              at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
              at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
              at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
              at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:236)
              at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
              at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
              at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
              at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
              at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
              at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
              at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:135)
              at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:219)
              at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:196)
              at net.bull.javamelody.PluginMonitoringFilter.doFilter(PluginMonitoringFilter.java:85)
              at org.jvnet.hudson.plugins.monitoring.HudsonMonitoringFilter.doFilter(HudsonMonitoringFilter.java:110)
              at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132)
              at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:126)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
              at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:49)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
              at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
              at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
              at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
              at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
              at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
              at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
              at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
              at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
              at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)
              at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
              at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
              at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
              at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
              at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
              at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
              at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
              at org.eclipse.jetty.server.Server.handle(Server.java:499)
              at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
              at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
              at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
              at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
              at java.lang.Thread.run(Thread.java:745)
      Caused by: java.lang.IllegalStateException: class org.jenkinsci.lib.configprovider.model.Config must override 'getDescriptor()' this method!
              at org.jenkinsci.lib.configprovider.model.Config.getDescriptor(Config.java:108)
              at org.jenkinsci.plugins.configfiles.GlobalConfigFiles.getConfigs(GlobalConfigFiles.java:91)
              at jenkins.plugins.nodejs.NodeJSBuildWrapper$DescriptorImpl.getConfigs(NodeJSBuildWrapper.java:137)
              ... 189 more

      Because we had to quickly roll back to our locally built 0.3 snapshot (reason mentioned above) we can't say whether it had any real impact.

          [JENKINS-41767] Exception in jenkins log: class org.jenkinsci.lib.configprovider.model.Config must override 'getDescriptor()' this method

          Nikolas Falco added a comment -

          The issue JENKINS-41535 has been closed.

          Anyway the log above seems not related to NodeJS plugin code.

          When you open the job configuration page I populate a combobox with all available config of kind NPMConfig.
          The config holder (part of config-file-provider plugin) cycle on all extension and filter configs by the given descriptor class. The error in the log is caused due new API changes in config-file-provider that requires all extension point (Config) have to implement the getDescriptor method (as NPMConfig already does) in the subclass.
          Excluding config type shipped with the config-file-provider plugin, you could have other plugin that extends it but it's not updated to latest API (>=2.15).

          So in short I see two way:

          1. check which other plugin in your jenkins extends config-file-provider and ask to mantainer update to new API
          2. ask to imod to handle this kind of scenario providing a default implementation of getDescriptor() in the super class like:
            return (ConfigProvider) Jenkins.getActiveInstance().getDescriptorOrDie(getClass());
            

            or surround the code in GlobalConfigFiles#getConfigs(Class<? extends Descriptor>) to handle that exception

            public Collection<Config> getConfigs(Class<? extends Descriptor> descriptor) {
                List<Config> cs = new ArrayList<Config>();
                for (Config c : configs) {
                    ConfigProvider provider;
                    try {
                        provider = c.getDescriptor();
                    } catch (IllegalStateException e) {
                        // continue or a a sort of fallback code
                        provider = Jenkins.getActiveInstance().getDescriptorOrDie(c.getClass());
                    }
                    if (provider.getClass().equals(descriptor)) {
                        cs.add(c);
                    }
                }
                return cs;
            }
            

            or something similar.

          Nikolas Falco added a comment - The issue JENKINS-41535 has been closed. Anyway the log above seems not related to NodeJS plugin code. When you open the job configuration page I populate a combobox with all available config of kind NPMConfig. The config holder (part of config-file-provider plugin) cycle on all extension and filter configs by the given descriptor class. The error in the log is caused due new API changes in config-file-provider that requires all extension point ( Config ) have to implement the getDescriptor method (as NPMConfig already does) in the subclass. Excluding config type shipped with the config-file-provider plugin, you could have other plugin that extends it but it's not updated to latest API (>=2.15). So in short I see two way: check which other plugin in your jenkins extends config-file-provider and ask to mantainer update to new API ask to imod to handle this kind of scenario providing a default implementation of getDescriptor() in the super class like: return (ConfigProvider) Jenkins.getActiveInstance().getDescriptorOrDie(getClass()); or surround the code in GlobalConfigFiles#getConfigs(Class<? extends Descriptor>) to handle that exception public Collection<Config> getConfigs( Class <? extends Descriptor> descriptor) { List<Config> cs = new ArrayList<Config>(); for (Config c : configs) { ConfigProvider provider; try { provider = c.getDescriptor(); } catch (IllegalStateException e) { // continue or a a sort of fallback code provider = Jenkins.getActiveInstance().getDescriptorOrDie(c.getClass()); } if (provider.getClass().equals(descriptor)) { cs.add(c); } } return cs; } or something similar.

          Petr H added a comment -

          It might be possible that it isn't being caused by the NodeJS plugin itself, but then:
          1. Why it started to occur after updating only this single plugin (and nothing else)?
          2. Why it's the only plugin appearing in the stack trace:

          Caused by: java.lang.IllegalStateException: class org.jenkinsci.lib.configprovider.model.Config must override 'getDescriptor()' this method!
                  at org.jenkinsci.lib.configprovider.model.Config.getDescriptor(Config.java:108)
                  at org.jenkinsci.plugins.configfiles.GlobalConfigFiles.getConfigs(GlobalConfigFiles.java:91)
                  at jenkins.plugins.nodejs.NodeJSBuildWrapper$DescriptorImpl.getConfigs(NodeJSBuildWrapper.java:137)
                  ... 189 more

          With the above 2 points - how are we supposed to find out the other plugin that's the cause is it isn't the NodeJS one?

          Petr H added a comment - It might be possible that it isn't being caused by the NodeJS plugin itself, but then: 1. Why it started to occur after updating only this single plugin (and nothing else)? 2. Why it's the only plugin appearing in the stack trace: Caused by: java.lang.IllegalStateException: class org.jenkinsci.lib.configprovider.model.Config must override 'getDescriptor()' this method! at org.jenkinsci.lib.configprovider.model.Config.getDescriptor(Config.java:108) at org.jenkinsci.plugins.configfiles.GlobalConfigFiles.getConfigs(GlobalConfigFiles.java:91) at jenkins.plugins.nodejs.NodeJSBuildWrapper$DescriptorImpl.getConfigs(NodeJSBuildWrapper.java:137) ... 189 more With the above 2 points - how are we supposed to find out the other plugin that's the cause is it isn't the NodeJS one?

          Nikolas Falco added a comment - - edited

          This happens because nodejs is the only plugin in your job configuration page that calls GlobalConfigFiles.getConfigs(Class<? extends Descriptor>) to populate the combobox filtering by configuration kind.

          There are other plugin the invoke config-file-provider API in the job configuration page

          • the config-file-provider itself, where it populate a similar combobox BUT with all kinds of configuration. It calls a different API GlobalConfigFiles.getConfigs() where descriptor
            at org.jenkinsci.lib.configprovider.model.Config.getDescriptor(Config.java:108)

            is not invoked

          • maven plugin where you can choose "Maven Settings" configuration file BUT has a totally different way to provide them

          To discover other extension point of config-file-provider please try to go on "Manage Jenkins" -> "Managed files" -> "Add a new Config"
          Follow default kind:

          • Global Maven settings.xml
          • Maven settings.xml
          • Json file
          • Maven toolchains.xml
          • Simple XML file
          • Groovy file
          • Custom file
          • Ivy configuration

          All others entries are extension point (mine is "Npm config file").

          Other good tentative is delete one by one defined configuration file and at the same time reload job configuration page. When the page works the latest deleted configuration has the problem.

          Nikolas Falco added a comment - - edited This happens because nodejs is the only plugin in your job configuration page that calls GlobalConfigFiles.getConfigs(Class<? extends Descriptor>) to populate the combobox filtering by configuration kind. There are other plugin the invoke config-file-provider API in the job configuration page the config-file-provider itself, where it populate a similar combobox BUT with all kinds of configuration. It calls a different API GlobalConfigFiles.getConfigs() where descriptor at org.jenkinsci.lib.configprovider.model.Config.getDescriptor(Config.java:108) is not invoked maven plugin where you can choose "Maven Settings" configuration file BUT has a totally different way to provide them To discover other extension point of config-file-provider please try to go on "Manage Jenkins" -> "Managed files" -> "Add a new Config" Follow default kind: Global Maven settings.xml Maven settings.xml Json file Maven toolchains.xml Simple XML file Groovy file Custom file Ivy configuration All others entries are extension point (mine is " Npm config file "). Other good tentative is delete one by one defined configuration file and at the same time reload job configuration page. When the page works the latest deleted configuration has the problem.

          Code changed in jenkins
          User: imod
          Path:
          src/main/java/org/jenkinsci/lib/configprovider/model/Config.java
          src/main/java/org/jenkinsci/plugins/configfiles/custom/CustomConfig.java
          src/main/java/org/jenkinsci/plugins/configfiles/groovy/GroovyScript.java
          src/main/java/org/jenkinsci/plugins/configfiles/json/JsonConfig.java
          src/main/java/org/jenkinsci/plugins/configfiles/maven/GlobalMavenSettingsConfig.java
          src/main/java/org/jenkinsci/plugins/configfiles/maven/MavenSettingsConfig.java
          src/main/java/org/jenkinsci/plugins/configfiles/maven/MavenToolchainsConfig.java
          src/main/java/org/jenkinsci/plugins/configfiles/xml/XmlConfig.java
          http://jenkins-ci.org/commit/config-file-provider-plugin/30fe123b7f17172d6ffa43290b893f354bd59e2a
          Log:
          [FIXED JENKINS-41767] default implementation for Config.getDescriptor() to keep more backward compatability

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: imod Path: src/main/java/org/jenkinsci/lib/configprovider/model/Config.java src/main/java/org/jenkinsci/plugins/configfiles/custom/CustomConfig.java src/main/java/org/jenkinsci/plugins/configfiles/groovy/GroovyScript.java src/main/java/org/jenkinsci/plugins/configfiles/json/JsonConfig.java src/main/java/org/jenkinsci/plugins/configfiles/maven/GlobalMavenSettingsConfig.java src/main/java/org/jenkinsci/plugins/configfiles/maven/MavenSettingsConfig.java src/main/java/org/jenkinsci/plugins/configfiles/maven/MavenToolchainsConfig.java src/main/java/org/jenkinsci/plugins/configfiles/xml/XmlConfig.java http://jenkins-ci.org/commit/config-file-provider-plugin/30fe123b7f17172d6ffa43290b893f354bd59e2a Log: [FIXED JENKINS-41767] default implementation for Config.getDescriptor() to keep more backward compatability

          I changed the code of the config-file-provider to be more binary compatible with older versions. But please note: rolling back from config-file-provider >= 1.15 to <= 1.13 will not recover any configuration - you will have to restore configuration from your backups. This is because config-file-provider 1.15 changed the format and location where the files are stored.

          Dominik Bartholdi added a comment - I changed the code of the config-file-provider to be more binary compatible with older versions. But please note: rolling back from config-file-provider >= 1.15 to <= 1.13 will not recover any configuration - you will have to restore configuration from your backups. This is because config-file-provider 1.15 changed the format and location where the files are stored.

            Unassigned Unassigned
            mag Petr H
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: