Details
-
Bug
-
Resolution: Fixed
-
Low
-
6.4.6, 6.4.8, 6.4.10, 6.4.11, 6.4.14
-
6.04
-
Description
NOTE: This bug report is for JIRA Server. Using JIRA Cloud? See the corresponding bug report.
Summary
System avatar icons used for custom issue types causes the following symptoms when a notification is sent:
- Users will see broken image in email.
- Administrator will see error in logs.
System Avatar not found at the following resource path: /avatars/medium_genericissue.png
See below for full stack-trace.
Steps to Reproduce
- Enable email notification
- Create custom issue type 'tst', use any of system avatars.
- Create issue with custom issue type 'tst'
- Wait for notification to be sent
- Check logs and notification email
Expected Results
No errors in logs when email is sent. User receives email without broken image.
Actual Results
The below exception is thrown in the atlassian-jira.log file for every notification sent:
2015-06-24 19:03:53,107 Sending mailitem com.atlassian.jira.mail.IssueMailQueueItem@1962e1e5[issue=com.atlassian.jira.issue.IssueImpl@569a4e86[id=10300,summary=test zip,key=PRG-3,created=2015-06-24 13:59: 13.015,updated=2015-06-24 18:24:37.939,assignee=test:1,reporter=admin:1],remoteUser=admin:1,notificationType=Current_Assignee,eventTypeId=6,templateId=6] ERROR admin 1143x924x1 1so34qn 127.0.0.1 /secure/a dmin/MailQueueAdmin.jspa [atlassian.jira.avatar.AvatarManagerImpl] System Avatar not found at the following resource path: /avatars/medium_genericissue.png 2015-06-24 19:03:53,108 Sending mailitem com.atlassian.jira.mail.IssueMailQueueItem@1962e1e5[issue=com.atlassian.jira.issue.IssueImpl@569a4e86[id=10300,summary=test zip,key=PRG-3,created=2015-06-24 13:59: 13.015,updated=2015-06-24 18:24:37.939,assignee=test:1,reporter=admin:1],remoteUser=admin:1,notificationType=Current_Assignee,eventTypeId=6,templateId=6] WARN admin 1143x924x1 1so34qn 127.0.0.1 /secure/ad min/MailQueueAdmin.jspa [jira.mail.util.MailAttachmentsManagerImpl] Cannot add avatar as Mail attachment for 'issue type: tst' java.io.IOException: File not found at com.atlassian.jira.avatar.AvatarManagerImpl.processAvatarData(AvatarManagerImpl.java:379) at com.atlassian.jira.avatar.AvatarManagerImpl.readAvatarData(AvatarManagerImpl.java:492) at com.atlassian.jira.mail.util.MailAttachmentsManagerImpl$AvatarAttachment.buildBodyPart(MailAttachmentsManagerImpl.java:370) at com.atlassian.jira.mail.util.MailAttachmentsManagerImpl$1.apply(MailAttachmentsManagerImpl.java:205) at com.atlassian.jira.mail.util.MailAttachmentsManagerImpl$1.apply(MailAttachmentsManagerImpl.java:201) at com.google.common.collect.Iterators$8.next(Iterators.java:812) at com.google.common.collect.Iterators$7.computeNext(Iterators.java:648) at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) at com.google.common.collect.Iterators$5.hasNext(Iterators.java:543) at com.atlassian.jira.mail.builder.EmailRenderer.buildMailWithAttachments(EmailRenderer.java:151) at com.atlassian.jira.mail.builder.EmailRenderer.renderEmailBody(EmailRenderer.java:123) at com.atlassian.jira.mail.builder.EmailRenderer.render(EmailRenderer.java:166) at com.atlassian.jira.mail.builder.EmailBuilder.renderNow(EmailBuilder.java:162) at com.atlassian.jira.mail.builder.EmailBuilder.renderNowAsQueueItem(EmailBuilder.java:152) at com.atlassian.jira.mail.MailingListCompiler$1.processRecipient(MailingListCompiler.java:307) at com.atlassian.jira.mail.NotificationRecipientProcessor.process(NotificationRecipientProcessor.java:39) at com.atlassian.jira.mail.MailingListCompiler.addMailsToQueue(MailingListCompiler.java:332) at com.atlassian.jira.mail.MailingListCompiler.access$200(MailingListCompiler.java:47) at com.atlassian.jira.mail.MailingListCompiler$NotificationCompiler.addEmailsToQueue(MailingListCompiler.java:455) at com.atlassian.jira.mail.MailingListCompiler$NotificationCompiler.sendLists(MailingListCompiler.java:425) at com.atlassian.jira.mail.MailingListCompiler$NotificationCompiler.sendForEvent(MailingListCompiler.java:378) at com.atlassian.jira.mail.MailingListCompiler.sendLists(MailingListCompiler.java:140) at com.atlassian.jira.mail.IssueMailQueueItem.send(IssueMailQueueItem.java:150) at com.atlassian.mail.queue.MailQueueImpl.sendBuffer(MailQueueImpl.java:66) at com.atlassian.jira.mail.JiraMailQueue$1.apply(JiraMailQueue.java:57) at com.atlassian.jira.mail.JiraMailQueue$1.apply(JiraMailQueue.java:53) at com.atlassian.jira.util.velocity.DefaultVelocityRequestContextFactory.runWithStaticBaseUrl(DefaultVelocityRequestContextFactory.java:127) at com.atlassian.jira.util.DefaultBaseUrl.runWithStaticBaseUrl(DefaultBaseUrl.java:58) at com.atlassian.jira.mail.JiraMailQueue.sendBuffer(JiraMailQueue.java:52) at com.atlassian.jira.web.action.admin.MailQueueAdmin.doExecute(MailQueueAdmin.java:51) <+1> (ActionSupport.java:165) at com.atlassian.jira.action.JiraActionSupport.execute(JiraActionSupport.java:88) <+7> (DefaultInterceptorChain.java:39) (NestedInterceptorChain.java:31) (ChainedInterceptor.java:16) (DefaultInte rceptorChain.java:35) (GenericDispatcher.java:225) (GenericDispatcher.java:154) (JiraWebworkActionDispatcher.java:152) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) <+2> (ApplicationFilterChain.java:303) (ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) <+14> (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (ApplicationF ilterChain.java:241) (ApplicationFilterChain.java:208) (XContentTypeOptionsNoSniffFilter.java:22) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (HeaderSa nitisingFilter.java:44) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) at com.atlassian.jira.onboarding.postsetup.ui.PostSetupAnnouncementsFilter.doFilter(PostSetupAnnouncementsFilter.java:61) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (Del egatingPluginFilter.java:70) at com.atlassian.jira.tzdetect.IncludeResourcesFilter.doFilter(IncludeResourcesFilter.java:40) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.jira.baseurl.IncludeResourcesFilter.doFilter(IncludeResourcesFilter.java:38) <+8> (AbstractHttpFilter.java:31) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) (ContextFilter.java:25) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.mywork.client.filter.ServingRequestsFilter.doFilter(ServingRequestsFilter.java:37) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFixupFilter.doFilter(PrettyUrlsSiteMeshFixupFilter.java:36) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsDispatcherFilter.doFilter(PrettyUrlsDispatcherFilter.java:60) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFilter.doFilter(PrettyUrlsSiteMeshFilter.java:92) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsMatcherFilter.doFilter(PrettyUrlsMatcherFilter.java:56) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.labs.botkiller.BotKillerFilter.doFilter(BotKillerFilter.java:36) <+26> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AccessLogFilter.java:107) (AccessLogFilter.java:91) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (XsrfTokenAdditionRequestFilter.java:54) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (SiteMeshFilter.java:181) (SiteMeshFilter.java:85) (SitemeshPageFilter.java:124) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (PageBuilderFilter.java:90) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (CommittedResponseHtmlErrorRecoveryFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) <+22> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (SecurityFilter.java:239) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (TrustedApplicationsFilter.java:100) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (BaseLoginFilter.java:172) (JiraLoginFilter.java:70) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) (OAuthFilter.java:79) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) <+13> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ProfilingFilter.java:99) (JIRAProfilingFilter.java:19) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractJohnsonFilter.java:71) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) <+5> (UrlRewriteFilter.java:394) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) at com.atlassian.analytics.client.filter.JiraAnalyticsFilter.doFilter(JiraAnalyticsFilter.java:40) at com.atlassian.analytics.client.filter.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:32) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) <+45> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractCachingFilter.java:33) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractEncodingFilter.java:41) (AbstractHttpFilter.java:31) (PathMatchingEncodingFilter.java:49) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (JiraStartupChecklistFilter.java:79) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (MultipartBoundaryCheckFilter.java:41) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (JiraFirstFilter.java:61) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (GzipFilter.java:115) (GzipFilter.java:92) (JiraGzipFilter.java:56) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (StandardWrapperValve.java:220) (StandardContextValve.java:122) (AuthenticatorBase.java:501) (StandardHostValve.java:171) (ErrorReportValve.java:103) (StandardEngineValve.java:116) (AccessLogValve.java:950) (CoyoteAdapter.java:408) (AbstractHttp11Processor.java:1070) (AbstractProtocol.java:611) (JIoEndpoint.java:316) 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
these system avatars have only one size: xsmall
ls -1 atlassian-jira-6.4.6-standalone/atlassian-jira/WEB-INF/classes/avatars/ | awk -F '_' '{if (length($3) > 0 ){print $2"_"$3} else {print $2} }' | sort | uniq -c | grep 1 3 Avatar-1.png 3 Avatar-10.png 3 Avatar-11.png 3 Avatar-12.png 3 Avatar-13.png 3 Avatar-14.png 3 Avatar-15.png 3 Avatar-16.png 3 Avatar-17.png 3 Avatar-18.png 3 Avatar-19.png 3 Avatar-21.png 1 all_unassigned.png 1 black.png 1 blank.png 1 brown.png 1 bug.png 1 confluence.png 1 defect.png 1 delete.png 1 documentation.png 1 epic.png 1 exclamation.png 1 genericissue.png 1 health.png 1 improvement.png 1 newfeature.png 1 orange.png 1 red.png 1 remove_feature.png 1 requirement.png 1 sales.png 1 story.png 1 subtask.png 1 subtask_alternate.png 1 task.png 1 task_agile.png 1 undefined.png 1 white.png 1 yellow.png
Workaround #1
Upload your own avatar and assign it to custom issue type. You can also re-upload same avatar from standard issue type if you want to have the same icon.
Workaround #2
According to this comment, issue can be resolved by copying the xsmall files to medium ones. Thanks agslab!
If you are on Linux, you can simply run the below script we've put together on the <JIRA_INSTALL>/atlassian-jira/WEB-INF/classes/avatars directory (make sure you have read/write permission on the folder).
rename.sh
Attachments
Issue Links
- relates to
-
JRACLOUD-43997 IssueMail can't include system avatar images, they are not present
- Closed