Ya, I'm tring Spring AOP as well, and facing some problem.
If I AOP action class, some action when I run, I got this error, but some is
running fine:
Struts has detected an unhandled exception:
# Messages: $Proxy18.input1()
File: java/lang/Class.java
Line number: 1,605
Stacktraces
java.lang.NoSuchMethodException: $Proxy18.input1()
java.lang.Class.getMethod(Class.java:1605)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod(AnnotationValidationInterceptor.java:75)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:47)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
com.iss.sandbox.louis.common.utils.LogInterceptor.invoke(LogInterceptor.java:67)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$Proxy17.intercept(Unknown Source)
Not sure what happen, but if I AOP service & dao classes, thats fine, but it
print the interface name instead of the actual implement class name.
Here is part of my spring conf:
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Action*</value>
<value>*Service*</value>
<value>*DAO*</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>logInterceptor</value>
</list>
</property>
</bean>
And the LogInterceptor.java:
public class LogInterceptor implements MethodInterceptor {
private static Log logger = LogFactory.getLog(LogInterceptor.class);
/*
* (non-Javadoc)
*
* @see
* org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept
* .MethodInvocation)
*/
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
if (logger.isDebugEnabled()) {
logger.debug("Beginning method: "
+ methodInvocation.getMethod().getClass() + "::"
+ methodInvocation.getMethod().getName());
}
try {
Object returnValue = methodInvocation.proceed();
return returnValue;
} finally {
if (logger.isDebugEnabled()) {
logger.debug("Finish execute "
+ methodInvocation.getMethod().getDeclaringClass()
+ "::" + methodInvocation.getMethod().getName());
}
}
}
}
Print out:
2009-08-18 11:11:00,296 DEBUG louis.common.utils.LogInterceptor.invoke:62 -
Beginning method: class java.lang.reflect.Method::execute
2009-08-18 11:11:00,312 DEBUG louis.common.utils.LogInterceptor.invoke:71 -
Finish execute interface com.opensymphony.xwork2.Action::execute
________________________________
From: Dave Newton <[email protected]>
To: Struts Users Mailing List <[email protected]>
Sent: Monday, August 17, 2009 6:01:30 PM
Subject: Re: LoggingInterceptor
[email protected] wrote:
> We use to have this log statement in most of the method begin and end
> in Struts1, now working with S2+Spring, both are provide logging
> interceptor, so I wonder this can help me to reduce coding in new
> project.
No; the logging interceptor does exactly what it says it does.
General declarative entry/exit logging should be handled via AOP, for example
using Spring.
Dave
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]