Author: jafl
Date: Wed Jun  1 00:06:22 2011
New Revision: 1129976

URL: http://svn.apache.org/viewvc?rev=1129976&view=rev
Log:
WW-3489 if excludeNullProperties, ignore nulls in maps

Added:
    
struts/struts2/trunk/plugins/json/src/test/resources/org/apache/struts2/json/jsonwriter-write-bean-03.txt
      - copied, changed from r1129833, 
struts/struts2/trunk/plugins/json/src/test/resources/org/apache/struts2/json/jsonwriter-write-bean-01.txt
Modified:
    
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java
    
struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONWriterTest.java

Modified: 
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java?rev=1129976&r1=1129975&r2=1129976&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java
 (original)
+++ 
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java
 Wed Jun  1 00:06:22 2011
@@ -342,18 +342,18 @@ class JSONWriter {
      * Add name/value pair to buffer
      */
     private boolean add(String name, Object value, Method method, boolean 
hasData) throws JSONException {
-        if (!excludeNullProperties || (value != null)) {
-            if (hasData) {
-                this.add(',');
-            }
-            this.add('"');
-            this.add(name);
-            this.add("\":");
-            this.value(value, method);
-            return true;
+        if (excludeNullProperties && value == null) {
+            return false;
         }
 
-        return false;
+        if (hasData) {
+            this.add(',');
+        }
+        this.add('"');
+        this.add(name);
+        this.add("\":");
+        this.value(value, method);
+        return true;
     }
 
     /**
@@ -368,6 +368,10 @@ class JSONWriter {
         boolean hasData = false;
         while (it.hasNext()) {
             Map.Entry entry = (Map.Entry) it.next();
+            if (excludeNullProperties && entry.getValue() == null) {
+                continue;
+            }
+
             Object key = entry.getKey();
             String expr = null;
             if (this.buildExpr) {

Modified: 
struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONWriterTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONWriterTest.java?rev=1129976&r1=1129975&r2=1129976&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONWriterTest.java
 (original)
+++ 
struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONWriterTest.java
 Wed Jun  1 00:06:22 2011
@@ -5,6 +5,8 @@ import org.apache.struts2.json.annotatio
 import org.apache.struts2.json.bridge.StringBridge;
 import org.junit.Test;
 
+import java.util.Map;
+import java.util.LinkedHashMap;
 import java.net.URL;
 
 public class JSONWriterTest extends StrutsTestCase{
@@ -28,6 +30,44 @@ public class JSONWriterTest extends Stru
     }
 
     @Test
+    public void testWriteExcludeNull() throws Exception {
+        BeanWithMap bean1=new BeanWithMap();
+        bean1.setStringField("str");
+        bean1.setBooleanField(true);
+        bean1.setCharField('s');
+        bean1.setDoubleField(10.1);
+        bean1.setFloatField(1.5f);
+        bean1.setIntField(10);
+        bean1.setLongField(100);
+        bean1.setEnumField(AnEnum.ValueA);
+        bean1.setEnumBean(AnEnumBean.Two);
+
+        Map m = new LinkedHashMap();
+        m.put("a", "x");
+        m.put("b", null);
+        m.put("c", "z");
+        bean1.setMap(m);
+
+        JSONWriter jsonWriter = new JSONWriter();
+        jsonWriter.setEnumAsBean(false);
+        jsonWriter.setIgnoreHierarchy(false);
+        String json = jsonWriter.write(bean1, null, null, true);
+        
TestUtils.assertEquals(JSONWriter.class.getResource("jsonwriter-write-bean-03.txt"),
 json);
+    }
+
+    private class BeanWithMap extends Bean{
+        private Map map;
+
+        public Map getMap() {
+            return map;
+        }
+
+        public void setMap(Map map) {
+            this.map = map;
+        }
+    }
+
+    @Test
     public void testWriteAnnotatedBean() throws Exception {
         AnnotatedBean bean1=new AnnotatedBean();
         bean1.setStringField("str");

Copied: 
struts/struts2/trunk/plugins/json/src/test/resources/org/apache/struts2/json/jsonwriter-write-bean-03.txt
 (from r1129833, 
struts/struts2/trunk/plugins/json/src/test/resources/org/apache/struts2/json/jsonwriter-write-bean-01.txt)
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/test/resources/org/apache/struts2/json/jsonwriter-write-bean-03.txt?p2=struts/struts2/trunk/plugins/json/src/test/resources/org/apache/struts2/json/jsonwriter-write-bean-03.txt&p1=struts/struts2/trunk/plugins/json/src/test/resources/org/apache/struts2/json/jsonwriter-write-bean-01.txt&r1=1129833&r2=1129976&rev=1129976&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/json/src/test/resources/org/apache/struts2/json/jsonwriter-write-bean-01.txt
 (original)
+++ 
struts/struts2/trunk/plugins/json/src/test/resources/org/apache/struts2/json/jsonwriter-write-bean-03.txt
 Wed Jun  1 00:06:22 2011
@@ -1,6 +1,4 @@
 {
-    "bigDecimal":null,
-    "bigInteger":null,
     "booleanField":true,
     "byteField":0,
     "charField":"s",
@@ -10,6 +8,6 @@
     "floatField":1.5,
     "intField":10,
     "longField":100,
-    "objectField":null,
+    "map":{"a":"x","c":"z"},
     "stringField":"str"
 }


Reply via email to