通过hibernate orm获取java.lang.reflect.UndeclaredThrowableException

时间:2010-11-19 13:10:04

标签: spring

我有一个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());
    }

请帮我解决这个问题。

1 个答案:

答案 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());