Deprecate ReflectionUtils.invokeJdbcMethod (for removal in 5.2)
Includes deprecation of NON_BRIDGED_METHODS constant.
Issue: SPR-17464
(cherry picked from commit 0a7dcf14f9)
This commit is contained in:
@@ -47,6 +47,30 @@ import org.springframework.lang.Nullable;
|
|||||||
*/
|
*/
|
||||||
public abstract class ReflectionUtils {
|
public abstract class ReflectionUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pre-built MethodFilter that matches all non-bridge methods.
|
||||||
|
* @since 3.0
|
||||||
|
* @deprecated as of 5.0.11, in favor of a custom {@link MethodFilter}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public static final MethodFilter NON_BRIDGED_METHODS =
|
||||||
|
(method -> !method.isBridge());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pre-built MethodFilter that matches all non-bridge non-synthetic methods
|
||||||
|
* which are not declared on {@code java.lang.Object}.
|
||||||
|
* @since 3.0.5
|
||||||
|
*/
|
||||||
|
public static final MethodFilter USER_DECLARED_METHODS =
|
||||||
|
(method -> (!method.isBridge() && !method.isSynthetic() && method.getDeclaringClass() != Object.class));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pre-built FieldFilter that matches all non-static, non-final fields.
|
||||||
|
*/
|
||||||
|
public static final FieldFilter COPYABLE_FIELDS =
|
||||||
|
field -> !(Modifier.isStatic(field.getModifiers()) || Modifier.isFinal(field.getModifiers()));
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Naming prefix for CGLIB-renamed methods.
|
* Naming prefix for CGLIB-renamed methods.
|
||||||
* @see #isCglibRenamedMethod
|
* @see #isCglibRenamedMethod
|
||||||
@@ -236,7 +260,9 @@ public abstract class ReflectionUtils {
|
|||||||
* @return the invocation result, if any
|
* @return the invocation result, if any
|
||||||
* @throws SQLException the JDBC API SQLException to rethrow (if any)
|
* @throws SQLException the JDBC API SQLException to rethrow (if any)
|
||||||
* @see #invokeJdbcMethod(java.lang.reflect.Method, Object, Object[])
|
* @see #invokeJdbcMethod(java.lang.reflect.Method, Object, Object[])
|
||||||
|
* @deprecated as of 5.0.11, in favor of custom SQLException handling
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
@Nullable
|
@Nullable
|
||||||
public static Object invokeJdbcMethod(Method method, @Nullable Object target) throws SQLException {
|
public static Object invokeJdbcMethod(Method method, @Nullable Object target) throws SQLException {
|
||||||
return invokeJdbcMethod(method, target, new Object[0]);
|
return invokeJdbcMethod(method, target, new Object[0]);
|
||||||
@@ -251,7 +277,9 @@ public abstract class ReflectionUtils {
|
|||||||
* @return the invocation result, if any
|
* @return the invocation result, if any
|
||||||
* @throws SQLException the JDBC API SQLException to rethrow (if any)
|
* @throws SQLException the JDBC API SQLException to rethrow (if any)
|
||||||
* @see #invokeMethod(java.lang.reflect.Method, Object, Object[])
|
* @see #invokeMethod(java.lang.reflect.Method, Object, Object[])
|
||||||
|
* @deprecated as of 5.0.11, in favor of custom SQLException handling
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
@Nullable
|
@Nullable
|
||||||
public static Object invokeJdbcMethod(Method method, @Nullable Object target, @Nullable Object... args)
|
public static Object invokeJdbcMethod(Method method, @Nullable Object target, @Nullable Object... args)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
@@ -511,8 +539,8 @@ public abstract class ReflectionUtils {
|
|||||||
* on Java 8 based interfaces that the given class implements).
|
* on Java 8 based interfaces that the given class implements).
|
||||||
* @param clazz the class to introspect
|
* @param clazz the class to introspect
|
||||||
* @param mc the callback to invoke for each method
|
* @param mc the callback to invoke for each method
|
||||||
* @since 4.2
|
|
||||||
* @throws IllegalStateException if introspection fails
|
* @throws IllegalStateException if introspection fails
|
||||||
|
* @since 4.2
|
||||||
* @see #doWithMethods
|
* @see #doWithMethods
|
||||||
*/
|
*/
|
||||||
public static void doWithLocalMethods(Class<?> clazz, MethodCallback mc) {
|
public static void doWithLocalMethods(Class<?> clazz, MethodCallback mc) {
|
||||||
@@ -682,8 +710,8 @@ public abstract class ReflectionUtils {
|
|||||||
* Invoke the given callback on all locally declared fields in the given class.
|
* Invoke the given callback on all locally declared fields in the given class.
|
||||||
* @param clazz the target class to analyze
|
* @param clazz the target class to analyze
|
||||||
* @param fc the callback to invoke for each field
|
* @param fc the callback to invoke for each field
|
||||||
* @since 4.2
|
|
||||||
* @throws IllegalStateException if introspection fails
|
* @throws IllegalStateException if introspection fails
|
||||||
|
* @since 4.2
|
||||||
* @see #doWithFields
|
* @see #doWithFields
|
||||||
*/
|
*/
|
||||||
public static void doWithLocalFields(Class<?> clazz, FieldCallback fc) {
|
public static void doWithLocalFields(Class<?> clazz, FieldCallback fc) {
|
||||||
@@ -846,26 +874,4 @@ public abstract class ReflectionUtils {
|
|||||||
boolean matches(Field field);
|
boolean matches(Field field);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pre-built FieldFilter that matches all non-static, non-final fields.
|
|
||||||
*/
|
|
||||||
public static final FieldFilter COPYABLE_FIELDS =
|
|
||||||
field -> !(Modifier.isStatic(field.getModifiers()) || Modifier.isFinal(field.getModifiers()));
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pre-built MethodFilter that matches all non-bridge methods.
|
|
||||||
*/
|
|
||||||
public static final MethodFilter NON_BRIDGED_METHODS =
|
|
||||||
(method -> !method.isBridge());
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pre-built MethodFilter that matches all non-bridge non-synthetic methods
|
|
||||||
* which are not declared on {@code java.lang.Object}.
|
|
||||||
*/
|
|
||||||
public static final MethodFilter USER_DECLARED_METHODS =
|
|
||||||
(method -> (!method.isBridge() && !method.isSynthetic() && method.getDeclaringClass() != Object.class));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.springframework.jdbc.datasource;
|
package org.springframework.jdbc.datasource;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
@@ -141,7 +142,7 @@ public class WebSphereDataSourceAdapter extends IsolationLevelDataSourceAdapter
|
|||||||
getTargetDataSource() + "], using ConnectionSpec [" + connSpec + "]");
|
getTargetDataSource() + "], using ConnectionSpec [" + connSpec + "]");
|
||||||
}
|
}
|
||||||
// Create Connection through invoking WSDataSource.getConnection(JDBCConnectionSpec)
|
// Create Connection through invoking WSDataSource.getConnection(JDBCConnectionSpec)
|
||||||
Connection con = (Connection) ReflectionUtils.invokeJdbcMethod(
|
Connection con = (Connection) invokeJdbcMethod(
|
||||||
this.wsDataSourceGetConnectionMethod, obtainTargetDataSource(), connSpec);
|
this.wsDataSourceGetConnectionMethod, obtainTargetDataSource(), connSpec);
|
||||||
Assert.state(con != null, "No Connection");
|
Assert.state(con != null, "No Connection");
|
||||||
return con;
|
return con;
|
||||||
@@ -163,21 +164,40 @@ public class WebSphereDataSourceAdapter extends IsolationLevelDataSourceAdapter
|
|||||||
protected Object createConnectionSpec(@Nullable Integer isolationLevel, @Nullable Boolean readOnlyFlag,
|
protected Object createConnectionSpec(@Nullable Integer isolationLevel, @Nullable Boolean readOnlyFlag,
|
||||||
@Nullable String username, @Nullable String password) throws SQLException {
|
@Nullable String username, @Nullable String password) throws SQLException {
|
||||||
|
|
||||||
Object connSpec = ReflectionUtils.invokeJdbcMethod(this.newJdbcConnSpecMethod, null);
|
Object connSpec = invokeJdbcMethod(this.newJdbcConnSpecMethod, null);
|
||||||
Assert.state(connSpec != null, "No JDBCConnectionSpec");
|
Assert.state(connSpec != null, "No JDBCConnectionSpec");
|
||||||
if (isolationLevel != null) {
|
if (isolationLevel != null) {
|
||||||
ReflectionUtils.invokeJdbcMethod(this.setTransactionIsolationMethod, connSpec, isolationLevel);
|
invokeJdbcMethod(this.setTransactionIsolationMethod, connSpec, isolationLevel);
|
||||||
}
|
}
|
||||||
if (readOnlyFlag != null) {
|
if (readOnlyFlag != null) {
|
||||||
ReflectionUtils.invokeJdbcMethod(this.setReadOnlyMethod, connSpec, readOnlyFlag);
|
invokeJdbcMethod(this.setReadOnlyMethod, connSpec, readOnlyFlag);
|
||||||
}
|
}
|
||||||
// If the username is empty, we'll simply let the target DataSource
|
// If the username is empty, we'll simply let the target DataSource
|
||||||
// use its default credentials.
|
// use its default credentials.
|
||||||
if (StringUtils.hasLength(username)) {
|
if (StringUtils.hasLength(username)) {
|
||||||
ReflectionUtils.invokeJdbcMethod(this.setUserNameMethod, connSpec, username);
|
invokeJdbcMethod(this.setUserNameMethod, connSpec, username);
|
||||||
ReflectionUtils.invokeJdbcMethod(this.setPasswordMethod, connSpec, password);
|
invokeJdbcMethod(this.setPasswordMethod, connSpec, password);
|
||||||
}
|
}
|
||||||
return connSpec;
|
return connSpec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static Object invokeJdbcMethod(Method method, @Nullable Object target, @Nullable Object... args)
|
||||||
|
throws SQLException {
|
||||||
|
try {
|
||||||
|
return method.invoke(target, args);
|
||||||
|
}
|
||||||
|
catch (IllegalAccessException ex) {
|
||||||
|
ReflectionUtils.handleReflectionException(ex);
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException ex) {
|
||||||
|
if (ex.getTargetException() instanceof SQLException) {
|
||||||
|
throw (SQLException) ex.getTargetException();
|
||||||
|
}
|
||||||
|
ReflectionUtils.handleInvocationTargetException(ex);
|
||||||
|
}
|
||||||
|
throw new IllegalStateException("Should never get here");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user