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

    XMLWordPrintable

Details

    Description

      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

      Attachments

        Activity

          oleg_nenashev 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 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) { ....
          jglick Jesse Glick added a comment -

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

          jglick Jesse Glick added a comment - Should use getAllItems(Job.class) if that is what you wanted.
          tomaszbech 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.

          tomaszbech 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 ?

          splashnenen 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 ?
          jglick 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.

          jglick 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_issue_link 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
          tomaszbech 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.

          tomaszbech 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 !

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

          People

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

            Dates

              Created:
              Updated:
              Resolved: