Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.2.1
-
None
-
None
Description
XWorkMapPropertyAccessor uses "context.get(ReflectionContextState.CREATE_NULL_OBJECTS) != null" to check if it in create new objects mode.
if (result == null && context.get(ReflectionContextState.CREATE_NULL_OBJECTS) != null //BUG && objectTypeDeterminer.shouldCreateIfNew(lastClass,lastProperty,target,null,false)) { Class valueClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, key); try { result = objectFactory.buildBean(valueClass, context); map.put(key, result); } catch (Exception exc) { } }
However ParametersInterceptor uses ReflectionContextState.setCreatingNullObjects(contextMap, true\false); to turn this mode on and off. In result "context.get(ReflectionContextState.CREATE_NULL_OBJECTS) != null" is always true and result bean is always created.
Map<String, Object> contextMap = ac.getContextMap(); try { ReflectionContextState.setCreatingNullObjects(contextMap, true); ReflectionContextState.setDenyMethodExecution(contextMap, true); ReflectionContextState.setReportingConversionErrors(contextMap, true); ValueStack stack = ac.getValueStack(); setParameters(action, stack, parameters); } finally { ReflectionContextState.setCreatingNullObjects(contextMap, false); ReflectionContextState.setDenyMethodExecution(contextMap, false); ReflectionContextState.setReportingConversionErrors(contextMap, false); }