ObjectToObjectConverter properly handles constructors on non-public classes
Issue: SPR-14304
(cherry picked from commit 9659bc5)
This commit is contained in:
@@ -102,6 +102,7 @@ final class ObjectToObjectConverter implements ConditionalGenericConverter {
|
|||||||
}
|
}
|
||||||
else if (member instanceof Constructor) {
|
else if (member instanceof Constructor) {
|
||||||
Constructor<?> ctor = (Constructor<?>) member;
|
Constructor<?> ctor = (Constructor<?>) member;
|
||||||
|
ReflectionUtils.makeAccessible(ctor);
|
||||||
return ctor.newInstance(source);
|
return ctor.newInstance(source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.core.convert.support;
|
package org.springframework.core.convert.converter;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -49,8 +49,7 @@ import org.springframework.core.MethodParameter;
|
|||||||
import org.springframework.core.convert.ConversionFailedException;
|
import org.springframework.core.convert.ConversionFailedException;
|
||||||
import org.springframework.core.convert.ConverterNotFoundException;
|
import org.springframework.core.convert.ConverterNotFoundException;
|
||||||
import org.springframework.core.convert.TypeDescriptor;
|
import org.springframework.core.convert.TypeDescriptor;
|
||||||
import org.springframework.core.convert.converter.Converter;
|
import org.springframework.core.convert.support.DefaultConversionService;
|
||||||
import org.springframework.core.convert.converter.ConverterRegistry;
|
|
||||||
import org.springframework.tests.Assume;
|
import org.springframework.tests.Assume;
|
||||||
import org.springframework.tests.TestGroup;
|
import org.springframework.tests.TestGroup;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
@@ -60,16 +59,16 @@ import static org.hamcrest.Matchers.*;
|
|||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unit tests for the {@link DefaultConversionService}.
|
* Unit tests for {@link DefaultConversionService}.
|
||||||
*
|
*
|
||||||
* <p>For tests involving the {@link GenericConversionService}, see
|
* <p>In this package for enforcing accessibility checks to non-public classes outside
|
||||||
* {@link GenericConversionServiceTests}.
|
* 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 Keith Donald
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
* @author Sam Brannen
|
* @author Sam Brannen
|
||||||
* @see GenericConversionServiceTests
|
|
||||||
*/
|
*/
|
||||||
public class DefaultConversionServiceTests {
|
public class DefaultConversionServiceTests {
|
||||||
|
|
||||||
@@ -243,22 +242,22 @@ public class DefaultConversionServiceTests {
|
|||||||
public void testEnumToString() {
|
public void testEnumToString() {
|
||||||
assertEquals("BAR", conversionService.convert(Foo.BAR, String.class));
|
assertEquals("BAR", conversionService.convert(Foo.BAR, String.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIntegerToEnum() throws Exception {
|
public void testIntegerToEnum() throws Exception {
|
||||||
assertEquals(Foo.BAR, conversionService.convert(0, Foo.class));
|
assertEquals(Foo.BAR, conversionService.convert(0, Foo.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIntegerToEnumWithSubclass() throws Exception {
|
public void testIntegerToEnumWithSubclass() throws Exception {
|
||||||
assertEquals(SubFoo.BAZ, conversionService.convert(1, SubFoo.BAR.getClass()));
|
assertEquals(SubFoo.BAZ, conversionService.convert(1, SubFoo.BAR.getClass()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIntegerToEnumNull() {
|
public void testIntegerToEnumNull() {
|
||||||
assertEquals(null, conversionService.convert(null, Foo.class));
|
assertEquals(null, conversionService.convert(null, Foo.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testEnumToInteger() {
|
public void testEnumToInteger() {
|
||||||
assertEquals(Integer.valueOf(0), conversionService.convert(Foo.BAR, Integer.class));
|
assertEquals(Integer.valueOf(0), conversionService.convert(Foo.BAR, Integer.class));
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2015 the original author or authors.
|
* Copyright 2002-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -54,17 +54,15 @@ import static org.hamcrest.Matchers.*;
|
|||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unit tests for the {@link GenericConversionService}.
|
* Unit tests for {@link GenericConversionService}.
|
||||||
*
|
*
|
||||||
* <p>For tests involving the {@link DefaultConversionService}, see
|
* <p>In this package for access to package-local converter implementations.
|
||||||
* {@link DefaultConversionServiceTests}.
|
|
||||||
*
|
*
|
||||||
* @author Keith Donald
|
* @author Keith Donald
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
* @author David Haraburda
|
* @author David Haraburda
|
||||||
* @author Sam Brannen
|
* @author Sam Brannen
|
||||||
* @see DefaultConversionServiceTests
|
|
||||||
*/
|
*/
|
||||||
public class GenericConversionServiceTests {
|
public class GenericConversionServiceTests {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user