From 0da90e38cfb6bca045beeaf102e1912124f8c382 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 19 Nov 2009 16:36:15 +0000 Subject: [PATCH] TransactionTemplate catches undeclared checked exception and rethrows it as UndeclaredThrowableException (SPR-6361) git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@2455 50f2f4bb-b051-0410-bef5-90022cba6387 --- .../transaction/support/TransactionTemplate.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionTemplate.java b/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionTemplate.java index b8ec65ee7f2..18097552cf7 100644 --- a/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionTemplate.java +++ b/org.springframework.transaction/src/main/java/org/springframework/transaction/support/TransactionTemplate.java @@ -16,6 +16,8 @@ package org.springframework.transaction.support; +import java.lang.reflect.UndeclaredThrowableException; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -123,7 +125,7 @@ public class TransactionTemplate extends DefaultTransactionDefinition } else { TransactionStatus status = this.transactionManager.getTransaction(this); - T result = null; + T result; try { result = action.doInTransaction(status); } @@ -137,6 +139,11 @@ public class TransactionTemplate extends DefaultTransactionDefinition rollbackOnException(status, err); throw err; } + catch (Exception ex) { + // Transactional code threw unexpected exception -> rollback + rollbackOnException(status, ex); + throw new UndeclaredThrowableException(ex, "TransactionCallback threw undeclared checked exception"); + } this.transactionManager.commit(status); return result; }