jenkinsci / stapler

Stapler web framework
BSD 2-Clause "Simplified" License
161 stars 102 forks source link

Quietly ignore interfaces in IndexHtmlDispatcher #109

Closed varyvol closed 7 years ago

varyvol commented 7 years ago

After PR #102, the class hierarchy is inspected to look for index.html files (make() method).

In case the used class is an interface, getSuperclass() returns null and thus a NPE happens. Although this probably is something conceptually wrong, it is something that worked previously and hence interfaces should be silently ignored for compatibility reasons.

oleg-nenashev commented 7 years ago

@varyvol Could you please add a stacktrace to this issue?

varyvol commented 7 years ago

@oleg-nenashev sure.

org.apache.commons.jelly.JellyTagException: jar:file:/tmp/config-file-provider/WEB-INF/lib/config-file-provider.jar!/org/jenkinsci/plugins/configfiles/ConfigFilesManagement/configfiles.jelly:29:83: java.lang.NullPointerException   at org.apache.commons.jelly.impl.TagScript.handleException(TagScript.java:726)   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:281)   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.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.IncludeTag.doTag(IncludeTag.java:147)   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)   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.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:112)   at org.kohsuke.stapler.jelly.JellyFacet.handleIndexRequest(JellyFacet.java:140)   at org.kohsuke.stapler.IndexViewDispatcher.dispatch(IndexViewDispatcher.java:30)   at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)   at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)   at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)   at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)   at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)   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 com.cloudbees.jenkins.support.slowrequest.SlowRequestFilter.doFilter(SlowRequestFilter.java:37)   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:86)   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.NullPointerException   at org.kohsuke.stapler.IndexHtmlDispatcher.make(IndexHtmlDispatcher.java:40)   at org.kohsuke.stapler.MetaClass.buildDispatchers(MetaClass.java:172)   at org.kohsuke.stapler.MetaClass.(MetaClass.java:93)   at org.kohsuke.stapler.WebApp.getMetaClass(WebApp.java:204)   at org.kohsuke.stapler.WebApp.getMetaClass(WebApp.java:196)   at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:109)   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)   ... 83 more Caused: javax.servlet.ServletException   at org.kohsuke.stapler.jelly.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:117)   at org.kohsuke.stapler.jelly.JellyFacet.handleIndexRequest(JellyFacet.java:140)   at org.kohsuke.stapler.IndexViewDispatcher.dispatch(IndexViewDispatcher.java:30)   at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)   at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)   at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)   at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)   at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)   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 com.cloudbees.jenkins.support.slowrequest.SlowRequestFilter.doFilter(SlowRequestFilter.java:37)   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:86)   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)

oleg-nenashev commented 7 years ago

Thanks!

oleg-nenashev commented 7 years ago

@varyvol Do you need backporting to 2.46.3? If so, the train departs soon. So please ping @vivek if you need to expedite the release. I also doubt that just merge & release is enough since there is https://github.com/stapler/stapler/pull/106 pending in the master

vivek commented 7 years ago

@oleg-nenashev Stapler releases are maintained by Kohsuke. Please ping @kohsuke to expedite the release.

oleg-nenashev commented 7 years ago

Ack. It's likely too late for this weekly anyway, so I do not plan to raise it unless @varyvol needs it OR there is a known regression in other plugin. Will try to check it on the next week if time allows

varyvol commented 7 years ago

@oleg-nenashev we don't know of any affected plugin so I don't think the backport is needed.

oleg-nenashev commented 7 years ago

Jenkins ticket: https://issues.jenkins-ci.org/browse/JENKINS-43715

jglick commented 7 years ago

110 closed this IIUC.