Details
-
Bug
-
Resolution: Fixed
-
Low
-
3.2.8, 3.4.0, 3.9.1
-
7
-
Severity 3 - Minor
-
1
-
Description
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
- 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.
- Create an issue and specify a customer as the Reporter.
- 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
Attachments
Issue Links
- is duplicated by
-
JSDSERVER-5353 Having the same user as Reporter and Assignee leaves the issue not transitionable through Customer Portal
- Closed
- is related to
-
JSDSERVER-5176 User within organization cannot Share issue with himself
- Closed
-
JSDSERVER-6402 Not able to transition in Customer Portal when user is both the Reporter and Request Participant but do not have Modify Reporter permission
- Closed
- relates to
-
JSDCLOUD-5241 Having the same user as reporter and request participants leaves the issue not transitionable through customer portal
- Closed
-
JSDSERVER-5112 In portal attempt to share with reporter throws "failed to update request participants field, error"
- Closed
-
JSDSERVER-5168 JIRA does not prevent setting Reporter to a Request Participant
- Closed
-
JSDSERVER-5353 Having the same user as Reporter and Assignee leaves the issue not transitionable through Customer Portal
- Closed