Skip to content

Commit 08597c9

Browse files
committed
Recreate SimpleTypeConverter if ConversionService not set
Closes gh-315
1 parent 982cbba commit 08597c9

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

spring-graphql/src/main/java/org/springframework/graphql/data/GraphQlArgumentInitializer.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,29 @@
4747
*/
4848
public class GraphQlArgumentInitializer {
4949

50+
@Nullable
5051
private final SimpleTypeConverter typeConverter;
5152

5253

5354
public GraphQlArgumentInitializer(@Nullable ConversionService conversionService) {
54-
this.typeConverter = new SimpleTypeConverter();
55-
this.typeConverter.setConversionService(conversionService);
55+
if (conversionService != null) {
56+
this.typeConverter = new SimpleTypeConverter();
57+
this.typeConverter.setConversionService(conversionService);
58+
}
59+
else {
60+
// Not thread-safe when using PropertyEditors
61+
this.typeConverter = null;
62+
}
63+
}
64+
65+
66+
private SimpleTypeConverter getTypeConverter() {
67+
return (this.typeConverter != null ? this.typeConverter : new SimpleTypeConverter());
68+
}
69+
70+
@Nullable
71+
private ConversionService getConversionService() {
72+
return (this.typeConverter != null ? this.typeConverter.getConversionService() : null);
5673
}
5774

5875

@@ -108,7 +125,7 @@ public Object initializeArgument(
108125
return wrapAsOptionalIfNecessary(sourceValue, targetType);
109126
}
110127

111-
Object target = this.typeConverter.convertIfNecessary(sourceValue, targetClass);
128+
Object target = getTypeConverter().convertIfNecessary(sourceValue, targetClass);
112129
if (target == null) {
113130
throw new IllegalStateException("Cannot convert argument value " +
114131
"type [" + sourceValue.getClass().getName() + "] to method parameter " +
@@ -145,7 +162,7 @@ else if (item instanceof Map) {
145162
collection.add((T) this.initializeFromMap((Map<String, Object>) item, elementClass));
146163
}
147164
else {
148-
collection.add(this.typeConverter.convertIfNecessary(item, elementClass));
165+
collection.add(getTypeConverter().convertIfNecessary(item, elementClass));
149166
}
150167
}
151168
return collection;
@@ -166,7 +183,7 @@ private Object initializeFromMap(Map<String, Object> arguments, Class<?> targetT
166183
MutablePropertyValues propertyValues = extractPropertyValues(arguments);
167184
target = BeanUtils.instantiateClass(ctor);
168185
DataBinder dataBinder = new DataBinder(target);
169-
dataBinder.setConversionService(this.typeConverter.getConversionService());
186+
dataBinder.setConversionService(getConversionService());
170187
dataBinder.bind(propertyValues);
171188
return target;
172189
}
@@ -193,7 +210,7 @@ else if (value instanceof Map) {
193210
args[i] = this.initializeFromMap((Map<String, Object>) value, methodParameter.getParameterType());
194211
}
195212
else {
196-
args[i] = this.typeConverter.convertIfNecessary(value, paramTypes[i], methodParameter);
213+
args[i] = getTypeConverter().convertIfNecessary(value, paramTypes[i], methodParameter);
197214
}
198215
}
199216

0 commit comments

Comments
 (0)