struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lukasz Lenart (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (WW-4472) @InputConfig annotation is not working when integrating with spring aop
Date Thu, 25 Feb 2016 19:39:18 GMT

     [ https://issues.apache.org/jira/browse/WW-4472?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Lukasz Lenart updated WW-4472:
------------------------------
    Fix Version/s:     (was: 2.3.25)
                   2.5

> @InputConfig annotation is not working when integrating with spring aop
> -----------------------------------------------------------------------
>
>                 Key: WW-4472
>                 URL: https://issues.apache.org/jira/browse/WW-4472
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Annotations
>    Affects Versions: 2.3.20
>            Reporter: Huang Yujie
>            Priority: Minor
>             Fix For: 2.5
>
>
> when configuration an action with the annotation
> {code:java}
>     @Action(value = "/doSubmitCity")
>     @InputConfig(methodName = "validationFail")
>     public void doSubmitCity()
>     { 
>          //The action implementation 
>     }
> {code}
> The action class is integration with spring aop. (CGLIB proxy)
> And use struts validation framework to do the data validation.
> When the data validation fails.  tracing the code to {{DefaultWorkflowInterceptor.java}}
> {code:java}
>     protected String processInputConfig(final Object action, final String method, final
String currentResultName) throws Exception {
>         String resultName = currentResultName;
>         InputConfig annotation = action.getClass().getMethod(method, EMPTY_CLASS_ARRAY).getAnnotation(InputConfig.class);
>         if (annotation != null) {
>             if (!annotation.methodName().equals("")) {
>                 Method m = action.getClass().getMethod(annotation.methodName());
>                 resultName = (String) m.invoke(action);
>             } else {
>                 resultName = annotation.resultName();
>             }
>             if (LOG.isDebugEnabled()) {
>                 LOG.debug("Changing result name from [#0] to [#1] because of processing
annotation [#2] on action [#3]",
>                         currentResultName, resultName, InputConfig.class.getSimpleName(),
action);
>             }
>         }
>         return resultName;
>     }
> {code}
> This code, {{action.getClass().getMethod(method, EMPTY_CLASS_ARRAY).getAnnotation(InputConfig.class)}}
cannot get any annotation because the class is proxied.
> The following stack trace is printing in the log:
> {noformat}
> Could not find action or result: /test-extjs/login/doLogin.action
> No result defined for action com.huawei.test.action.login.LoginAction and result input
> at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
> at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
> at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
> at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
> at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
> at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
> at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
> at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
> at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
> at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
> {noformat}
> But at the same time, the {{@Action}} annotation is still working fine.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message