47
47
*/
48
48
public class GraphQlArgumentInitializer {
49
49
50
+ @ Nullable
50
51
private final SimpleTypeConverter typeConverter ;
51
52
52
53
53
54
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 );
56
73
}
57
74
58
75
@@ -108,7 +125,7 @@ public Object initializeArgument(
108
125
return wrapAsOptionalIfNecessary (sourceValue , targetType );
109
126
}
110
127
111
- Object target = this . typeConverter .convertIfNecessary (sourceValue , targetClass );
128
+ Object target = getTypeConverter () .convertIfNecessary (sourceValue , targetClass );
112
129
if (target == null ) {
113
130
throw new IllegalStateException ("Cannot convert argument value " +
114
131
"type [" + sourceValue .getClass ().getName () + "] to method parameter " +
@@ -145,7 +162,7 @@ else if (item instanceof Map) {
145
162
collection .add ((T ) this .initializeFromMap ((Map <String , Object >) item , elementClass ));
146
163
}
147
164
else {
148
- collection .add (this . typeConverter .convertIfNecessary (item , elementClass ));
165
+ collection .add (getTypeConverter () .convertIfNecessary (item , elementClass ));
149
166
}
150
167
}
151
168
return collection ;
@@ -166,7 +183,7 @@ private Object initializeFromMap(Map<String, Object> arguments, Class<?> targetT
166
183
MutablePropertyValues propertyValues = extractPropertyValues (arguments );
167
184
target = BeanUtils .instantiateClass (ctor );
168
185
DataBinder dataBinder = new DataBinder (target );
169
- dataBinder .setConversionService (this . typeConverter . getConversionService ());
186
+ dataBinder .setConversionService (getConversionService ());
170
187
dataBinder .bind (propertyValues );
171
188
return target ;
172
189
}
@@ -193,7 +210,7 @@ else if (value instanceof Map) {
193
210
args [i ] = this .initializeFromMap ((Map <String , Object >) value , methodParameter .getParameterType ());
194
211
}
195
212
else {
196
- args [i ] = this . typeConverter .convertIfNecessary (value , paramTypes [i ], methodParameter );
213
+ args [i ] = getTypeConverter () .convertIfNecessary (value , paramTypes [i ], methodParameter );
197
214
}
198
215
}
199
216
0 commit comments