diff --git a/pom.xml b/pom.xml index 358355750..964377677 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ 2.0.4 2.11.7 - 2.1.0-RC.1 + 2.2.17 1.4.8 diff --git a/src/main/java/org/springframework/data/convert/DefaultTypeMapper.java b/src/main/java/org/springframework/data/convert/DefaultTypeMapper.java index f5e8a2434..ed307b39f 100644 --- a/src/main/java/org/springframework/data/convert/DefaultTypeMapper.java +++ b/src/main/java/org/springframework/data/convert/DefaultTypeMapper.java @@ -126,21 +126,11 @@ public class DefaultTypeMapper implements TypeMapper { Assert.notNull(basicType, "Basic type must not be null!"); Optional> calculated = getDefaultedTypeToBeUsed(source)// - .map(it -> foo(it, basicType)); + .map(it -> specializeOrDefault(it, basicType)); return calculated.orElse(basicType); } - // @SuppressWarnings("unchecked") - private static TypeInformation foo(Class sourceType, TypeInformation type) { - - return specializeOrDefault(sourceType, type); - - // return type// - // .>map(it -> specializeOrDefault(sourceType, it)) - // .orElseGet(() -> (TypeInformation) ClassTypeInformation.from(sourceType)); - } - private static TypeInformation specializeOrDefault(Class it, TypeInformation type) { ClassTypeInformation targetType = ClassTypeInformation.from(it); @@ -157,7 +147,10 @@ public class DefaultTypeMapper implements TypeMapper { * @return */ private Optional> getDefaultedTypeToBeUsed(S source) { - return readType(source).map(it -> readType(source)).orElseGet(() -> getFallbackTypeFor(source)) + + return readType(source)// + .map(it -> readType(source))// + .orElseGet(() -> getFallbackTypeFor(source))// .map(it -> it.getType()); } diff --git a/src/main/java/org/springframework/data/convert/ReflectionEntityInstantiator.java b/src/main/java/org/springframework/data/convert/ReflectionEntityInstantiator.java index 199ac9251..ebd4198dc 100644 --- a/src/main/java/org/springframework/data/convert/ReflectionEntityInstantiator.java +++ b/src/main/java/org/springframework/data/convert/ReflectionEntityInstantiator.java @@ -16,6 +16,7 @@ package org.springframework.data.convert; import java.lang.reflect.Array; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -47,12 +48,18 @@ public enum ReflectionEntityInstantiator implements EntityInstantiator { List params = Optional.ofNullable(provider)// .map(it -> constructor.getParameters().stream()// - .map(parameter -> it.getParameterValue(parameter).orElse(null))// + .map(parameter -> it.getParameterValue(parameter).orElse(Optional.empty()))// .collect(Collectors.toList()))// .orElseGet(() -> Collections.emptyList()); + List foo = new ArrayList<>(params.size()); + + for (Object element : params) { + foo.add((element instanceof Optional) ? null : element); + } + try { - return (T) BeanUtils.instantiateClass(constructor.getConstructor(), params.toArray()); + return (T) BeanUtils.instantiateClass(constructor.getConstructor(), foo.toArray()); } catch (BeanInstantiationException e) { throw new MappingInstantiationException(Optional.of(entity), params, e); }