我有一个以hibernate ORM为参数的方法的HibernateInterceptor
当方法被调用时,我会得到java.lang.reflect.UndeclaredThrowableException。原因如下所示
原因:$Proxy25.saveData(com.test.orm.Employee$$EnhancerByCGLIB$$bcc67d7,java.util.HashMap:java.lang.NoSuchMethodException)
saveData(com.test.orm.Employee,java.util.HashMap)是我的方法。
下面是我的拦截器方面代码
@Around(“@target (com.test.HibernateInterceptorRequired)”)
public Object interceptCall(ProceedingJoinPoint joinPoint) throws Throwable {
ProxyFactory proxyFactory = new ProxyFactory(joinPoint.getTarget());
proxyFactory.addAdvice(hibernateInterceptor);
Class [] classArray = new Class[joinPoint.getArgs().length];
for (int i = 0; i < classArray.length; i++)
classArray[i] = joinPoint.getArgs()[i].getClass();
return
proxyFactory
.getProxy()
.getClass()
.getDeclaredMethod(joinPoint.getSignature().getName(), classArray)
.invoke(proxyFactory.getProxy(), joinPoint.getArgs());
}请帮我解决这个问题。
发布于 2010-11-19 21:20:19
我想问题出在这里:
classArray[i] = joinPoint.getArgs()[i].getClass(); 您使用实际参数的类来构建要查找的方法签名,因此最终得到的签名如$Proxy25.saveData(com.test.orm.Employee$$EnhancerByCGLIB$$bcc67d7, java.util.HashMap)与实际签名不匹配。
也许你需要用ProceedingJoinPoint.getSignature()做点什么,就像这样:
Method m = ((MethodSignature) pjp.getSignature()).getMethod();
return m.invoke(proxyFactory.getProxy(), joinPoint.getArgs()); https://stackoverflow.com/questions/4225300
复制相似问题