diff --git a/plugins/json/src/main/java/org/apache/struts2/json/JSONPopulator.java b/plugins/json/src/main/java/org/apache/struts2/json/JSONPopulator.java index 67d80f182..52ab35884 100644 --- a/plugins/json/src/main/java/org/apache/struts2/json/JSONPopulator.java +++ b/plugins/json/src/main/java/org/apache/struts2/json/JSONPopulator.java @@ -203,7 +203,9 @@ public class JSONPopulator { newCollection = (Collection) clazz.newInstance(); } catch (InstantiationException ex) { // fallback if clazz represents an interface or abstract class - if (Set.class.isAssignableFrom(clazz)) { + if (SortedSet.class.isAssignableFrom(clazz)) { + newCollection = new TreeSet(); + } else if (Set.class.isAssignableFrom(clazz)) { newCollection = new HashSet(); } else { newCollection = new ArrayList(); diff --git a/plugins/json/src/test/java/org/apache/struts2/json/JSONPopulatorTest.java b/plugins/json/src/test/java/org/apache/struts2/json/JSONPopulatorTest.java index 695912ea1..a5ee9ddd5 100644 --- a/plugins/json/src/test/java/org/apache/struts2/json/JSONPopulatorTest.java +++ b/plugins/json/src/test/java/org/apache/struts2/json/JSONPopulatorTest.java @@ -112,6 +112,21 @@ public class JSONPopulatorTest extends TestCase { assertEquals(2, bean.getArrayMapField()[0].size()); assertEquals(new Long(2073501), bean.getArrayMapField()[0].get("id1")); assertEquals(new Long(3), bean.getArrayMapField()[0].get("id2")); + + assertEquals(3, bean.getSetField().size()); + assertEquals(true, bean.getSetField().contains("A")); + assertEquals(true, bean.getSetField().contains("B")); + assertEquals(true, bean.getSetField().contains("C")); + + assertEquals(3, bean.getSortedSetField().size()); + assertEquals("A", bean.getSortedSetField().first()); + assertEquals(true, bean.getSortedSetField().contains("B")); + assertEquals("C", bean.getSortedSetField().last()); + + assertEquals(3, bean.getNavigableSetField().size()); + assertEquals("A", bean.getNavigableSetField().first()); + assertEquals(true, bean.getNavigableSetField().contains("B")); + assertEquals("C", bean.getNavigableSetField().last()); } public void testObjectBeanWithStrings() throws Exception { diff --git a/plugins/json/src/test/java/org/apache/struts2/json/WrapperClassBean.java b/plugins/json/src/test/java/org/apache/struts2/json/WrapperClassBean.java index 379c6c9d1..96e2fce3b 100644 --- a/plugins/json/src/test/java/org/apache/struts2/json/WrapperClassBean.java +++ b/plugins/json/src/test/java/org/apache/struts2/json/WrapperClassBean.java @@ -20,6 +20,9 @@ package org.apache.struts2.json; import java.util.List; import java.util.Map; +import java.util.NavigableSet; +import java.util.Set; +import java.util.SortedSet; public class WrapperClassBean { @@ -40,6 +43,9 @@ public class WrapperClassBean { private List> listMapField; private Map> mapListField; private Map[] arrayMapField; + private Set setField; + private SortedSet sortedSetField; + private NavigableSet navigableSetField; public List getListField() { return listField; @@ -73,6 +79,30 @@ public class WrapperClassBean { this.arrayMapField = arrayMapField; } + public Set getSetField() { + return setField; + } + + public void setSetField(Set setField) { + this.setField = setField; + } + + public SortedSet getSortedSetField() { + return sortedSetField; + } + + public void setSortedSetField(SortedSet sortedSetField) { + this.sortedSetField = sortedSetField; + } + + public NavigableSet getNavigableSetField() { + return navigableSetField; + } + + public void setNavigableSetField(NavigableSet navigableSetField) { + this.navigableSetField = navigableSetField; + } + public Boolean getBooleanField() { return booleanField; } diff --git a/plugins/json/src/test/resources/org/apache/struts2/json/json-7.txt b/plugins/json/src/test/resources/org/apache/struts2/json/json-7.txt index 3ee1b612a..7d51fda66 100644 --- a/plugins/json/src/test/resources/org/apache/struts2/json/json-7.txt +++ b/plugins/json/src/test/resources/org/apache/struts2/json/json-7.txt @@ -16,5 +16,8 @@ "listField": [{"value":"1"},{"value":"2"}], "listMapField": [{"id1":2073501,"id2":3}], "mapListField": {"id1":[1,2,3],"id2":[4,3,2,1]}, - "arrayMapField": [{"id1":2073501,"id2":3}] + "arrayMapField": [{"id1":2073501,"id2":3}], + "setField": ["A", "C", "B"], + "sortedSetField": ["A", "C", "B"], + "navigableSetField": ["A", "B", "C"] }