From 70164cb145a16a1a1c89fc3841f8426a76f6396e Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 22 Nov 2013 23:26:09 +0100 Subject: [PATCH] Properly handle InvocationTargetException in reflective JtaPlatform implementation --- .../orm/hibernate4/ConfigurableJtaPlatform.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/ConfigurableJtaPlatform.java b/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/ConfigurableJtaPlatform.java index 4f394057f8..ee12509ddd 100644 --- a/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/ConfigurableJtaPlatform.java +++ b/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/ConfigurableJtaPlatform.java @@ -17,6 +17,7 @@ package org.springframework.orm.hibernate4; import java.lang.reflect.InvocationHandler; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import javax.transaction.Status; @@ -136,8 +137,15 @@ class ConfigurableJtaPlatform implements InvocationHandler { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - Method targetMethod = getClass().getMethod(method.getName(), method.getParameterTypes()); - return targetMethod.invoke(this, args); + try { + return getClass().getMethod(method.getName(), method.getParameterTypes()).invoke(this, args); + } + catch (InvocationTargetException ex) { + throw ex.getTargetException(); + } + catch (Throwable ex) { + throw new IllegalStateException("Failed to delegate to corresponding implementation method", ex); + } } /**