我有一个HibernateInterceptor用于将hibernate ORM作为参数
的方法调用方法时,我收到java.lang.reflect.UndeclaredThrowableException。原因显示为
引起:java.lang.NoSuchMethodException:$ Proxy25.saveData(com.test.orm.Employee $$ EnhancerByCGLIB $$ bcc67d7,java.util.HashMap)
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());
}
请帮我解决这个问题。
答案 0 :(得分:1)
我想问题出在这里:
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());