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 Mon, 02 Mar 2015 08:01:04 GMT

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

Lukasz Lenart updated WW-4472:
------------------------------
    Description: 
when configuration a 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.


  was:
when configuration a action with the annotation

    @Action(value = "/doSubmitCity")
    @InputConfig(methodName = "validationFail")
    public void doSubmitCity()
    { 
         //The action implementation 
    }
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
    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;
    }

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:
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)


But at the same time, the @Action annotation is still working fine.




> @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
>
> when configuration a 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