Custom Jira add-on deployment error on production server

Need help with custom dashboard extension deployment issue

Hi everyone! I created my first custom dashboard extension for Jira and it works great when I test it locally using atlas-run. However, when I deploy it to our production Jira instance, it fails to load properly.

The deployment itself goes through without any problems, but when I try to access the dashboard feature, it throws an error. Here’s what I’m seeing in the logs:

com.google.template.soy.tofu.SoyTofuException: When evaluating "$report.setupHtml": Failed to invoke accessor getSetupHtml on instance of class

com.google.template.soy.tofu.SoyTofuException: When evaluating "$report.setupHtml": Failed to invoke accessor getSetupHtml on instance of class com.atlassian.jira.plugin.corereports.web.action.ConfigureReport$ObjectConfigurationField
    at JIRA.Templates.Core.Reports.Configure.objectConfiguration(configurereport.soy:146)
    at JIRA.Templates.Core.Reports.Configure.configure(configurereport.soy:74)
    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.atlassian.soy.impl.DefaultSoyManager.render(DefaultSoyManager.java:154)
    at com.atlassian.jira.web.dispatcher.JiraSoyViewDispatcher.render(JiraSoyViewDispatcher.java:48)
    at com.atlassian.jira.web.dispatcher.JiraSoyViewDispatcher.dispatch(JiraSoyViewDispatcher.java:38)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

Has anyone encountered a similar issue when moving from development to production? Any suggestions on what might be causing this template rendering problem would be really helpful.

Thanks in advance!

This looks like a template context issue - your Soy template can’t access a method that doesn’t exist or isn’t exposed in production. The SoyTofuException is failing on the getSetupHtml accessor in the ConfigureReport class. I’ve hit similar problems before. Production servers often have different security policies that block reflection-based method calls. Try adding explicit getter methods to your report configuration class if you haven’t already. Also check if your production Jira has custom security managers or policies messing with template rendering. Sometimes it’s just the class not being properly instantiated in production vs your local atlas-run environment.

I hit the exact same issue with my first dashboard extension. Turned out to be a version mismatch between my local dev environment and production Jira. I was running a newer Atlassian SDK locally than what production had. SoyTofuException usually means the template rendering system can’t match up properly. Fixed it by rebuilding the plugin with the same SDK version as production. Check your production Jira version in system info, then match that SDK version locally. Also double-check any custom template files - they might reference methods or properties that don’t exist in the production version. Template context can be different between environments.

totally! i had that issue too. check if your atlassian-plugin.xml is correctly set up with the soy func declarations. also, ensure the getSetupHtml method is public in your java class - production is way stricter than dev.