From bc1f19ce18e9ad35d8127048737d6e6e9c276eb3 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 19 Jun 2014 21:14:43 +0200 Subject: [PATCH] Defensively check javaUtilOptionalEmpty Issue: SPR-11888 --- .../springframework/beans/TypeConverterDelegate.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java b/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java index 1bb2c088c1..d34d8011b5 100644 --- a/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java +++ b/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java @@ -60,7 +60,8 @@ class TypeConverterDelegate { try { Class clazz = ClassUtils.forName("java.util.Optional", TypeConverterDelegate.class.getClassLoader()); javaUtilOptionalEmpty = ClassUtils.getMethod(clazz, "empty").invoke(null); - } catch (Exception ex) { + } + catch (Exception ex) { // Java 8 not available - conversion to Optional not supported then. } } @@ -257,8 +258,11 @@ class TypeConverterDelegate { standardConversion = true; } } - else if (requiredType.equals(javaUtilOptionalEmpty.getClass())) { - convertedValue = javaUtilOptionalEmpty; + else { + // convertedValue == null + if (javaUtilOptionalEmpty != null && requiredType.equals(javaUtilOptionalEmpty.getClass())) { + convertedValue = javaUtilOptionalEmpty; + } } if (!ClassUtils.isAssignableValue(requiredType, convertedValue)) {