Unable to create requests due to subtasks having the same name as JSD issue types

XMLWordPrintable

    • 5
    • Severity 3 - Minor

      NOTE: This bug report is for JIRA Service Desk Server. Using JIRA Service Desk Cloud? See the corresponding bug report.

      Summary

      When a new Service Desk is created, JIRA Service Desk doesn't check for existing sub-task types with the same name as the default issue types created by JSD.
      This will cause JSD to map valid request types to sub-tasks, which is not supported and hence throw an error when creating new requests.

      Steps to Reproduce

      1. Create sub-tasks with the same name as the JIRA Service Desk issue types (e.g. Incident / Problem / Service Request)
      2. Create a Service Desk project that uses those issue types.
      3. Navigate to the the new project > Project Settings > Request Types.
      4. Double-check that the request is mapped to a sub-task, as the screenshot below:

      Expected Results

      JIRA Service Desk should not create an inconsistent configuration - It should either:

      • Create a new issue type so that the mapping works properly.
      • Prompt users that the issue type is already mapped to a sub-task and hence one of the issue types will have to be renamed.

      Actual Results

      When you try to create a request using this type, the following error is displayed in the screen:

      The stack trace below can be found in the atlassian-jira.log:

      09-Jan-2017 11:46:44.817 WARNING [http-nio-8726-exec-15] com.sun.jersey.spi.container.servlet.WebComponent.filterFormParameters A servlet request, to the URI http://localhost:8726/jira726/rest/servicedesk/1/customer/pages/portal/4/create/22, contains form parameters in the request body but the request body has been consumed by the servlet or a servlet filter accessing the request parameters. Only resource methods using @FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected.
      2017-01-09 11:46:44,830 http-nio-8726-exec-15 ERROR username 706x5730x1 oatdom 0:0:0:0:0:0:0:1 /servicedesk/customer/portal/4/create/22 [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: messages must have at least one entry
      java.lang.IllegalArgumentException: messages must have at least one entry
      	at com.atlassian.pocketknife.api.commons.error.ErrorBuilder.buildSingleError(ErrorBuilder.java:107)
      	at com.atlassian.pocketknife.api.commons.jira.ErrorCollectionHelper.error(ErrorCollectionHelper.java:22)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManager.com$atlassian$servicedesk$internal$feature$customer$request$CustomerRequestManager$$validateCreateIssueInputParameters(CustomerRequestManager.scala:97)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManager$$anonfun$createRequest$2$$anonfun$apply$1$$anonfun$apply$3.apply(CustomerRequestManager.scala:80)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManager$$anonfun$createRequest$2$$anonfun$apply$1$$anonfun$apply$3.apply(CustomerRequestManager.scala:73)
      	at scalaz.$bslash$div.flatMap(Either.scala:134)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManager$$anonfun$createRequest$2$$anonfun$apply$1.apply(CustomerRequestManager.scala:73)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManager$$anonfun$createRequest$2$$anonfun$apply$1.apply(CustomerRequestManager.scala:72)
      	at scalaz.$bslash$div.flatMap(Either.scala:134)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManager$$anonfun$createRequest$2.apply(CustomerRequestManager.scala:72)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManager$$anonfun$createRequest$2.apply(CustomerRequestManager.scala:70)
      	at scalaz.$bslash$div.flatMap(Either.scala:134)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManager.createRequest(CustomerRequestManager.scala:70)
      	at com.atlassian.servicedesk.internal.feature.customer.request.InternalCustomerRequestServiceScala$$anonfun$createRequest$2$$anonfun$apply$1$$anonfun$apply$3$$anonfun$apply$4.apply(InternalCustomerRequestServiceScala.scala:126)
      	at com.atlassian.servicedesk.internal.feature.customer.request.InternalCustomerRequestServiceScala$$anonfun$createRequest$2$$anonfun$apply$1$$anonfun$apply$3$$anonfun$apply$4.apply(InternalCustomerRequestServiceScala.scala:122)
      	(...)
      	at com.atlassian.servicedesk.internal.rest.CustomerWeb.submitForm(CustomerWeb.scala:705)
      	... 3 filtered
      	at java.lang.reflect.Method.invoke(Method.java:497)
      	at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
      	... 13 filtered
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:154)
      	... 1 filtered
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:68)
      	... 33 filtered
      	at com.atlassian.servicedesk.internal.web.OperationalStatusAwareHttpFilter.doFilter(OperationalStatusAwareHttpFilter.java:31)
      	... 4 filtered
      	at com.atlassian.servicedesk.internal.web.UrlOperationalStatusCheckFilter.doFilterWhenLicensed(UrlOperationalStatusCheckFilter.java:38)
      	at com.atlassian.servicedesk.internal.web.OperationalStatusAwareHttpFilter.doFilter(OperationalStatusAwareHttpFilter.java:31)
      	... 4 filtered
      	at com.atlassian.servicedesk.internal.web.PopulateEyeballForRestFilter.doFilterWhenLicensed(PopulateEyeballForRestFilter.java:33)
      	at com.atlassian.servicedesk.internal.web.OperationalStatusAwareHttpFilter.doFilter(OperationalStatusAwareHttpFilter.java:31)
      	... 4 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 40 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:76)
      	... 1 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:74)
      	... 20 filtered
      	at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
      	... 5 filtered
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilter(CustomerContextSettingFilter.java:116)
      	... 11 filtered
      	at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
      	... 41 filtered
      	at com.atlassian.servicedesk.project.internal.web.filters.NormaliseUrlFilter.doFilter(NormaliseUrlFilter.java:25)
      	... 15 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:76)
      	... 1 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:74)
      	... 29 filtered
      	at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
      	... 5 filtered
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.lambda$invokeFilterChain$0(CustomerContextSettingFilter.java:181)
      	at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:142)
      	at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.runInContext(ReentrantThreadLocalBasedCodeContext.java:57)
      	at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runInCustomerContext(CustomerContextServiceImpl.java:38)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.inCustomerContext(CustomerContextSettingFilter.java:169)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilterImpl(CustomerContextSettingFilter.java:128)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilter(CustomerContextSettingFilter.java:121)
      	... 4 filtered
      	at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:32)
      	... 8 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 4 filtered
      	at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36)
      	... 29 filtered
      	at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
      	... 27 filtered
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      	at java.lang.Thread.run(Thread.java:745)
      

      Notes

      (Optional - If Necessary)

      Workaround

      • Rename the existing issue type (e.g. to Incident (Sub-task)) before creating the new Service Desk.
      • Delete the current association with the sub-task and create a valid association with a standard issue type.

        1. error.png
          error.png
          58 kB
        2. incident.png
          incident.png
          27 kB
        3. Screen Shot 2017-03-21 at 15.30.04.png
          Screen Shot 2017-03-21 at 15.30.04.png
          547 kB

            Assignee:
            Unassigned
            Reporter:
            Danilo Conrad
            Votes:
            4 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: