Author: lukaszlenart
Date: Thu Oct 17 06:11:32 2013
New Revision: 1532974
URL: http://svn.apache.org/r1532974
Log:
WW-3603 Prevents creating new map entries
Added:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkMapPropertyAccessorTest.java
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkMapPropertyAccessor.java
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkMapPropertyAccessor.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkMapPropertyAccessor.java?rev=1532974&r1=1532973&r2=1532974&view=diff
==============================================================================
---
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkMapPropertyAccessor.java
(original)
+++
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkMapPropertyAccessor.java
Thu Oct 17 06:11:32 2013
@@ -95,7 +95,7 @@ public class XWorkMapPropertyAccessor ex
result = map.get(key);
if (result == null &&
- context.get(ReflectionContextState.CREATE_NULL_OBJECTS) !=
null
+
Boolean.TRUE.equals(context.get(ReflectionContextState.CREATE_NULL_OBJECTS))
&&
objectTypeDeterminer.shouldCreateIfNew(lastClass,lastProperty,target,null,false))
{
Class valueClass =
objectTypeDeterminer.getElementClass(lastClass, lastProperty, key);
Added:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkMapPropertyAccessorTest.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkMapPropertyAccessorTest.java?rev=1532974&view=auto
==============================================================================
---
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkMapPropertyAccessorTest.java
(added)
+++
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkMapPropertyAccessorTest.java
Thu Oct 17 06:11:32 2013
@@ -0,0 +1,54 @@
+package com.opensymphony.xwork2.ognl.accessor;
+
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.XWorkTestCase;
+import com.opensymphony.xwork2.util.Element;
+import com.opensymphony.xwork2.util.ValueStack;
+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
+
+import java.util.Collections;
+import java.util.Map;
+
+public class XWorkMapPropertyAccessorTest extends XWorkTestCase {
+ public void testCreateNullObjectsIsFalseByDefault() {
+ ValueStack vs = ActionContext.getContext().getValueStack();
+ vs.push(new MapHolder(Collections.emptyMap()));
+ assertNull(vs.findValue("map[key]"));
+ }
+
+ public void testMapContentsAreReturned() {
+ ValueStack vs = ActionContext.getContext().getValueStack();
+ vs.push(new MapHolder(Collections.singletonMap("key", "value")));
+ assertEquals("value", vs.findValue("map['key']"));
+ }
+
+ public void testNullIsNotReturnedWhenCreateNullObjectsIsSpecified() {
+ ValueStack vs = ActionContext.getContext().getValueStack();
+ vs.push(new MapHolder(Collections.emptyMap()));
+ ReflectionContextState.setCreatingNullObjects(vs.getContext(), true);
+
+ Object value = vs.findValue("map['key']");
+ assertNotNull(value);
+ assertSame(Object.class, value.getClass());
+ }
+
+ public void testNullIsReturnedWhenCreateNullObjectsIsSpecifiedAsFalse() {
+ ValueStack vs = ActionContext.getContext().getValueStack();
+ vs.push(new MapHolder(Collections.emptyMap()));
+ ReflectionContextState.setCreatingNullObjects(vs.getContext(), false);
+ assertNull(vs.findValue("map['key']"));
+ }
+
+ private static class MapHolder {
+ private final Map map;
+
+ public MapHolder(Map m) {
+ this.map = m;
+ }
+
+ @Element(value = Object.class)
+ public Map getMap() {
+ return map;
+ }
+ }
+}