Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-23137

XSRF Token Interceptor fails with NoSuchMethodException for constructor-injected plugin actions

    XMLWordPrintable

Details

    Description

      atlassian-plugin.xml

      	<xwork name="Custom Attach" key="custom-attach">
      		<description>Provides custom attach file action that works with Crowd's SSO.</description>
      		<package name="custom-attach" extends="default" namespace="/screensnipe-custom-attach">
      			<default-interceptor-ref name="validatingStack"/>
      			<action name="attach-file" class="com.screensnipe.confluence.atlassian.CustomAttachFile">
      				<result name="input" type="json"/>
      				<result name="json" type="json"/>
      				<result name="error" type="json"/>
      				<result name="notpermitted" type="json"/>
      			</action>
      		</package>
      	</xwork>
      

      The exception:

      java.lang.NoSuchMethodException: Unable to load action: com.screensnipe.confluence.atlassian.CustomAttachFile
      	at com.opensymphony.xwork.config.entities.ActionConfig.getMethod(ActionConfig.java:115)
      	at com.atlassian.xwork.interceptors.XsrfTokenInterceptor.intercept(XsrfTokenInterceptor.java:78)
      	at com.atlassian.confluence.xwork.ConfluenceXsrfTokenInterceptor.intercept(ConfluenceXsrfTokenInterceptor.java:25)
      	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      	at com.atlassian.confluence.security.interceptors.CaptchaInterceptor.intercept(CaptchaInterceptor.java:46)
      	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
      	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      	at com.atlassian.confluence.util.LoggingContextInterceptor.intercept(LoggingContextInterceptor.java:49)
      	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      	at com.atlassian.confluence.core.CancellingInterceptor.intercept(CancellingInterceptor.java:23)
      	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
      

      Actually, there should be "caused by" but you didn't chain the exception.
      ActionConfig, line 114-115: catch (Exception e) { throw new NoSuchMethodException("Unable to load action: " + e.getMessage()); (lost cause)

      [INFO] [talledLocalContainer] java.lang.InstantiationException: com.screensnipe.confluence.atlassian.CustomAttachFile
      [INFO] [talledLocalContainer]   at java.lang.Class.newInstance0(Class.java:340)
      [INFO] [talledLocalContainer]   at java.lang.Class.newInstance(Class.java:308)
      [INFO] [talledLocalContainer]   at com.opensymphony.xwork.ObjectFactory.buildBean(ObjectFactory.java:97)
      [INFO] [talledLocalContainer]   at com.opensymphony.xwork.ObjectFactory.buildAction(ObjectFactory.java:77)
      [INFO] [talledLocalContainer]   at com.atlassian.confluence.plugin.ConfluencePluginObjectFactory.buildAction(ConfluencePluginObjectFactory.java:60)
      [INFO] [talledLocalContainer]   at com.opensymphony.xwork.config.entities.ActionConfig.getMethod(ActionConfig.java:112)
      

      See CONF-20055 - it's just the same problem with another interceptor.

      XSRF Interceptor needs to instantiate action just to check the annotations. It does it by calling Class.newInstance(). In our company, we use constructor-based injection. For details, see CONF-20055.

      Attachments

        Issue Links

          Activity

            People

              matt@atlassian.com Matt Ryall
              37db95e9e870 Damian Nowak
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: