Error 500 when editing issue type to fix missed issue type icon
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
要約
Certain issue types are missing the icons.
Editing them from the UI gives error 500.
診断
Relevant stack trace:
2021-06-02 16:59:59,709-0700 http-nio-8080-exec-1 ERROR xxxxx 1019x4833664x1 /secure/admin/EditIssueType!default.jspa [o.a.c.c.C.[Catalina].[localhost].[/]] Unhandled exception occurred whilst decorating page
com.google.template.soy.tofu.SoyTofuException: When evaluating "$issueType.iconUrlContent": Failed to invoke accessor getIconUrlContent on instance of class com.atlassian.jira.web.action.admin.issuetypes.EditIssueType$IssueTypeViewData
at JIRA.Templates.IssueType.form(issueType.soy:78)
at JIRA.Templates.IssueType.editIssueType(issueType.soy:25)
at com.google.template.soy.tofu.internal.BaseTofu.renderMainHelper(BaseTofu.java:369)
at com.google.template.soy.tofu.internal.BaseTofu.renderMain(BaseTofu.java:322)
at com.google.template.soy.tofu.internal.BaseTofu.access$100(BaseTofu.java:66)
at com.google.template.soy.tofu.internal.BaseTofu$RendererImpl.render(BaseTofu.java:476)
at com.atlassian.soy.impl.DefaultSoyManager.render(DefaultSoyManager.java:154)
at com.atlassian.soy.impl.DefaultSoyTemplateRenderer.render(DefaultSoyTemplateRenderer.java:45)
at com.atlassian.soy.impl.DefaultSoyTemplateRenderer.render(DefaultSoyTemplateRenderer.java:39)
... 5 filtered
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
... 48 filtered
at com.atlassian.servicedesk.internal.web.ExternalCustomerLockoutFilter.doFilter(ExternalCustomerLockoutFilter.java:55)
... 4 filtered
at com.atlassian.greenhopper.jira.filters.ClassicBoardRouter.doFilter(ClassicBoardRouter.java:56)
... 7 filtered
at com.atlassian.jira.plugin.mobile.web.filter.MobileAppRequestFilter.doFilter(MobileAppRequestFilter.java:59)
... 4 filtered
at com.atlassian.jira.plugin.mobile.login.MobileLoginSuccessFilter.doFilter(MobileLoginSuccessFilter.java:54)
... 3 filtered
at com.atlassian.diagnostics.internal.platform.monitor.http.HttpRequestMonitoringFilter.doFilter(HttpRequestMonitoringFilter.java:55)
... 8 filtered
at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
... 48 filtered
at com.bigbrassband.jira.git.action.GitThreadCacheDestroyFilter.doFilter(GitThreadCacheDestroyFilter.java:35)
... 3 filtered
at com.atlassian.plugins.slack.analytics.SlackAnalyticsFilter.doFilter(SlackAnalyticsFilter.java:35)
... 3 filtered
at com.atlassian.troubleshooting.thready.filter.AbstractThreadNamingFilter.doFilter(AbstractThreadNamingFilter.java:46)
... 21 filtered
at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:66)
... 1 filtered
at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:64)
... 39 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:215)
at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:136)
at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.runOutOfContext(ReentrantThreadLocalBasedCodeContext.java:89)
at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runOutOfCustomerContext(CustomerContextServiceImpl.java:47)
at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.outOfCustomerContext(CustomerContextSettingFilter.java:206)
at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilterImpl(CustomerContextSettingFilter.java:134)
at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilter(CustomerContextSettingFilter.java:123)
... 4 filtered
at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:37)
... 8 filtered
at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
... 4 filtered
at com.atlassian.troubleshooting.thready.filter.AbstractThreadNamingFilter.doFilter(AbstractThreadNamingFilter.java:46)
... 3 filtered
at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36)
... 29 filtered
at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
... 25 filtered
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.google.template.soy.sharedpasses.render.RenderException: When evaluating "$issueType.iconUrlContent": Failed to invoke accessor getIconUrlContent on instance of class com.atlassian.jira.web.action.admin.issuetypes.EditIssueType$IssueTypeViewData
Diagnostic Steps
This type of error usually happens because of missing or incorrect data from the database or inside the Avatar's folder.
In order to check the data, collect:
1. Identify which is the avatar used by this Issue type, running the query:
SELECT * FROM issuetype;
The query will return multiple rows. In our sample, the missed icons are for Issue type "Service Request" (id=10301) and "Problem" (id=10300):
ID | sequence | pname | pstyle | description | iconurl | アバター |
---|---|---|---|---|---|---|
10301 | Service Request | Created by Jira Service Desk. | ||||
10304 | 問題 | Track underlying causes of incidents. Created by Jira Service Desk. | 11704 | |||
10300 | インシデント | For system outages or incidents. Created by Jira Service Desk. | ||||
10215 | Risk/Concern | Risk and issues/concerns | /secure/viewavatar?size=xsmall&avatarId=10300&avatarType=issuetype | 10308 |
ここで:
"id" is the issue type id
"avatar" is the avatar id
2. Check if there is an avatar saved for this issuetype, running the query:
select * from avatar where avatartype = 'issuetype';
The query will return multiple rows. Observe if there is any row for the owner 10301 (Service Request) or 10300 (Problem):
ID | filename | CONTENTTYPE | avatartype | owner | systemavatar |
11704 | xxxxx.png | image/png | issuetype | 10304 | 0 |
Where :
"id" is the avatar id
"owner" is the issuetype id
3. Check if the file mentioned at the column "filename" exists in the avatar's directory
Jira Server: <Jira home directory>/data/avatars
Jira Data Center: <Shared home directory>/data/avatars
ソリューション
- Jira を停止します
- Backup your Database;
- From the previous query, select one icon to be used as a temporary icon, for instance, the iconurl used by the "Risk/Concern" issue type ('/secure/viewavatar?size=xsmall&avatarId=10300&avatarType=issuetype');
- Run these UPDATE statements to assign an icon URL to the affected issue types (in our sample, 10301 (Service Request) and 10300 (Problem):
UPDATE issuetype SET iconurl= '/secure/viewavatar?size=xsmall&avatarId=10300&avatarType=issuetype' WHERE id='10300';
UPDATE issuetype SET iconurl= '/secure/viewavatar?size=xsmall&avatarId=10300&avatarType=issuetype' WHERE id='10301';
- Start Jira;
- Navigate to Issues > Issue Types;
- Click on Edit in any of the affected issues;
- Select another icon for the Issue Type or browse to find another image.