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

Crash when using Folders plugin: com.cloudbees.hudson.plugins.folder.Folder cannot be cast to hudson.model.Job

      javax.servlet.ServletException: org.apache.commons.jelly.JellyTagException: jar:file:/C:/Program%20Files%20(x86)/Jenkins/plugins/xfpanel/WEB-INF/lib/classes.jar!/maps/hudson/plugin/xfpanel/XFPanelView/configure-entries.jelly:43:73: <j:invoke> method getPrioritySortedJobs threw exception: com.cloudbees.hudson.plugins.folder.Folder cannot be cast to hudson.model.Job
      at org.kohsuke.stapler.jelly.JellyFacet$1.dispatch(JellyFacet.java:103)
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
      at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:248)
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:631)
      at org.kohsuke.stapler.Stapler.service(Stapler.java:225)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96)
      at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:58)
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:99)
      at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
      at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
      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 org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at jenkins.security.ApiTokenFilter.doFilter(ApiTokenFilter.java:74)
      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:164)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
      at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
      at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
      at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
      at org.eclipse.jetty.server.Server.handle(Server.java:370)
      at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
      at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
      at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
      at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
      at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
      at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
      at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
      at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
      at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      at java.lang.Thread.run(Unknown Source)
      Caused by: org.apache.commons.jelly.JellyTagException: jar:file:/C:/Program%20Files%20(x86)/Jenkins/plugins/xfpanel/WEB-INF/lib/classes.jar!/maps/hudson/plugin/xfpanel/XFPanelView/configure-entries.jelly:43:73: <j:invoke> method getPrioritySortedJobs threw exception: com.cloudbees.hudson.plugins.folder.Folder cannot be cast to hudson.model.Job
      at org.apache.commons.jelly.tags.core.InvokeTag.doTag(InvokeTag.java:109)
      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.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.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:81)
      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.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.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:81)
      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)
      ... 66 more
      Caused by: java.lang.ClassCastException: com.cloudbees.hudson.plugins.folder.Folder cannot be cast to hudson.model.Job
      at maps.hudson.plugin.xfpanel.XFPanelView.getPrioritySortedJobs(XFPanelView.java:396)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:282)
      at org.apache.commons.jelly.tags.core.InvokeTag.doTag(InvokeTag.java:97)
      ... 127 more

          [JENKINS-23525] Crash when using Folders plugin: com.cloudbees.hudson.plugins.folder.Folder cannot be cast to hudson.model.Job

          Oleg Nenashev added a comment -

          It is a wrong items handling in xfpanel plugin.
          Currently, the plugin passes Jenkins Items to a method, which takes only Jobs.

          https://github.com/jenkinsci/xfpanel-plugin/blob/cfeaa9101e1634e795dd885368797a563c8c2ff9/src/main/resources/maps/hudson/plugin/xfpanel/XFPanelView/configure-entries.jelly

          <j:invoke method="getPrioritySortedJobs" var="prioJobs" on="${it}">
            <j:arg type="java.util.Collection" value="${app.items}" />
          </j:invoke>
          

          https://github.com/jenkinsci/xfpanel-plugin/blob/cfeaa9101e1634e795dd885368797a563c8c2ff9/src/main/java/maps/hudson/plugin/xfpanel/XFPanelView.java

              public Collection<Job<?, ?>> getPrioritySortedJobs(Collection<Job<?, ?>> jobs) {
                  if (jobs != null) {
                      List<Job<?, ?>> sortedJobs = new ArrayList<Job<?, ?>>();
                      Map<Integer, Job<?, ?>> jobMap = new HashMap<Integer, Job<?, ?>>();
          
                      int priority = 0, added = 0;
                      if (priorityPerJob != null) {
          
                          // Set elements
          EXCEPTION(386) ==>  for (Job<?, ?> job: jobs) {
                         ....
          
          
          

          Oleg Nenashev added a comment - It is a wrong items handling in xfpanel plugin. Currently, the plugin passes Jenkins Items to a method, which takes only Jobs. https://github.com/jenkinsci/xfpanel-plugin/blob/cfeaa9101e1634e795dd885368797a563c8c2ff9/src/main/resources/maps/hudson/plugin/xfpanel/XFPanelView/configure-entries.jelly <j:invoke method="getPrioritySortedJobs" var="prioJobs" on="${it}"> <j:arg type="java.util.Collection" value="${app.items}" /> </j:invoke> https://github.com/jenkinsci/xfpanel-plugin/blob/cfeaa9101e1634e795dd885368797a563c8c2ff9/src/main/java/maps/hudson/plugin/xfpanel/XFPanelView.java public Collection<Job<?, ?>> getPrioritySortedJobs(Collection<Job<?, ?>> jobs) { if (jobs != null) { List<Job<?, ?>> sortedJobs = new ArrayList<Job<?, ?>>(); Map<Integer, Job<?, ?>> jobMap = new HashMap<Integer, Job<?, ?>>(); int priority = 0, added = 0; if (priorityPerJob != null) { // Set elements EXCEPTION(386) ==> for (Job<?, ?> job: jobs) { ....

          Jesse Glick added a comment -

          Should use getAllItems(Job.class) if that is what you wanted.

          Jesse Glick added a comment - Should use getAllItems(Job.class) if that is what you wanted.

          Tomasz Bech added a comment -

          IMHO https://wiki.jenkins-ci.org/display/JENKINS/Nested+View+Plugin
          does similar thing and 'folder' is view not a job.

          Tomasz Bech added a comment - IMHO https://wiki.jenkins-ci.org/display/JENKINS/Nested+View+Plugin does similar thing and 'folder' is view not a job.

          Hi tomaszbech,
          It could be indeed considered as view but it becomes different thing when jobs in different have same name. I know that it's not ideal situation but it is mine for now...
          The xfpanel plugin is to me the best one for setting up a radiator but configuration crashes when using these folders. Migrating to nested views would imply renaming all jobs to avoid name conflicts and it appears to be really difficult...
          Could you help on avoiding this crash ?

          Alexandre Aubert added a comment - Hi tomaszbech , It could be indeed considered as view but it becomes different thing when jobs in different have same name. I know that it's not ideal situation but it is mine for now... The xfpanel plugin is to me the best one for setting up a radiator but configuration crashes when using these folders. Migrating to nested views would imply renaming all jobs to avoid name conflicts and it appears to be really difficult... Could you help on avoiding this crash ?

          Jesse Glick added a comment -

          Folders are views are quite different things.

          Probably a five-minute fix if anyone is maintaining this plugin. PR upon request.

          Jesse Glick added a comment - Folders are views are quite different things. Probably a five-minute fix if anyone is maintaining this plugin. PR upon request.

          Code changed in jenkins
          User: tomaszbech
          Path:
          src/main/java/maps/hudson/plugin/xfpanel/XFPanelView.java
          src/main/resources/maps/hudson/plugin/xfpanel/XFPanelView/configure-entries.jelly
          src/main/resources/maps/hudson/plugin/xfpanel/XFPanelView/maindisplay.jelly
          http://jenkins-ci.org/commit/xfpanel-plugin/312109b162c551d2a7003c80724ac9bac07563d7
          Log:
          [FIXED JENKINS-23525]

          Crash when using Folders plugin:
          com.cloudbees.hudson.plugins.folder.Folder cannot be cast to
          hudson.model.Job

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: tomaszbech Path: src/main/java/maps/hudson/plugin/xfpanel/XFPanelView.java src/main/resources/maps/hudson/plugin/xfpanel/XFPanelView/configure-entries.jelly src/main/resources/maps/hudson/plugin/xfpanel/XFPanelView/maindisplay.jelly http://jenkins-ci.org/commit/xfpanel-plugin/312109b162c551d2a7003c80724ac9bac07563d7 Log: [FIXED JENKINS-23525] Crash when using Folders plugin: com.cloudbees.hudson.plugins.folder.Folder cannot be cast to hudson.model.Job

          Tomasz Bech added a comment -

          I've fixed 'configuration' view and folder icon is hidden on xfpanel view.
          However Folders are using own containers for jobs - so there can be some issues there, but baiscally xfpanel view created in the folder should work.

          Tomasz Bech added a comment - I've fixed 'configuration' view and folder icon is hidden on xfpanel view. However Folders are using own containers for jobs - so there can be some issues there, but baiscally xfpanel view created in the folder should work.

          Thanks a lot ! I upgraded and i can configure my view normally !

          Alexandre Aubert added a comment - Thanks a lot ! I upgraded and i can configure my view normally !

            julienrenaut Julien RENAUT
            stuartwhelan Stuart Whelan
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: