When field not set, condition "mathematical expression is true" throws exception preventing any workflow action from being seen

Issue #5 resolved
Matthew Williams created an issue

The below is using Jira 5.2.6 and plugin 2.0.22-beta1.

On a workflow we have the 8 workflow actions that transition out of a particular workflow state. On one of these workflow actions we set up the workflow condition "Condition based on mathematical or date-time expression". We set it to a simple test, such as

{11601} = 0

which related to a field in our Jira instance called "Implements program ticket". So the idea is that if the field is set to zero, then this particular action should only appear and be usable.

However, when in use, we found that for Jira tickets where this field hadn't set at all, i.e. is NULL, then the condition is preventing any workflow actions at all from being shown in that workflow state, even ones that don't use this plugin.

In Jira, the exception below is thrown, even when simply browsing to to particular ticket. I'd have thought that rather than throw an exception when the field is NULL in ticket, it makes more logical sense for the condition just to return 'false'. That makes sense as far as the mathematical condition is concerned, the field is not set to zero, therefore the condition is false.

2013-02-27 06:13:14,497 http-bio-8080-exec-56 ERROR mwilli3 373x52638x1 lts4h 10.83.194.44,10.82.34.58 /browse/CRS-533 [plugins.workflowToolbox.shared.MathCa lculatorValueProvider] *** PROVIDED NULL VALUE FOR STRING 11601 DUE TO EXCEPTION. 2013-02-27 06:13:14,497 http-bio-8080-exec-56 ERROR mwilli3 373x52638x1 lts4h 10.83.194.44,10.82.34.58 /browse/CRS-533 [opensymphony.workflow.basic.BasicWork flow] Error checking available actions [InvalidInputException: [Error map: [{}]] [Error list: [[Field "Implements Programme Ticket" is not set.]]] at com.fca.jira.plugins.workflowToolbox.MathExpressionsCondition.passesCondition(MathExpressionsCondition.java:60) at com.opensymphony.workflow.AbstractWorkflow.passesCondition(AbstractWorkflow.java:1085) at com.opensymphony.workflow.AbstractWorkflow.passesConditions(AbstractWorkflow.java:1119) at com.opensymphony.workflow.AbstractWorkflow.passesConditions(AbstractWorkflow.java:1143) at com.opensymphony.workflow.AbstractWorkflow.getAvailableActionsForStep(AbstractWorkflow.java:723) at com.opensymphony.workflow.AbstractWorkflow.getAvailableActions(AbstractWorkflow.java:115) at com.atlassian.jira.workflow.IssueWorkflowManagerImpl.getAvailableActionIds(IssueWorkflowManagerImpl.java:140) at com.atlassian.jira.workflow.IssueWorkflowManagerImpl.getAvailableActions(IssueWorkflowManagerImpl.java:41) at com.atlassian.jira.workflow.IssueWorkflowManagerImpl.getSortedAvailableActions(IssueWorkflowManagerImpl.java:65) at com.atlassian.jira.issue.transitions.TransitionLinkFactory.getAvailableActions(TransitionLinkFactory.java:63) at com.atlassian.jira.issue.transitions.TransitionLinkFactory.getLinks(TransitionLinkFactory.java:52) at com.atlassian.jira.plugin.webfragment.DefaultSimpleLinkManager.getLinks(DefaultSimpleLinkManager.java:190) at com.atlassian.jira.plugin.webfragment.DefaultSimpleLinkManager.getLinksForSection(DefaultSimpleLinkManager.java:124) at com.atlassian.jira.issue.util.IssueOperationsBarUtil.getLinksForSection(IssueOperationsBarUtil.java:208) at com.atlassian.jira.issue.util.IssueOperationsBarUtil.getPromotedLinks(IssueOperationsBarUtil.java:105) at sun.reflect.GeneratedMethodAccessor510.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at webwork.util.InjectionUtils$DefaultInjectionImpl.invoke(InjectionUtils.java:70) at webwork.util.InjectionUtils.invoke(InjectionUtils.java:56) at webwork.util.ValueStack.findValue(ValueStack.java:514) at webwork.util.ValueStack.findValue(ValueStack.java:213) at webwork.view.taglib.WebWorkBodyTagSupport.findValue(WebWorkBodyTagSupport.java:62) at webwork.view.taglib.BasicPropertyTag.doStartTag(BasicPropertyTag.java:54) at org.apache.jsp.includes.panels.issue.viewissue_002dopsbar_jsp._jspx_meth_ww_005fproperty_005f6(viewissue_002dopsbar_jsp.java:535) at org.apache.jsp.includes.panels.issue.viewissue_002dopsbar_jsp._jspx_meth_ww_005fiterator_005f0(viewissue_002dopsbar_jsp.java:505) at org.apache.jsp.includes.panels.issue.viewissue_002dopsbar_jsp._jspService(viewissue_002dopsbar_jsp.java:115) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) ...

Comments (4)

  1. Fidel Castro Armario repo owner

    Hi Matthew,

    I agree with you in this matter. This behaviour in the plugin should be considered a bug. I have released a version 2.0.22_beta_3 fixing it.

    Regards.

  2. Log in to comment