XWorkMapPropertyAccessor always create new map entries
------------------------------------------------------

                 Key: WW-3603
                 URL: https://issues.apache.org/jira/browse/WW-3603
             Project: Struts 2
          Issue Type: Bug
    Affects Versions: 2.2.1
            Reporter: Igor Evgrafov


{{XWorkMapPropertyAccessor}} uses 
{{context.get(ReflectionContextState.CREATE_NULL_OBJECTS) != null}} to check if 
it in create new objects mode.
{code}
            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) {

                }

            }
{code}

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.

{code:title=com.opensymphony.xwork2.interceptor.ParametersInterceptor}
                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);
                }
{code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to