You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Lukasz Lenart (JIRA)" <ji...@apache.org> on 2013/03/25 22:13:15 UTC
[jira] [Updated] (WW-3603) XWorkMapPropertyAccessor always create
new map entries
[ https://issues.apache.org/jira/browse/WW-3603?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lukasz Lenart updated WW-3603:
------------------------------
Description:
XWorkMapPropertyAccessor uses "context.get(ReflectionContextState.CREATE_NULL_OBJECTS) != null" to check if it in create new objects mode.
{code:java}
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 and result bean is always created.
{code:java}
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}
was:
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);
}
==================
> 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
> Fix For: 3.0
>
>
> XWorkMapPropertyAccessor uses "context.get(ReflectionContextState.CREATE_NULL_OBJECTS) != null" to check if it in create new objects mode.
> {code:java}
> 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 and result bean is always created.
> {code:java}
> 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.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira