-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Medium
-
None
-
Affects Version/s: 9.2.5
-
Component/s: Macros - Gadgets
-
2
-
Severity 2 - Major
-
38
Issue Summary
After upgrading Confluence from 8.5.x to 9.2, the new Gadgets plugin does not allow the user to add a Jira external or native gadget (for example, Jira Issue Calendar, etc.) to a Confluence page.
The gadget can load in edit mode, but when the user clicks insert, the editor hangs for a while, and the update button is not available. It takes some time for the update button to be available, and the placeholder request for the Jira gadget fails with an HTTP 500 error.
Screen recording here: https://www.loom.com/share/b19272c9a3664d7198a412de27e1f999?sid=650ad2e5-b0df-41c5-a86e-887b302fd8bb
After installing the Gadgets for Confluence plugin, the existing Jira external Gadget works fine, but the issue occurs only when inserting new Gadgets on a Confluence page.
This bug also applies to all the external and Jira native gadgets (described here) registered in Confluence, individually or as a feed.
Steps to Reproduce
Let's take an example of the Jira Calendar Gadget (default in Jira).
- Use Confluence 9.2.x integrated with Jira 9.12.17+ (via application link) with Gadgets for Confluence Marketplace app installed in Confluence.
- Make sure to setup SSO for both the above applications. Any unauthenticated request goes via the authentication Gateway and then to the SSO provider.
- Add Calendar Gadget in Jira. If you are unable to add the Calendar gadget, follow the steps from the KB article
- Register the Jira Calendar Gadget in Confluence as described in Registering External Gadgets.
- Create a new Confluence page and add the Jira Calendar Gadget.
Expected Results
The placeholder endpoint works as expected, and the Jira Calendar gadget is successfully added to the page. To illustrate, this is what Confluence expects when fetching the placeholder icon in edit mode:


The update is successful, and the Jira Calendar gadget gets added on the page.

Actual Results
In HAR logs, the placeholder request fails with an HTTP 500 error.
2025-08-18T17:33:17.192Z 915 ms 4.95 KB 47f24634 500 charlie@example.. https://confluence-dev.corp.example.com/s/4102/_/plugins/servlet/gadgets/placeholder?gadgetId=aHR0cHM6Ly9qaXJhLWRldi5jb3JwLmFwcGR5bmFtaWNzLmNvbS9y...
The exception below is thrown in the atlassian-confluence.log file:
2025-08-18 17:33:18,040 ERROR [http-nio2-8090-exec-7 url: /s/4102/_/plugins/servlet/gadgets/placeholder, /plugins/servlet/gadgets/placeholder; user: charlie@example.com] [[Standalone].[localhost].[/].[servlet-module-container-servlet]] log Servlet.service() for servlet [servlet-module-container-servlet] threw exception -- url: /s/4102/_/plugins/servlet/gadgets/placeholder | userName: charlie@example.com | referer: https://confluence-dev.corp.example.com/pages/resumedraft.action?draftId=370278561&draftShareId=61f92da3-d4c2-4f62-9216-cb455b49dfb4& | traceId: 98c27099cd325aef 2025-08-18 17:33:18,072 ERROR [http-nio2-8090-exec-7 url: /500page.jsp; user: charlie@example.com] [atlassian.confluence.status.SystemErrorInformationLogger] logException Unhandled exception, request unique ID: 243bd684-e326-44d0-9fae-2aba8eab85b9 -- traceId: 98c27099cd325aef java.lang.NullPointerException: Cannot invoke "java.awt.Image.getWidth(java.awt.image.ImageObserver)" because "result" is null at com.atlassian.confluence.plugins.gadgets.GadgetPlaceholderServlet.getIcon(GadgetPlaceholderServlet.java:280) at com.atlassian.confluence.plugins.gadgets.GadgetPlaceholderServlet.getPlaceholderImage(GadgetPlaceholderServlet.java:245)
A curl from the Confluence instance to retrieve the PNG file using the thumbnail URL of the Jira calendar gadget fails with HTTP 302 redirect ![]()
curl -kv https://jira-dev.corp.example.com/s/-yxlfs2/9120018/1kgqh6/6.1.3/_/download/resources/com.atlassian.jira.ext.calendar:issuescalendar-gadget/calendar-thumb.png
> GET /s/-yxlfs2/9120018/1kgqh6/6.1.2/_/download/resources/com.atlassian.jira.ext.calendar:issuescalendar-gadget/calendar-thumb.png HTTP/1.1
> Host: jira-dev.corp.example.com
> User-Agent: curl/7.76.1
> Accept: /
TLSv1.2 (IN), TLS header, Unknown (23):
TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
TLSv1.2 (IN), TLS header, Unknown (23):
Mark bundle as not supporting multiuse
< HTTP/1.1 302 Moved Temporarily
< Server: Duo/1.0
< Date: Tue, 18 Aug 2025 10:26:44 GMT
< Content-Type: text/html
< Content-Length: 140
< Connection: keep-alive
< Location: <to_redirect_url_2fa_url>
< Strict-Transport-Security: max-age=31536000
<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>Duo/1.0</center>
</body>
</html>
Workaround
Currently, there is no known workaround for this behaviour. A workaround will be added here when available