Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-10276

Custom field is displayed during Bulk Edit and Bulk Transition when it does not have a context for some of the issues.

    XMLWordPrintable

Details

    Description

      The actual HTML for editing the field is not displayed as the following exception is thrown:

      2006-05-25 17:48:21,813 ERROR [webwork.util.ServletValueStack] METHOD: "fieldHtml", exception:
      java.lang.IllegalArgumentException
      at com.atlassian.jira.plugin.customfield.CustomFieldTypeModuleDescriptor.getEditHtml(CustomFieldTypeModuleDescriptor.java:93)
      at com.atlassian.jira.issue.fields.CustomFieldImpl.getEditHtml(CustomFieldImpl.java:645)
      at com.atlassian.jira.issue.fields.CustomFieldImpl.getBulkEditHtml(CustomFieldImpl.java:675)
      at com.atlassian.jira.web.action.issue.bulkedit.BulkWorkflowTransition.getFieldHtml(BulkWorkflowTransition.java:655)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at webwork.util.InjectionUtils$DefaultInjectionImpl.invoke(InjectionUtils.java:61)
      at webwork.util.InjectionUtils.invoke(InjectionUtils.java:52)
      at webwork.util.ValueStack.findValue(ValueStack.java:426)
      at webwork.util.ValueStack.findValue(ValueStack.java:175)
      at webwork.view.taglib.WebWorkBodyTagSupport.findValue(WebWorkBodyTagSupport.java:61)
      at webwork.view.taglib.BasicPropertyTag.doStartTag(BasicPropertyTag.java:54)
      at org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp._jspx_meth_webwork_property_31(org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp:2305)
      at org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp._jspx_meth_webwork_if_8(org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp:2005)
      at org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp._jspx_meth_webwork_iterator_3(org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp:1945)
      at org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp._jspx_meth_webwork_iterator_2(org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp:1806)
      at org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp._jspx_meth_webwork_else_1(org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp:1257)
      at org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp._jspService(org.apache.jsp.secure.views.bulkedit.bulkworkflowtransition_005feditfields_jsp:434)
      at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
      at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
      at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
      at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
      at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
      at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
      at com.atlassian.jira.web.dispatcher.JiraServletDispatcher.service(JiraServletDispatcher.java:253)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at com.atlassian.jira.web.filters.AccessLogFilter.doFilter(AccessLogFilter.java:51)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
      at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
      at com.atlassian.jira.web.filters.SitemeshExcludePathFilter.doFilter(SitemeshExcludePathFilter.java:38)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:182)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at com.atlassian.seraph.filter.LoginFilter.doFilter(LoginFilter.java:177)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at com.atlassian.util.profiling.filters.ProfilingFilter.doFilter(ProfilingFilter.java:132)
      at com.atlassian.jira.web.filters.ProfilingAndErrorFilter.doFilter(ProfilingAndErrorFilter.java:25)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at com.atlassian.jira.web.filters.ActionCleanupDelayFilter.doFilter(ActionCleanupDelayFilter.java:39)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at com.atlassian.johnson.filters.JohnsonFilter.doFilter(JohnsonFilter.java:91)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at com.atlassian.jira.web.filters.gzip.GzipFilter.doFilter(GzipFilter.java:72)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at com.atlassian.core.filters.AbstractEncodingFilter.doFilter(AbstractEncodingFilter.java:37)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
      at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
      at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
      at java.lang.Thread.run(Thread.java:552)

      To reproduce this, create a custom field for project A, create a custom field for project B, create 2 issues, one in each project. Stick the custom field onto the Resolve issue screen. Try to Bulk Resolve both issues. Or try to Bulk Edit them.

      The actual code that determines whether a custom field is avaialble for Bulk Edit uses searching code (i.e. the same code that is used to find out whether to display the custom field in issue navigator for searching). There is a bug in it which actually also causes JRA-10237

      As far as I can tell the bug is in getReleventConfig(SearchContext searchContext) method in CustomFieldImpl. As the method loops over custom field and retrieves relevantConfig for each search context, if relevantConfig is not null for the first searchContext in the loop, but is null for any of the following search contexts, the custom field is shown anyway. I believe that iif the custom field is not applicable for at least one searchContext then it should not be avaialble.

      There are several problem there:

      1. I do not think we should rely on searching code when doing bulk operations. Feels wrong to me. Need to decide if we need to completely create a new method for this.
      2. Even if the searching code is used, the code loops through all the unique project id, issue type id combinations. This is not great, as if you have 2 issues, bug from project A, and task from project B, the code will loop through 4 cobninations, but really needs to check only 2.

      For Bulk Workflow the problem is similar. See the availableForBulkEdit(BulkEditBean bulkEditBean) method on CustomFieldImpl, it also loops over configs and if relevantConfig for an issue is null, the field is shown anyway.

      Hopefully this expalanation will make more sense once you have a look at the code.

      Attachments

        Issue Links

          Activity

            People

              sam@atlassian.com Sam Chang [Atlassian]
              anton@atlassian.com AntonA
              Votes:
              2 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: