Jira server throws 500 error page when logging in or visiting dashboards
Platform Notice: Data Center - This article applies to Atlassian products on the Data Center platform.
Note that this knowledge base article was created for the Data Center version of the product. Data Center knowledge base articles 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
Problem
When attempting to log in a user sees a message "ERROR OCCURRED" or a page saying there is a 500 error "Sorry, we had some technical problems during your last operation.".
The 500 error page and Jira logs show In 'print' tag, expression "$dashboardTitle" evaluates to undefined.
- This error may also show if the user is logged in and navigates to the dashboard.
The full error may vary. The followings are examples of how this error may appear:
2024-09-26 08:31:29,053+0000 http-nio-8080-exec-5 ERROR [o.a.c.c.C.[.[localhost].[/jira].[action]] Servlet.service() for servlet [action] in context with path [/jira] threw exception [java.lang.IllegalArgumentException: Passed List had more than one value.] with root cause
java.lang.IllegalArgumentException: Passed List had more than one value.
at org.ofbiz.core.entity.EntityUtil.getOnly(EntityUtil.java:68)
at com.atlassian.jira.portal.OfBizPortalPageStore.getPortalPageByOwnerAndName(OfBizPortalPageStore.java:115)
at com.atlassian.jira.portal.CachingPortalPageStore.getPortalPageByOwnerAndName(CachingPortalPageStore.java:115)
at com.atlassian.jira.portal.DefaultPortalPageManager.getPortalPageByName(DefaultPortalPageManager.java:148)
at com.atlassian.jira.bc.portal.DefaultPortalPageService.validateForUpdate(DefaultPortalPageService.java:318)
at com.atlassian.jira.dashboard.permission.JiraPermissionService.isWritableBy(JiraPermissionService.java:62)
at com.atlassian.jira.dashboard.permission.JiraPermissionService.isWritableBy(JiraPermissionService.java:70)
at com.atlassian.jira.dashboard.permission.JiraGadgetPermissionManager.filterGadgets(JiraGadgetPermissionManager.java:123)
at com.atlassian.jira.web.action.Dashboard.getCurrentDashboardState(Dashboard.java:298)
at com.atlassian.jira.web.action.Dashboard.doValidation(Dashboard.java:165)
2017-10-10 17:02:15,346 http-nio-8080-exec-22 ERROR user 1022x72x1 nzdy6m 172.26.101.158,127.0.0.1 /secure/Dashboard.jspa [c.a.j.web.servlet.InternalServerErrorServlet] {errorId=7a2145ee-058a-4a60-8736-1f785b5228ee, interpretedMsg=, cause=com.google.template.soy.tofu.SoyTofuException: In 'print' tag, expression "$dashboardTitle" evaluates to undefined., stacktrace=com.google.template.soy.tofu.SoyTofuException: In 'print' tag, expression "$dashboardTitle" evaluates to undefined....
2016-12-07 07:26:57,779 http-nio-8080-exec-22 ERROR user 446x4928x1 f7vyfp 0.0.0.0 / [[Catalina].[localhost].[/].[action]] Servlet.service() for servlet action threw exception
com.google.template.soy.sharedpasses.render.RenderException: In 'print' tag, expression "$dashboardTitle" evaluates to undefined.
at JIRA.Dashboard.page.dashboard(dashboard.soy:12) [?:?]
...
2016-12-07 07:26:58,754 http-nio-8080-exec-22 ERROR user 446x4928x1 f7vyfp 0.0.0.0 / [jira.web.filters.CommittedResponseHtmlErrorRecoveryFilter] Exception occurred after HTTP response was already committed: javax.servlet.ServletException: java.lang.RuntimeException: com.google.template.soy.tofu.SoyTofuException: In 'print' tag, expression "$dashboardTitle" evaluates to undefined.
...
2016-12-07 07:26:58,108 http-nio-8080-exec-22 ERROR user 446x4928x1 f7vyfp 0.0.0.0 / [ContainerBase.[Catalina].[localhost].[/]] Unhandled exception occurred whilst decorating page
java.lang.RuntimeException: javax.servlet.ServletException: java.lang.RuntimeException: com.google.template.soy.tofu.SoyTofuException: In 'print' tag, expression "$dashboardTitle" evaluates to undefined.
at com.atlassian.web.servlet.plugin.DynamicAuthorizationServletForwarder.forward(DynamicAuthorizationServletForwarder.java:55) [?:?]
at com.atlassian.web.servlet.plugin.SanitizingServletForwarder.forward(SanitizingServletForwarder.java:32) [?:?]
at com.atlassian.web.servlet.plugin.RememberingServletForwarder.forward(RememberingServletForwarder.java:51) [?:?]
at com.atlassian.web.servlet.plugin.ResolvingServletForwarder.forward(ResolvingServletForwarder.java:38) [?:?]
...
Caused by: javax.servlet.ServletException: java.lang.RuntimeException: com.google.template.soy.tofu.SoyTofuException: In 'print' tag, expression "$dashboardTitle" evaluates to undefined.
at com.atlassian.jira.web.dispatcher.JiraWebworkActionDispatcher.onActionException(JiraWebworkActionDispatcher.java:220) [classes/:?]
at com.atlassian.jira.web.dispatcher.JiraWebworkActionDispatcher.service(JiraWebworkActionDispatcher.java:172) [classes/:?]
...
Caused by: com.google.template.soy.tofu.SoyTofuException: In 'print' tag, expression "$dashboardTitle" evaluates to undefined.
at JIRA.Dashboard.page.dashboard(dashboard.soy:12) [?:?]
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.DefaultSoyTemplateRenderer.render(DefaultSoyTemplateRenderer.java:45) [?:?]
at com.atlassian.soy.impl.DefaultSoyTemplateRenderer.render(DefaultSoyTemplateRenderer.java:39) [?:?]
...
2025-01-06 00:14:18,413-0800 http-nio-8080-exec-1 url: /jira/internal-error ERROR [c.a.j.web.servlet.InternalServerErrorServlet] {errorId=98942661-cf8d-4586-9708-a355d1c93fd4, interpretedMsg=, cause=c
om.atlassian.jira.util.dbc.Assertions$NullArgumentException: ctx.user should not be null!, stacktrace=com.atlassian.jira.util.dbc.Assertions$NullArgumentException: ctx.user should not be null!
at com.atlassian.jira.util.dbc.Assertions.notNull(Assertions.java:25) [jira-api-9.12.15.jar:?]
at com.atlassian.jira.sharing.type.GroupShareTypeValidator.checkSharePermission(GroupShareTypeValidator.java:50) [classes/:?]
at com.atlassian.jira.sharing.DefaultShareTypeValidatorUtils.isValidSharePermission(DefaultShareTypeValidatorUtils.java:72) [classes/:?]
at com.atlassian.jira.sharing.DefaultShareTypeValidatorUtils.hasValidSharePermissions(DefaultShareTypeValidatorUtils.java:53) [classes/:?]
at com.atlassian.jira.sharing.DefaultShareTypeValidatorUtils.isValidSharePermission(DefaultShareTypeValidatorUtils.java:32) [classes/:?]
at com.atlassian.jira.bc.portal.DefaultPortalPageService.checkOwnerShipAndExistenceAndSharePermissions(DefaultPortalPageService.java:597) [classes/:?]
at com.atlassian.jira.bc.portal.DefaultPortalPageService.validateForUpdate(DefaultPortalPageService.java:315) [classes/:?]
Environment
Jira Server/Data Center on any version from 8.0.0.
Cause
There're a few possible causes:
- The affected user has access to multiple dashboards with the same name and the same owner.
- Note: The affected user does not need to be the owner of the dashboard(s). For example, the affected user may have them as part of their favorites.
- There's a corrupted application link.
- Base URL healthcheck fails due to SSL certificate using SAN (applicable in JIRA 7.4 and above).
- (Extra) You may also check this similar KB: Unable to Load Jira Dashboard seeing an HTTP 500 error when using F5 BigIP as a reverse proxy.
- (Extra) The problem is happening on Jira Data Center with 2 nodes or more, and there is a symlink configured in each node pointing from the Jira home folder to the Jira shared folder, as explained in Error 500 when loading various Jira page(s) and JVM crashes
Diagnosis
For Cause 1
Use the following SQL query to identify if there are multiple dashboards with the same name:
SELECT a.* FROM portalpage a JOIN (SELECT pagename, username, COUNT(*) FROM portalpage GROUP BY pagename, username HAVING count(*) > 1 ) b ON a.pagename = b.pagename AND a.username = b.username ORDER BY a.username;
Alternatively, you can also check the Jira application logs. If you find the error below, then this root cause is relevant:
2024-09-26 08:31:29,053+0000 http-nio-8080-exec-5 ERROR [o.a.c.c.C.[.[localhost].[/jira].[action]] Servlet.service() for servlet [action] in context with path [/jira] threw exception [java.lang.IllegalArgumentException: Passed List had more than one value.] with root cause java.lang.IllegalArgumentException: Passed List had more than one value. at org.ofbiz.core.entity.EntityUtil.getOnly(EntityUtil.java:68) at com.atlassian.jira.portal.OfBizPortalPageStore.getPortalPageByOwnerAndName(OfBizPortalPageStore.java:115) at com.atlassian.jira.portal.CachingPortalPageStore.getPortalPageByOwnerAndName(CachingPortalPageStore.java:115) at com.atlassian.jira.portal.DefaultPortalPageManager.getPortalPageByName(DefaultPortalPageManager.java:148) at com.atlassian.jira.bc.portal.DefaultPortalPageService.validateForUpdate(DefaultPortalPageService.java:318) at com.atlassian.jira.dashboard.permission.JiraPermissionService.isWritableBy(JiraPermissionService.java:62) at com.atlassian.jira.dashboard.permission.JiraPermissionService.isWritableBy(JiraPermissionService.java:70) at com.atlassian.jira.dashboard.permission.JiraGadgetPermissionManager.filterGadgets(JiraGadgetPermissionManager.java:123) at com.atlassian.jira.web.action.Dashboard.getCurrentDashboardState(Dashboard.java:298) at com.atlassian.jira.web.action.Dashboard.doValidation(Dashboard.java:165)
If 1 or more results are returned by the SQL query, or if you see the error mentioned above, then you are impacted by this problem. If not, please check the section Resolution for Cause 1.
For more information about this scenario, you can also refer to the KB article Passed List Had More than One Value errors when viewing dashboard or filters.
For Cause 2
Do the following:
- Go to the Application Links page.
- Check the status of the application links as well as if any of them is not in use.
If all application links are good, check the below.
For Cause 3
This error is thrown in the logs:
2017-10-10 17:04:06,623 HealthCheck:thread-5 ERROR ServiceRunner [c.a.t.j.healthcheck.support.BaseUrlHealthCheck] An error occurred when performing the Base URL healthcheck:
java.lang.ClassCastException: [B cannot be cast to java.lang.String
at org.apache.http.conn.ssl.DefaultHostnameVerifier.getSubjectAltNames(DefaultHostnameVerifier.java:309)
Resolution
Resolution for Cause 1
The fix is to make it so that there are no longer duplicate dashboard names under a single owner. It should be safe to have dashboards with duplicate names as long as the dashboards are not owned by the same user.
Please do not attempt to modify this in the database.
- Use the diagnosis query to determine the owner of the problem-causing dashboards.
- The user will need to log into JIRA and then go to the following URL. This URL will be accessible even if the user encounters an error when logging in.
- BASE_URL/secure/ConfigurePortalPages!default.jspa
- Edit one of the dashboards that have duplicate names. Change the name so that there is no longer a duplicate.
Resolution for Cause 2
- Delete the unused application links. Mind the duplicated entries
- For the other applinks, if there is a warning/error and you observe that the connection is not working, we would suggest removing the corresponding application links and testing if the dashboard can be accessed properly.
Resolution for Cause 3
There're only workarounds for this cause:
- Temporarily use an SSL certificate that doesn't use SAN
- Temporarily run JIRA over HTTP
This has been fixed in Jira 7.6.4, 7.7.2, 7.8.0. See JRASERVER-65595 - JIRA applinks fail if SSL certificate uses Subject Alternative Name (SAN) for more information.