Allow null method for getTransactionAttribute
Update MatchAlwaysTransactionAttributeSource.getTransactionAttribute to allow a null method argument. Passing a null method is not recommended and is not indicated as valid in the Javadoc, however, this was allowed in previous versions of Spring. Issue: SPR-11048
This commit is contained in:
parent
5d8fac86d7
commit
d371886988
|
@ -778,8 +778,12 @@ public abstract class ClassUtils {
|
||||||
* @return {@code true} if the method can be considered as user-declared; [@code false} otherwise
|
* @return {@code true} if the method can be considered as user-declared; [@code false} otherwise
|
||||||
*/
|
*/
|
||||||
public static boolean isUserLevelMethod(Method method) {
|
public static boolean isUserLevelMethod(Method method) {
|
||||||
return (method.isBridge() ||
|
Assert.notNull(method, "Method must not be null");
|
||||||
(!method.isSynthetic() && !method.getDeclaringClass().getName().equals("groovy.lang.GroovyObject")));
|
return (method.isBridge() || (!method.isSynthetic() && !isGroovyObjectMethod(method)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isGroovyObjectMethod(Method method) {
|
||||||
|
return method.getDeclaringClass().getName().equals("groovy.lang.GroovyObject");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class MatchAlwaysTransactionAttributeSource implements TransactionAttribu
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TransactionAttribute getTransactionAttribute(Method method, Class<?> targetClass) {
|
public TransactionAttribute getTransactionAttribute(Method method, Class<?> targetClass) {
|
||||||
return (ClassUtils.isUserLevelMethod(method) ? this.transactionAttribute : null);
|
return (method == null || ClassUtils.isUserLevelMethod(method) ? this.transactionAttribute : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,16 @@ public final class TransactionAttributeSourceTests {
|
||||||
assertTrue(TransactionDefinition.PROPAGATION_SUPPORTS == ta.getPropagationBehavior());
|
assertTrue(TransactionDefinition.PROPAGATION_SUPPORTS == ta.getPropagationBehavior());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMatchAlwaysTransactionAttributeSourceWithNulls() throws Exception {
|
||||||
|
MatchAlwaysTransactionAttributeSource tas = new MatchAlwaysTransactionAttributeSource();
|
||||||
|
TransactionDefinition definition = tas.getTransactionAttribute(null, null);
|
||||||
|
assertEquals(TransactionDefinition.PROPAGATION_REQUIRED, definition.getPropagationBehavior());
|
||||||
|
assertEquals(TransactionDefinition.ISOLATION_DEFAULT, definition.getIsolationLevel());
|
||||||
|
assertEquals(TransactionDefinition.TIMEOUT_DEFAULT, definition.getTimeout());
|
||||||
|
assertFalse(definition.isReadOnly());
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Ignore // no longer works now that setMethodMap has been parameterized
|
@Ignore // no longer works now that setMethodMap has been parameterized
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue