Uploaded image for project: 'Jira Service Management Data Center'
  1. Jira Service Management Data Center
  2. JSDSERVER-5162

Having the same user as reporter and request participants leaves the issue not transitionable through customer portal

XMLWordPrintable

      Summary

      If the reporter on an issue is also listed as a request participant, the issue cannot be transitioned via the customer portal.

      Environment

      JIRA Service Desk Server 3.4.0

      Steps to Reproduce

      1. Using a third party scripting utility (such as ScriptRunner or Power Scripts for JIRA), add a post-function on the Create transition which copies the issue Reporter to Request participants.
      2. Create an issue and specify a customer as the Reporter.
      3. Sign in to the service desk portal as that customer and attempt to transition the issue.

      Expected Results

      The issue transitions properly.

      Actual Results

      A generic error is thrown to the user. The following appears in atlassian-jira.log

      2017-05-24 09:56:13,133 http-nio-8082-exec-12 url:/rest/servicedesk/1/custo.../transition username:katr003  ERROR katr003 596x219709x9 17nivfx 207.61.145.4,10.0.0.7 /rest/servicedesk/1/customer/requests/transition [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: null
      java.lang.NullPointerException
      	at com.atlassian.jira.workflow.OSWorkflowManager.getWorkflow(OSWorkflowManager.java:276)
      	at com.atlassian.jira.workflow.OSWorkflowManager.getActionDescriptor(OSWorkflowManager.java:389)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
      	at com.sun.proxy.$Proxy96.getActionDescriptor(Unknown Source)
      	... 3 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
      	at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
      	at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
      	at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
      	at com.sun.proxy.$Proxy3600.getActionDescriptor(Unknown Source)
      	at com.atlassian.servicedesk.internal.feature.customer.transitions.CustomerTransitionInternalServiceImpl.validateAndIncludeComment(CustomerTransitionInternalServiceImpl.java:313)
      	at com.atlassian.servicedesk.internal.feature.customer.transitions.CustomerTransitionInternalServiceImpl.validateTransition(CustomerTransitionInternalServiceImpl.java:292)
      	at com.atlassian.servicedesk.internal.feature.customer.transitions.CustomerTransitionInternalServiceImpl.executeTransition(CustomerTransitionInternalServiceImpl.java:263)
      	at com.atlassian.servicedesk.internal.feature.customer.transitions.CustomerTransitionInternalServiceImpl.lambda$executeCustomerTransition$0(CustomerTransitionInternalServiceImpl.java:134)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
      	at io.atlassian.fugue.Either.flatMap(Either.java:230)
      	at com.atlassian.pocketknife.step.EitherStep1.then(EitherStep1.java:18)
      	at com.atlassian.servicedesk.internal.feature.customer.transitions.CustomerTransitionInternalServiceImpl.executeCustomerTransition(CustomerTransitionInternalServiceImpl.java:134)
      	at com.atlassian.servicedesk.internal.rest.customers.transitions.CustomerTransitionResource.lambda$doTransition$5(CustomerTransitionResource.java:89)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
      	at io.atlassian.fugue.Either.flatMap(Either.java:230)
      	at com.atlassian.pocketknife.step.EitherStep1.then(EitherStep1.java:18)
      	at com.atlassian.servicedesk.internal.rest.customers.transitions.CustomerTransitionResource.doTransition(CustomerTransitionResource.java:89)
      	at com.atlassian.servicedesk.internal.rest.customers.transitions.CustomerTransitionResource.lambda$transitionRequest$0(CustomerTransitionResource.java:70)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
      	at io.atlassian.fugue.Either.flatMap(Either.java:230)
      	at com.atlassian.pocketknife.step.EitherStep1.then(EitherStep1.java:18)
      	at com.atlassian.servicedesk.internal.rest.customers.transitions.CustomerTransitionResource.transitionRequest(CustomerTransitionResource.java:70)
      	... 3 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	... 18 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)
      	... 32 filtered
      	at com.atlassian.servicedesk.internal.web.ExternalCustomerLockoutFilter.doFilter(ExternalCustomerLockoutFilter.java:56)
      	... 4 filtered
      	at com.atlassian.servicedesk.internal.web.UrlOperationalStatusCheckFilter.doFilterWhenLicensed(UrlOperationalStatusCheckFilter.java:38)
      	at com.atlassian.servicedesk.internal.web.OperationalStatusAwareHttpFilter.doFilter(OperationalStatusAwareHttpFilter.java:27)
      	... 4 filtered
      	at com.atlassian.servicedesk.internal.web.PopulateEyeballForRestFilter.doFilterWhenLicensed(PopulateEyeballForRestFilter.java:36)
      	at com.atlassian.servicedesk.internal.web.OperationalStatusAwareHttpFilter.doFilter(OperationalStatusAwareHttpFilter.java:27)
      	... 8 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 42 filtered
      	at com.resolution.atlasplugins.samlsso.servlet.RedirectToSsoFilter.doFilter(RedirectToSsoFilter.java:45)
      	... 3 filtered
      	at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.runWithChangedThreadName(AbstractThreadFilter.java:71)
      	at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:53)
      	at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:37)
      	... 14 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:80)
      	... 1 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:78)
      	... 16 filtered
      	at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:37)
      	... 20 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:139)
      	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)
      	... 9 filtered
      	at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:32)
      	... 3 filtered
      	at com.invisionapp.integration.jira.plugin.rest.RestAuthenticationFilter.doFilter(RestAuthenticationFilter.java:97)
      	... 3 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 4 filtered
      	at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.runWithChangedThreadName(AbstractThreadFilter.java:71)
      	at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:53)
      	at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:37)
      	... 3 filtered
      	at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36)
      	... 7 filtered
      	at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:220)
      	at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:197)
      	at net.bull.javamelody.PluginMonitoringFilter.doFilter(PluginMonitoringFilter.java:85)
      	at net.bull.javamelody.JiraMonitoringFilter.doFilter(JiraMonitoringFilter.java:128)
      	... 25 filtered
      	at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
      	... 28 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)
      

      Workaround

      • Transition the issue via Service Desk agent issue view.
      • Modify any third-party scripts to prevent them from adding a customer to Request Participants if that customer is also the Reporter on an issue.

      Notes

      Related to JSDCLOUD-5241

            lgoodhewcook Lachlan G (Inactive)
            nparks@atlassian.com Nathan Parks
            Votes:
            9 Vote for this issue
            Watchers:
            12 Start watching this issue

              Created:
              Updated:
              Resolved: