After migrating from Jira Cloud to Data Center, default Request Type icons are missing
Platform Notice: Data Center Only - This article only applies to Atlassian products on the Data Center platform.
Note that this KB was created for the Data Center version of the product. Data Center KBs for non-Data-Center-specific features may also work for Server versions of the product, however they have not been tested. 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.
*Except Fisheye and Crucible
Summary
After migrating from Jira Cloud to Jira Data Center, when user tries to select an Icon for a Request Type in JSM Project, some of the Default/Out-of-box RequestType icon images are missing as shown in the screenshot. The issue is observed when user tries to set an icon to a 'Request Type' from Project Settings.
Diagnosis
User (with Project administrator permission) tries to set the icon for a Request Type by following the steps mentioned below:
Login to Jira and navigate to Project Settings → Request Type
Hover over the icon under the Icon section to get the Edit Option
Click on the 'Edit' symbol, which opens a Wizard showing all Default/Out-of-box Request Type icons along with saved Custom icons.
Some of the icon's images are missing, as shown in the screenshot above.
The below errors are observed in the $JIRA_HOME/log/atlassian-jira.log -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2024-02-17 19:55:37,088+0000 http-nio-8080-exec-12 url: /jira/secure/viewavatar; user: admin ERROR admin 1195x434x1 1bhz6az 172.29.177.136,172.50.0.3 /secure/viewavatar [o.a.c.c.C.[Catalina].[localhost].[/jira]] Unhandled exception occurred whilst decorating page
java.lang.NullPointerException
at com.atlassian.jira.avatar.AvatarManagerImpl.hasImage(AvatarManagerImpl.java:622)
at com.atlassian.jira.web.servlet.ViewUniversalAvatarServletImpl.getAvatar(ViewUniversalAvatarServletImpl.java:76)
at com.atlassian.jira.web.servlet.ViewUniversalAvatarServletImpl.doGet(ViewUniversalAvatarServletImpl.java:47)
at com.atlassian.jira.web.servlet.ViewUniversalAvatarServlet.doGet(ViewUniversalAvatarServlet.java:20)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
... 44 filtered
...
...
2024-02-17 19:55:37,093+0000 http-nio-8080-exec-12 ERROR [o.a.c.c.C.[.[localhost].[/jira].[viewUniversalAvatarServlet]] Servlet.service() for servlet [viewUniversalAvatarServlet] in context with path [/jira] threw exception
java.lang.NullPointerException
at com.atlassian.jira.avatar.AvatarManagerImpl.hasImage(AvatarManagerImpl.java:622)
at com.atlassian.jira.web.servlet.ViewUniversalAvatarServletImpl.getAvatar(ViewUniversalAvatarServletImpl.java:76)
at com.atlassian.jira.web.servlet.ViewUniversalAvatarServletImpl.doGet(ViewUniversalAvatarServletImpl.java:47)
at com.atlassian.jira.web.servlet.ViewUniversalAvatarServlet.doGet(ViewUniversalAvatarServlet.java:20)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
... 44 filtered
...
...
2024-02-17 19:55:37,128+0000 http-nio-8080-exec-12 url: /jira/internal-error ERROR [c.a.j.web.servlet.InternalServerErrorServlet] {errorId=36f525b7-c159-44d6-ab5a-1483028cbb11, interpretedMsg=, cause=java.lang.NullPointerException, stacktrace=java.lang.NullPointerException
at com.atlassian.jira.avatar.AvatarManagerImpl.hasImage(AvatarManagerImpl.java:622) [classes/:?]
at com.atlassian.jira.web.servlet.ViewUniversalAvatarServletImpl.getAvatar(ViewUniversalAvatarServletImpl.java:76) [classes/:?]
at com.atlassian.jira.web.servlet.ViewUniversalAvatarServletImpl.doGet(ViewUniversalAvatarServletImpl.java:47) [classes/:?]
at com.atlassian.jira.web.servlet.ViewUniversalAvatarServlet.doGet(ViewUniversalAvatarServlet.java:20) [classes/:?]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:529) [servlet-api.jar:4.0.FR]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) [servlet-api.jar:4.0.FR]
...
...
Cause
The default Request Type icon images are present inside: <JIRA_HOME>/plugins/installed-plugins/jira-servicedesk-5.12.2-REL-0001.jar. When extracted using command:
1
jar xf jira-servicedesk-5.12.2-REL-0001.jar
the default Request Type icon images can be found at the location: //jar_extract/img/request-type-icons
1
2
3
4
5
6
7
8
9
10
11
ubuntu@ip-XX-XX-XX-XX:~/jar_extract/img$ tree -d
.
├── automation
├── chaperone
├── easteregg
├── issue-type-icons
├── onboarding
│ └── renaissance
├── project-template
├── request-type-icons
└── upm
There are 40 default Request Type icon images stored in request-type-icons folder.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
ubuntu@ip-10-140-18-57:~/jar_extract/img/request-type-icons$ tree
.
├── RT_ICONS_add_person.svg
├── RT_ICONS_aeroplane.svg
├── RT_ICONS_calendar.svg
├── RT_ICONS_camera.svg
├── RT_ICONS_car.svg
├── RT_ICONS_cd.svg
├── RT_ICONS_chair.svg
├── RT_ICONS_code.svg
├── RT_ICONS_database.svg
├── RT_ICONS_dollar.svg
├── RT_ICONS_down_cloud.svg
├── RT_ICONS_envelope.svg
├── RT_ICONS_gears.svg
├── RT_ICONS_headset.svg
├── RT_ICONS_heart.svg
├── RT_ICONS_house.svg
├── RT_ICONS_keyboard.svg
├── RT_ICONS_light_bulb.svg
├── RT_ICONS_loop.svg
├── RT_ICONS_marker.svg
├── RT_ICONS_monitor.svg
├── RT_ICONS_open_book.svg
├── RT_ICONS_padlock.svg
├── RT_ICONS_plus.svg
├── RT_ICONS_power_button.svg
├── RT_ICONS_present.svg
├── RT_ICONS_printer.svg
├── RT_ICONS_question.svg
├── RT_ICONS_robot.svg
├── RT_ICONS_share.svg
├── RT_ICONS_signal_tower.svg
├── RT_ICONS_smartphone.svg
├── RT_ICONS_swipe_card.svg
├── RT_ICONS_thunder.svg
├── RT_ICONS_two_people.svg
├── RT_ICONS_up_cloud.svg
├── RT_ICONS_volume.svg
├── RT_ICONS_warning.svg
├── RT_ICONS_workflow.svg
└── RT_ICONS_wrench.svg
Details of Default Request Type icons are stored in Database in avatar table as well.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
SELECT * FROM avatar WHERE avatartype = 'SD_REQTYPE';
id | filename | contenttype | avatartype | owner | systemavatar
-------+---------------------------+---------------+------------+-------+--------------
10700 | RT_ICONS_plus.svg | image/svg+xml | SD_REQTYPE | | 1
10701 | RT_ICONS_present.svg | image/svg+xml | SD_REQTYPE | | 1
10702 | RT_ICONS_calendar.svg | image/svg+xml | SD_REQTYPE | | 1
10703 | RT_ICONS_open_book.svg | image/svg+xml | SD_REQTYPE | | 1
10704 | RT_ICONS_two_people.svg | image/svg+xml | SD_REQTYPE | | 1
10705 | RT_ICONS_camera.svg | image/svg+xml | SD_REQTYPE | | 1
10706 | RT_ICONS_heart.svg | image/svg+xml | SD_REQTYPE | | 1
10707 | RT_ICONS_light_bulb.svg | image/svg+xml | SD_REQTYPE | | 1
10708 | RT_ICONS_house.svg | image/svg+xml | SD_REQTYPE | | 1
10709 | RT_ICONS_chair.svg | image/svg+xml | SD_REQTYPE | | 1
10710 | RT_ICONS_robot.svg | image/svg+xml | SD_REQTYPE | | 1
10711 | RT_ICONS_swipe_card.svg | image/svg+xml | SD_REQTYPE | | 1
10712 | RT_ICONS_dollar.svg | image/svg+xml | SD_REQTYPE | | 1
10713 | RT_ICONS_marker.svg | image/svg+xml | SD_REQTYPE | | 1
10714 | RT_ICONS_car.svg | image/svg+xml | SD_REQTYPE | | 1
10715 | RT_ICONS_aeroplane.svg | image/svg+xml | SD_REQTYPE | | 1
10716 | RT_ICONS_database.svg | image/svg+xml | SD_REQTYPE | | 1
10717 | RT_ICONS_volume.svg | image/svg+xml | SD_REQTYPE | | 1
10718 | RT_ICONS_smartphone.svg | image/svg+xml | SD_REQTYPE | | 1
10719 | RT_ICONS_keyboard.svg | image/svg+xml | SD_REQTYPE | | 1
10720 | RT_ICONS_code.svg | image/svg+xml | SD_REQTYPE | | 1
10721 | RT_ICONS_workflow.svg | image/svg+xml | SD_REQTYPE | | 1
10722 | RT_ICONS_up_cloud.svg | image/svg+xml | SD_REQTYPE | | 1
10723 | RT_ICONS_power_button.svg | image/svg+xml | SD_REQTYPE | | 1
10724 | RT_ICONS_headset.svg | image/svg+xml | SD_REQTYPE | | 1
10725 | RT_ICONS_gears.svg | image/svg+xml | SD_REQTYPE | | 1
10726 | RT_ICONS_loop.svg | image/svg+xml | SD_REQTYPE | | 1
10727 | RT_ICONS_question.svg | image/svg+xml | SD_REQTYPE | | 1
10728 | RT_ICONS_signal_tower.svg | image/svg+xml | SD_REQTYPE | | 1
10729 | RT_ICONS_down_cloud.svg | image/svg+xml | SD_REQTYPE | | 1
10730 | RT_ICONS_wrench.svg | image/svg+xml | SD_REQTYPE | | 1
10731 | RT_ICONS_add_person.svg | image/svg+xml | SD_REQTYPE | | 1
10732 | RT_ICONS_monitor.svg | image/svg+xml | SD_REQTYPE | | 1
10733 | RT_ICONS_envelope.svg | image/svg+xml | SD_REQTYPE | | 1
10734 | RT_ICONS_padlock.svg | image/svg+xml | SD_REQTYPE | | 1
10735 | RT_ICONS_printer.svg | image/svg+xml | SD_REQTYPE | | 1
10736 | RT_ICONS_share.svg | image/svg+xml | SD_REQTYPE | | 1
10737 | RT_ICONS_cd.svg | image/svg+xml | SD_REQTYPE | | 1
10738 | RT_ICONS_warning.svg | image/svg+xml | SD_REQTYPE | | 1
10739 | RT_ICONS_thunder.svg | image/svg+xml | SD_REQTYPE | | 1
(40 rows)
Some Request Type icons present in Jira Cloud are not available in Jira Data Center. During restore of Jira Cloud backup, entries related to Request Type icons (which are not present in Jira Data Center) are added to avatar table. Since, the respective icons image is not present in jira-servicedesk-5.12.2-REL-0001.jar , Jira could not display the icons in Jira UI.
Solution
Find the entries (which are invalid) in avatar table which are added after the XML Restore.
DB Query to find the invalid entries in avatar table
1
SELECT * FROM avatar WHERE avatartype = 'SD_REQTYPE' AND filename not in ('RT_ICONS_plus.svg','RT_ICONS_present.svg','RT_ICONS_calendar.svg','RT_ICONS_open_book.svg','RT_ICONS_two_people.svg', 'RT_ICONS_camera.svg', 'RT_ICONS_heart.svg', 'RT_ICONS_light_bulb.svg','RT_ICONS_house.svg','RT_ICONS_chair.svg','RT_ICONS_robot.svg','RT_ICONS_swipe_card.svg','RT_ICONS_marker.svg','RT_ICONS_car.svg','RT_ICONS_aeroplane.svg','RT_ICONS_database.svg','RT_ICONS_volume.svg','RT_ICONS_smartphone.svg','RT_ICONS_keyboard.svg','RT_ICONS_code.svg','RT_ICONS_workflow.svg','RT_ICONS_up_cloud.svg','RT_ICONS_power_button.svg','RT_ICONS_headset.svg','RT_ICONS_gears.svg','RT_ICONS_loop.svg','RT_ICONS_question.svg','RT_ICONS_signal_tower.svg','RT_ICONS_down_cloud.svg','RT_ICONS_wrench.svg','RT_ICONS_add_person.svg','RT_ICONS_monitor.svg','RT_ICONS_envelope.svg','RT_ICONS_padlock.svg','RT_ICONS_printer.svg','RT_ICONS_share.svg','RT_ICONS_cd.svg','RT_ICONS_warning.svg','RT_ICONS_thunder.svg','RT_ICONS_dollar.svg');
Stop Jira service
Take a backup of Jira database
Always back up your data before performing any modification to the database. If possible, try your modifications on a test server.
Delete the identified row
DB query to delete the invalid entries in avatar table
1
DELETE FROM avatar WHERE avatartype = 'SD_REQTYPE' AND filename not in ('RT_ICONS_plus.svg','RT_ICONS_present.svg','RT_ICONS_calendar.svg','RT_ICONS_open_book.svg','RT_ICONS_two_people.svg', 'RT_ICONS_camera.svg', 'RT_ICONS_heart.svg', 'RT_ICONS_light_bulb.svg','RT_ICONS_house.svg','RT_ICONS_chair.svg','RT_ICONS_robot.svg','RT_ICONS_swipe_card.svg','RT_ICONS_marker.svg','RT_ICONS_car.svg','RT_ICONS_aeroplane.svg','RT_ICONS_database.svg','RT_ICONS_volume.svg','RT_ICONS_smartphone.svg','RT_ICONS_keyboard.svg','RT_ICONS_code.svg','RT_ICONS_workflow.svg','RT_ICONS_up_cloud.svg','RT_ICONS_power_button.svg','RT_ICONS_headset.svg','RT_ICONS_gears.svg','RT_ICONS_loop.svg','RT_ICONS_question.svg','RT_ICONS_signal_tower.svg','RT_ICONS_down_cloud.svg','RT_ICONS_wrench.svg','RT_ICONS_add_person.svg','RT_ICONS_monitor.svg','RT_ICONS_envelope.svg','RT_ICONS_padlock.svg','RT_ICONS_printer.svg','RT_ICONS_share.svg','RT_ICONS_cd.svg','RT_ICONS_warning.svg','RT_ICONS_thunder.svg','RT_ICONS_dollar.svg');
Start Jira Service
Was this helpful?