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

Unable to add more participants if participants field contains customers who don't have access to a given Service Desk

    XMLWordPrintable

Details

    Description

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

      Steps to reproduce

      1. Create two Service Desk projects, A and B, set both to "Only people on my customers list" under the "Manage who can raise requests through email and the customer portal" heading in Request Security settings.
      2. Create two new customer accounts in A, ensure they don't have access to B.
      3. Create a new issue in A, add both customer accounts to the Request Participants field in the new issue.
      4. Move the issue to Service Desk B.
      5. Edit the Request Participants field in on the moved issue, try to add another user (it can be anyone at all who does have access to B).

      Expected results

      The user in the last step is successfully added to the Request Participants field.

      Actual results

      JIRA throws a "Communications Breakdown" message in the UI and this stack trace appears in the logs:

      2016-06-20 13:31:11,732 http-nio-3008-exec-15 ERROR      [o.a.c.c.C.[.[localhost].[/].[action]] Servlet.service() for servlet [action] in context with path [] threw exception [java.lang.IllegalArgumentException: Cannot format given Object as a Number] with root cause
      java.lang.IllegalArgumentException: Cannot format given Object as a Number
      	at java.text.NumberFormat.format(NumberFormat.java:248)
      	at java.text.Format.format(Format.java:157)
      	at java.text.MessageFormat.subformat(MessageFormat.java:1262)
      	at java.text.MessageFormat.format(MessageFormat.java:865)
      	at java.text.Format.format(Format.java:157)
      	at com.atlassian.jira.i18n.BackingI18n.formatI18nMsg(BackingI18n.java:249)
      	at com.atlassian.jira.i18n.BackingI18n.getText(BackingI18n.java:157)
      	at com.atlassian.servicedesk.internal.feature.reqparticipants.validation.RequestParticipantValidatorImpl.getNonCustomersErrorMessage(RequestParticipantValidatorImpl.java:211)
      	at com.atlassian.servicedesk.internal.feature.reqparticipants.validation.RequestParticipantValidatorImpl.getValidationErrorMessages(RequestParticipantValidatorImpl.java:189)
      	at com.atlassian.servicedesk.internal.feature.reqparticipants.validation.RequestParticipantValidatorImpl.lambda$getParticipantsValidationErrorMessage$3(RequestParticipantValidatorImpl.java:96)
      	at com.atlassian.servicedesk.internal.feature.reqparticipants.validation.RequestParticipantValidatorImpl$$Lambda$2212/981477.apply(Unknown Source)
      	at com.atlassian.pocketknife.OptionStep2.lambda$null$6(OptionStep2.java:35)
      	at com.atlassian.pocketknife.OptionStep2$$Lambda$1945/13284938.apply(Unknown Source)
      	at com.atlassian.fugue.Option.map(Option.java:272)
      	at com.atlassian.pocketknife.OptionStep2.lambda$yield$7(OptionStep2.java:35)
      	at com.atlassian.pocketknife.OptionStep2$$Lambda$1944/29006150.apply(Unknown Source)
      	at com.atlassian.fugue.Option$Some.fold(Option.java:421)
      	at com.atlassian.fugue.Option.flatMap(Option.java:287)
      	at com.atlassian.pocketknife.OptionStep2.yield(OptionStep2.java:35)
      	at com.atlassian.servicedesk.internal.feature.reqparticipants.validation.RequestParticipantValidatorImpl.getParticipantsValidationErrorMessage(RequestParticipantValidatorImpl.java:94)
      	at com.atlassian.servicedesk.internal.customfields.participants.ParticipantsCFType.validateFromParams(ParticipantsCFType.java:301)
      	at com.atlassian.jira.issue.fields.ImmutableCustomField.validateParams(ImmutableCustomField.java:706)
      	at com.atlassian.jira.bc.issue.DefaultIssueService.validateAndPopulateParamsWithScreenCheck(DefaultIssueService.java:923)
      	at com.atlassian.jira.bc.issue.DefaultIssueService.validateAndPopulateParams(DefaultIssueService.java:884)
      	at com.atlassian.jira.bc.issue.DefaultIssueService.validateAndUpdateIssueFromFields(DefaultIssueService.java:680)
      	at com.atlassian.jira.bc.issue.DefaultIssueService.validateUpdate(DefaultIssueService.java:286)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:497)
      	at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
      	at com.sun.proxy.$Proxy182.validateUpdate(Unknown Source)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:497)
      	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.$Proxy2913.validateUpdate(Unknown Source)
      	at com.atlassian.jira.components.issueviewer.action.AjaxIssueAction.doValidation(AjaxIssueAction.java:190)
      	at com.atlassian.jira.components.issueviewer.action.AjaxIssueAction.validate(AjaxIssueAction.java:208)
      	... 1 filtered
      	at com.atlassian.jira.action.JiraActionSupport.execute(JiraActionSupport.java:63)
      	... 7 filtered
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
      	at com.atlassian.jira.servlet.WebExceptionCheckingServlet.delegate(WebExceptionCheckingServlet.java:86)
      	at com.atlassian.jira.servlet.WebExceptionCheckingServlet.service(WebExceptionCheckingServlet.java:32)
      	... 51 filtered
      	at com.atlassian.servicedesk.internal.web.LicenseAwareHttpFilter.doFilter(LicenseAwareHttpFilter.java:31)
      	... 4 filtered
      	at com.atlassian.greenhopper.jira.filters.ClassicBoardRouter.doFilter(ClassicBoardRouter.java:62)
      	... 12 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 20 filtered
      	at com.atlassian.jira.plugins.rest.HOT25715FixServletFilter.doFilter(HOT25715FixServletFilter.java:46)
      	... 28 filtered
      	at com.atlassian.plugin.connect.plugin.auth.scope.ApiScopingFilter.doFilter(ApiScopingFilter.java:81)
      	... 14 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:76)
      	at com.atlassian.jira.security.JiraSecurityFilter$$Lambda$611/22549397.doFilter(Unknown Source)
      	... 1 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:74)
      	... 29 filtered
      	at com.atlassian.studio.jira.homepage.CloudHomepageFilter$Action.lambda$nextInFilterChain$1(CloudHomepageFilter.java:110)
      	at com.atlassian.studio.jira.homepage.CloudHomepageFilter$Action$$Lambda$608/23012515.execute(Unknown Source)
      	at com.atlassian.studio.jira.homepage.CloudHomepageFilter.doFilter(CloudHomepageFilter.java:68)
      	... 20 filtered
      	at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
      	... 5 filtered
      	at com.atlassian.plugin.connect.plugin.auth.user.ThreeLeggedAuthFilter.doFilter(ThreeLeggedAuthFilter.java:109)
      	... 3 filtered
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.lambda$invokeFilterChain$0(CustomerContextSettingFilter.java:181)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter$$Lambda$597/7671234.call(Unknown Source)
      	at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:142)
      	at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.runOutOfContext(ReentrantThreadLocalBasedCodeContext.java:94)
      	at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runOutOfCustomerContext(CustomerContextServiceImpl.java:61)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.outOfCustomerContext(CustomerContextSettingFilter.java:174)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilterImpl(CustomerContextSettingFilter.java:130)
      	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

      This only happens if there's more than one user already in the Request Participants field who doesn't have access to the issue. If it's only a single user, the user added in Step 5 above overwrites the existing user.

      Workaround

      Remove any users from the Request Participants field who don't have access to the project. An easy way to check is to compare who is in the Participants list on the customer portal view versus the standard JIRA issue view... users who don't have access will show in on the standard JIRA issue view but not the customer portal view.

      Attachments

        Issue Links

          Activity

            People

              lgoodhewcook Lachlan G (Inactive)
              nmason Nick Mason
              Votes:
              1 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Backbone Issue Sync