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;
+        }
+    }
+}


Reply via email to