Uploaded image for project: 'Jira Cloud'
  1. Jira Cloud
  2. JRACLOUD-68069

JIRA's project avatars REST API endpoint fails with Internal Server Error when Atlassian account is turned on

    XMLWordPrintable

Details

    • Bug
    • Resolution: Obsolete
    • Low
    • Ecosystem
    • None

    Description

      Steps to reproduce

      1. Enable Atlassian account on a JIRA Cloud instance.
      2. Create a JIRA project.
      3. Hit the REST endpoint at /rest/api/2/project/<project key>/avatars

      Expected results

      JIRA returns the list of avatars and sizes for the project.

      Actual results

      JIRA returns an error:

      {
        "errorMessages": [
          "Internal server error"
        ],
        "errors": {
        }
      }
      

      This error is in the JIRA logs:

      2016-11-22 08:49:35,975 http-nio-2994-exec-5 ERROR sysadmin 529x13515x1  103.233.242.8 /rest/api/2/project/KEY/avatars [c.a.j.rest.exception.ExceptionInterceptor] Returning internal server error in response
      java.lang.reflect.InvocationTargetException
      	at sun.reflect.GeneratedMethodAccessor1537.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker$1.invoke(DispatchProviderHelper.java:192)
      	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$1.intercept(DispatchProviderHelper.java:83)
      	... 3 filtered
      	at com.atlassian.jira.rest.exception.ExceptionInterceptor.intercept(ExceptionInterceptor.java:55)
      	... 1 filtered
      	at com.atlassian.jira.rest.v2.issue.scope.RequestScopeInterceptor.intercept(RequestScopeInterceptor.java:39)
      	... 15 filtered
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:159)
      	... 1 filtered
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:69)
      	... 16 filtered
      	at com.atlassian.servicedesk.internal.web.ExternalCustomerLockoutFilter.doFilterWhenLicensed(ExternalCustomerLockoutFilter.java:65)
      	at com.atlassian.servicedesk.internal.web.OperationalStatusAwareHttpFilter.doFilter(OperationalStatusAwareHttpFilter.java:31)
      	... 19 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 42 filtered
      	at com.atlassian.plugin.connect.plugin.auth.scope.ApiScopingFilter.doFilter(ApiScopingFilter.java:81)
      	... 3 filtered
      	at com.atlassian.jira.plugins.hipchat.web.filter.TaskSchedulerFilter.doFilter(TaskSchedulerFilter.java:38)
      	... 3 filtered
      	at com.atlassian.plugins.hipchat.rest.HipChatCapabilitiesFilter.doFilter(HipChatCapabilitiesFilter.java:66)
      	... 14 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)
      	... 16 filtered
      	at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:37)
      	... 12 filtered
      	at com.atlassian.servicedesk.plugins.cm.internal.auth.filter.LocalServiceDeskUserAuthenticationFilter.doFilter(LocalServiceDeskUserAuthenticationFilter.java:88)
      	... 8 filtered
      	at com.atlassian.studio.jira.homepage.CloudHomepageFilter$Action.lambda$nextInFilterChain$1(CloudHomepageFilter.java:115)
      	at com.atlassian.studio.jira.homepage.CloudHomepageFilter.doFilter(CloudHomepageFilter.java:73)
      	at com.atlassian.studio.jira.homepage.CloudHomepageFilter$Provider.doFilter(CloudHomepageFilter.java:134)
      	... 19 filtered
      	at com.atlassian.plugin.connect.plugin.auth.oauth2.DefaultSalAuthenticationFilter.doFilter(DefaultSalAuthenticationFilter.java:76)
      	... 3 filtered
      	at com.atlassian.plugin.connect.plugin.auth.user.ThreeLeggedAuthFilter.doFilter(ThreeLeggedAuthFilter.java:110)
      	... 3 filtered
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.lambda$invokeFilterChain$0(CustomerContextSettingFilter.java:195)
      	at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:139)
      	at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.runOutOfContext(ReentrantThreadLocalBasedCodeContext.java:92)
      	at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runOutOfCustomerContext(CustomerContextServiceImpl.java:64)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.outOfCustomerContext(CustomerContextSettingFilter.java:188)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilterImpl(CustomerContextSettingFilter.java:144)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilter(CustomerContextSettingFilter.java:135)
      	... 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)
      	... 40 filtered
      	at com.atlassian.jira.util.zipkin.ZipkinTracingFilter.lambda$doFilter$1(ZipkinTracingFilter.java:53)
      	at com.github.kristofa.brave.servlet.BraveServletFilter.doFilter(BraveServletFilter.java:59)
      	at com.atlassian.jira.util.zipkin.ZipkinTracingFilter.doFilter(ZipkinTracingFilter.java:41)
      	... 21 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)
      Caused by: java.lang.UnsupportedOperationException: Not implemented
      	at com.atlassian.plugins.avatar.BaseAvatarProvider.getAvatarById(BaseAvatarProvider.java:24)
      	at com.atlassian.jira.avatar.pluggable.AvatarProviderAdapter.getAvatarById(AvatarProviderAdapter.java:50)
      	at sun.reflect.GeneratedMethodAccessor1593.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	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:208)
      	at com.sun.proxy.$Proxy2622.getAvatarById(Unknown Source)
      	at com.atlassian.jira.rest.v2.issue.UserBeanBuilder.getAvatarURLs(UserBeanBuilder.java:354)
      	at com.atlassian.jira.rest.v2.issue.AvatarBeanFactory.createAvatarBeans(AvatarBeanFactory.java:35)
      	at com.atlassian.jira.rest.v2.issue.AvatarResourceHelper.getAllAvatars(AvatarResourceHelper.java:97)
      	at com.atlassian.jira.rest.v2.issue.ProjectResource$11.apply(ProjectResource.java:671)
      	at com.atlassian.jira.rest.v2.issue.ProjectResource$11.apply(ProjectResource.java:665)
      	at com.atlassian.fugue.Either$LeftProjection.on(Either.java:698)
      	at com.atlassian.jira.rest.v2.issue.ProjectResource.getAllAvatars(ProjectResource.java:665)
      	... 297 more
      

      Workaround

      You can get the project avatars for all the projects by calling the /rest/api/2/project/{projectIdOrKey}/avatars endpoint.

      E.g.: calling https://XXX.atlassian.net/rest/api/2/project/ returns:

      Array[3][
        {
          "expand": "description,lead,issueTypes,url,projectKeys",
          "self": "https://XXX.atlassian.net/rest/api/2/project/10100",
          "id": "10100",
          "key": "CSP",
          "name": "Customer Service Project",
          "avatarUrls": {
            "48x48": "https://XXX.atlassian.net/secure/projectavatar?avatarId=10324",
            "24x24": "https://XXX.atlassian.net/secure/projectavatar?size=small&avatarId=10324",
            "16x16": "https://XXX.atlassian.net/secure/projectavatar?size=xsmall&avatarId=10324",
            "32x32": "https://XXX.atlassian.net/secure/projectavatar?size=medium&avatarId=10324"
          },
          "projectTypeKey": "service_desk"
        },
        {
          "expand": "description,lead,issueTypes,url,projectKeys",
          "self": "https://XXX.atlassian.net/rest/api/2/project/10200",
          "id": "10200",
          "key": "TRP",
          "name": "Test Rest Project",
          "avatarUrls": {
            "48x48": "https://XXX.atlassian.net/secure/projectavatar?avatarId=10324",
            "24x24": "https://XXX.atlassian.net/secure/projectavatar?size=small&avatarId=10324",
            "16x16": "https://XXX.atlassian.net/secure/projectavatar?size=xsmall&avatarId=10324",
            "32x32": "https://XXX.atlassian.net/secure/projectavatar?size=medium&avatarId=10324"
          },
          "projectTypeKey": "software"
        },
        {
          "expand": "description,lead,issueTypes,url,projectKeys",
          "self": "https://XXX.atlassian.net/rest/api/2/project/10000",
          "id": "10000",
          "key": "TSP",
          "name": "Test Scrum Project",
          "avatarUrls": {
            "48x48": "https://XXX.atlassian.net/secure/projectavatar?avatarId=10324",
            "24x24": "https://XXX.atlassian.net/secure/projectavatar?size=small&avatarId=10324",
            "16x16": "https://XXX.atlassian.net/secure/projectavatar?size=xsmall&avatarId=10324",
            "32x32": "https://XXX.atlassian.net/secure/projectavatar?size=medium&avatarId=10324"
          },
          "projectTypeKey": "software"
        }
      ]
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              nmason Nick Mason
              Votes:
              6 Vote for this issue
              Watchers:
              13 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: