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

Prevent log-spam when instantiating trait based SCMNavigator / SCMSource implementations

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Minor Minor
    • scm-api-plugin
    • None

      Spotted by michaelneale in https://github.com/jenkinsci/blueocean-plugin/pull/1199

      Jul 06, 2017 6:12:52 PM hudson.model.Descriptor$NewInstanceBindInterceptor onConvert
      WARNING: falling back to default instantiation jenkins.scm.api.trait.SCMTrait {"strategyId":"1","":"0","trust":{"stapler-class<span class="code-quote">":"org.jenkinsci.plugins.github_branch_source.ForkPullRequestDiscoveryTrait$TrustContributors","$class<span class="code-quote">":"org.jenkinsci.plugins.github_branch_source.ForkPullRequestDiscoveryTrait$TrustContributors"},"stapler-class<span class="code-quote">":"org.jenkinsci.plugins.github_branch_source.ForkPullRequestDiscoveryTrait","$class<span class="code-quote">":"org.jenkinsci.plugins.github_branch_source.ForkPullRequestDiscoveryTrait"}
      java.lang.NullPointerException
      at hudson.model.Descriptor$NewInstanceBindInterceptor.onConvert(Descriptor.java:661)
      at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:617)
      at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:721)
      at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
      at org.kohsuke.stapler.RequestImpl.injectSetters(RequestImpl.java:827)
      at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:777)
      at org.kohsuke.stapler.RequestImpl.access$200(RequestImpl.java:83)
      at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:674)
      at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
      at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:474)
      at hudson.model.Descriptor.newInstance(Descriptor.java:590)
      at hudson.model.Descriptor.newInstancesFromHeteroList(Descriptor.java:1043)
      at hudson.model.Descriptor.newInstancesFromHeteroList(Descriptor.java:1005)
      at hudson.util.DescribableList.rebuildHetero(DescribableList.java:208)
      at jenkins.branch.OrganizationFolder.submit(OrganizationFolder.java:290)
      at com.cloudbees.hudson.plugins.folder.AbstractFolder.doConfigSubmit(AbstractFolder.java:1417)
      at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.doConfigSubmit(ComputedFolder.java:334)
      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.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:324)
      at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:52)
      at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)
      at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:167)
      at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:100)
      at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:124)
      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:233)
      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 org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:225)
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132)
      at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:51)
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132)
      at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:125)
      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:80)
      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.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
      at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
      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 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
      at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
      at java.lang.Thread.run(Thread.java:748)
      

      Root cause analysis is that the SCMTrait "abstract" classes are not abstract hence newer versions of stapler think they should use the new direct instantiation technique and when that fails (because there is no descriptor for the "abstract" classes) then it falls back to the 'traditional' technique - which works.

      Fix is to make the "abstract" classes actually abstract then Stapler will not even try direct instantiation and hence will not output the scary NPE in the logs

          [JENKINS-45331] Prevent log-spam when instantiating trait based SCMNavigator / SCMSource implementations

          Michael Neale added a comment -

          LOLOLOLOLOLOL

          Michael Neale added a comment - LOLOLOLOLOLOL

          Code changed in jenkins
          User: Stephen Connolly
          Path:
          src/main/java/jenkins/scm/api/trait/SCMNavigatorTrait.java
          src/main/java/jenkins/scm/api/trait/SCMSourceTrait.java
          src/main/java/jenkins/scm/api/trait/SCMTrait.java
          http://jenkins-ci.org/commit/scm-api-plugin/079c1b284687d20a2b2be45034c4a115db347b54
          Log:
          [FIXED JENKINS-45331] Abstract classes should be abstract

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/main/java/jenkins/scm/api/trait/SCMNavigatorTrait.java src/main/java/jenkins/scm/api/trait/SCMSourceTrait.java src/main/java/jenkins/scm/api/trait/SCMTrait.java http://jenkins-ci.org/commit/scm-api-plugin/079c1b284687d20a2b2be45034c4a115db347b54 Log: [FIXED JENKINS-45331] Abstract classes should be abstract

          Code changed in jenkins
          User: Stephen Connolly
          Path:
          src/main/java/jenkins/scm/api/trait/SCMNavigatorTrait.java
          src/main/java/jenkins/scm/api/trait/SCMSourceTrait.java
          src/main/java/jenkins/scm/api/trait/SCMTrait.java
          http://jenkins-ci.org/commit/scm-api-plugin/499c5a49c7425895a0bca352c222dc363e635395
          Log:
          Merge pull request #42 from stephenc/jenkins-45331

          [FIXED JENKINS-45331] Abstract classes should be abstract

          Compare: https://github.com/jenkinsci/scm-api-plugin/compare/9cefea35ffc7...499c5a49c742

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/main/java/jenkins/scm/api/trait/SCMNavigatorTrait.java src/main/java/jenkins/scm/api/trait/SCMSourceTrait.java src/main/java/jenkins/scm/api/trait/SCMTrait.java http://jenkins-ci.org/commit/scm-api-plugin/499c5a49c7425895a0bca352c222dc363e635395 Log: Merge pull request #42 from stephenc/jenkins-45331 [FIXED JENKINS-45331] Abstract classes should be abstract Compare: https://github.com/jenkinsci/scm-api-plugin/compare/9cefea35ffc7...499c5a49c742

            stephenconnolly Stephen Connolly
            stephenconnolly Stephen Connolly
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: