Details
-
Bug
-
Resolution: Fixed
-
High
-
3.6
-
3.06
-
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
- is duplicated by
-
JRASERVER-9305 Custom Fields empty on Bulk Edit Screen when in selected Issue type context
- Closed
-
JRASERVER-11029 Unable to edit custom fields in workflow transition view in "Bulk change" mode
- Closed
-
JRASERVER-10452 When performing bulk edits, most custom fields are not editable
- Closed
- is related to
-
JRASERVER-10237 Customfields belonging to specific projects are shown when those projects are selected
- Closed