Catch Throwable to avoid propagating undeclared exceptions
git-svn-id: https://svn.apache.org/repos/asf/aries/branches/jpa-1.x@1784214 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/jpa-container-advancedtestbundle/pom.xml b/jpa-container-advancedtestbundle/pom.xml
index 4cb82ea..a4ae0be 100644
--- a/jpa-container-advancedtestbundle/pom.xml
+++ b/jpa-container-advancedtestbundle/pom.xml
@@ -30,7 +30,7 @@
<groupId>org.apache.aries.jpa</groupId>
<artifactId>org.apache.aries.jpa.container.advanced.itest.bundle</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
<packaging>bundle</packaging>
<name>Test Bundle for Aries JPA Container advanced iTests</name>
diff --git a/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManagerHandler.java b/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManagerHandler.java
index 7e94baf..2a2ed88 100644
--- a/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManagerHandler.java
+++ b/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManagerHandler.java
@@ -1,6 +1,7 @@
package org.apache.aries.jpa.container.context.transaction.impl;
import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashSet;
@@ -188,6 +189,28 @@
new PersistenceException(NLS.MESSAGES.getMessage("wrong.JPA.version", new Object[]{
method.getName(), delegate
}), e);
+ } catch (final Throwable tActual) {
+ Throwable t = tActual;
+
+ while (t != null && t instanceof InvocationTargetException) {
+ t = ((InvocationTargetException) t).getTargetException();
+ }
+ if (t == null) {
+ throw new PersistenceException("unknown invocation target exception", tActual);
+ }
+
+ if (t instanceof RuntimeException) {
+ throw (RuntimeException) t;
+ }
+ if (t instanceof Error) {
+ throw (Error) t;
+ }
+ for (Class<?> declaredException : method.getExceptionTypes()) {
+ if (declaredException.isAssignableFrom(t.getClass())) {
+ throw t;
+ }
+ }
+ throw new PersistenceException("unexpected un-declared exception " + tActual, tActual);
}
return res;
diff --git a/jpa-container-itest/pom.xml b/jpa-container-itest/pom.xml
index 1e2e95a..d6aad08 100644
--- a/jpa-container-itest/pom.xml
+++ b/jpa-container-itest/pom.xml
@@ -301,7 +301,7 @@
<dependency>
<groupId>org.apache.aries.jpa</groupId>
<artifactId>org.apache.aries.jpa.container.advanced.itest.bundle</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>