From 9659bc5fe7ad70811bae0b2057194b47d5a506cd Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 30 Oct 2016 22:29:53 +0100 Subject: [PATCH] ObjectToObjectConverter properly handles constructors on non-public classes Issue: SPR-14304 --- .../convert/support/ObjectToObjectConverter.java | 1 + .../DefaultConversionServiceTests.java | 13 ++++++------- .../support/GenericConversionServiceTests.java | 6 ++---- 3 files changed, 9 insertions(+), 11 deletions(-) rename spring-core/src/test/java/org/springframework/core/convert/{support => converter}/DefaultConversionServiceTests.java (98%) diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToObjectConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToObjectConverter.java index dcbc0aae093..bd9a1d64cd3 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToObjectConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToObjectConverter.java @@ -102,6 +102,7 @@ final class ObjectToObjectConverter implements ConditionalGenericConverter { } else if (member instanceof Constructor) { Constructor ctor = (Constructor) member; + ReflectionUtils.makeAccessible(ctor); return ctor.newInstance(source); } } diff --git a/spring-core/src/test/java/org/springframework/core/convert/support/DefaultConversionServiceTests.java b/spring-core/src/test/java/org/springframework/core/convert/converter/DefaultConversionServiceTests.java similarity index 98% rename from spring-core/src/test/java/org/springframework/core/convert/support/DefaultConversionServiceTests.java rename to spring-core/src/test/java/org/springframework/core/convert/converter/DefaultConversionServiceTests.java index 2f144e49b4f..36b44091d9e 100644 --- a/spring-core/src/test/java/org/springframework/core/convert/support/DefaultConversionServiceTests.java +++ b/spring-core/src/test/java/org/springframework/core/convert/converter/DefaultConversionServiceTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.core.convert.support; +package org.springframework.core.convert.converter; import java.awt.Color; import java.lang.reflect.Method; @@ -50,8 +50,7 @@ import org.springframework.core.MethodParameter; import org.springframework.core.convert.ConversionFailedException; import org.springframework.core.convert.ConverterNotFoundException; import org.springframework.core.convert.TypeDescriptor; -import org.springframework.core.convert.converter.Converter; -import org.springframework.core.convert.converter.ConverterRegistry; +import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.tests.Assume; import org.springframework.tests.TestGroup; import org.springframework.util.ClassUtils; @@ -61,16 +60,16 @@ import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; /** - * Unit tests for the {@link DefaultConversionService}. + * Unit tests for {@link DefaultConversionService}. * - *

For tests involving the {@link GenericConversionService}, see - * {@link GenericConversionServiceTests}. + *

In this package for enforcing accessibility checks to non-public classes outside + * of the {@code org.springframework.core.convert.support} implementation package. + * Only in such a scenario, {@code setAccessible(true)} is actually necessary. * * @author Keith Donald * @author Juergen Hoeller * @author Stephane Nicoll * @author Sam Brannen - * @see GenericConversionServiceTests */ public class DefaultConversionServiceTests { diff --git a/spring-core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java b/spring-core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java index 259709ddd77..aba06c0ac44 100644 --- a/spring-core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java +++ b/spring-core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java @@ -54,17 +54,15 @@ import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; /** - * Unit tests for the {@link GenericConversionService}. + * Unit tests for {@link GenericConversionService}. * - *

For tests involving the {@link DefaultConversionService}, see - * {@link DefaultConversionServiceTests}. + *

In this package for access to package-local converter implementations. * * @author Keith Donald * @author Juergen Hoeller * @author Phillip Webb * @author David Haraburda * @author Sam Brannen - * @see DefaultConversionServiceTests */ public class GenericConversionServiceTests {