Repository: incubator-juneau Updated Branches: refs/heads/master 46f0645bb -> a8d50ab1f
Standardize XML on _type attributes for JSON and bean types. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/a8d50ab1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/a8d50ab1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/a8d50ab1 Branch: refs/heads/master Commit: a8d50ab1f74482f08636ca56f9b27bffdb4af483 Parents: 46f0645 Author: jamesbognar <[email protected]> Authored: Sat Sep 10 15:15:19 2016 -0400 Committer: jamesbognar <[email protected]> Committed: Sat Sep 10 15:15:19 2016 -0400 ---------------------------------------------------------------------- .../apache/juneau/internal/VersionRange.java | 1 - .../java/org/apache/juneau/xml/XmlParser.java | 19 +++++++++++-------- .../apache/juneau/xml/XmlSchemaSerializer.java | 10 ++-------- .../org/apache/juneau/xml/XmlSerializer.java | 13 ++++--------- .../apache/juneau/html/CommonParserTest.java | 1 - .../juneau/msgpack/MsgPackSerialzierTest.java | 3 --- .../juneau/transforms/CalendarSwapTest.java | 2 +- .../juneau/transforms/ReaderFilterTest.java | 2 +- .../org/apache/juneau/xml/CommonParserTest.java | 20 ++++++++++---------- .../java/org/apache/juneau/xml/XmlTest.java | 8 ++++---- .../resources/xml/testComparisonWithJson.xml | 10 +++++----- .../src/test/resources/xml/testNamespaces.xml | 10 +++++----- 12 files changed, 43 insertions(+), 56 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/main/java/org/apache/juneau/internal/VersionRange.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/VersionRange.java b/juneau-core/src/main/java/org/apache/juneau/internal/VersionRange.java index c89e038..e7dc46c 100644 --- a/juneau-core/src/main/java/org/apache/juneau/internal/VersionRange.java +++ b/juneau-core/src/main/java/org/apache/juneau/internal/VersionRange.java @@ -41,7 +41,6 @@ public class VersionRange { int c = range.indexOf(','); if (c > -1 && (c1 == '[' || c1 == '(') && (c2 == ']' || c2 == ')')) { String v1 = range.substring(1, c), v2 = range.substring(c+1, range.length()-1); - //System.err.println("v1=["+v1+"], v2=["+v2+"]"); minVersion = new Version(v1); maxVersion = new Version(v2); minExclusive = c1 == '('; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java index f066c84..4b9b8f7 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java @@ -73,23 +73,26 @@ public class XmlParser extends ReaderParser { BeanDictionary bd = (pMeta == null ? bc.getBeanDictionary() : pMeta.getBeanDictionary()); String wrapperAttr = (isRoot && session.isPreserveRootElement()) ? r.getName().getLocalPart() : null; - String typeAttr = r.getAttributeValue(null, "type"); + String typeAttr = r.getAttributeValue(null, bc.getBeanTypePropertyName()); int jsonType = getJsonType(typeAttr); String b = r.getAttributeValue(session.getXsiNs(), "nil"); if (b == null) b = r.getAttributeValue(null, "nil"); boolean isNull = b != null && b.equals("true"); + String elementName = session.decodeString(r.getLocalName()); if (jsonType == 0) { - String elementName = session.decodeString(r.getLocalName()); if (elementName == null || elementName.equals(currAttr)) jsonType = UNKNOWN; - else + else { + typeAttr = elementName; jsonType = getJsonType(elementName); + } } if (! sType.canCreateNewInstance(outer)) { - String c = r.getAttributeValue(null, bc.getBeanTypePropertyName()); - if (c != null) { - sType = eType = (ClassMeta<T>)bc.getClassMetaFromString(c); + if (bd.hasName(typeAttr)) { + sType = eType = (ClassMeta<T>)bd.getClassMeta(typeAttr); + } else if (bd.hasName(elementName)) { + sType = eType = (ClassMeta<T>)bd.getClassMeta(elementName); } } Object o = null; @@ -186,7 +189,7 @@ public class XmlParser extends ReaderParser { for (int i = 0; i < r.getAttributeCount(); i++) { String a = r.getAttributeLocalName(i); // TODO - Need better handling of namespaces here. - if (! (a.equals("type"))) { + if (! (a.equals(bc.getBeanTypePropertyName()))) { K key = session.trim(convertAttrToType(session, m, a, keyType)); V value = session.trim(convertAttrToType(session, m, r.getAttributeValue(i), valueType)); setName(valueType, value, key); @@ -374,7 +377,7 @@ public class XmlParser extends ReaderParser { for (int i = 0; i < r.getAttributeCount(); i++) { String key = session.decodeString(r.getAttributeLocalName(i)); String val = r.getAttributeValue(i); - if (! key.equals("type")) + if (! key.equals(bc.getBeanTypePropertyName())) m.put(key, val); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java index 601e9e5..50dcfdc 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java @@ -354,7 +354,7 @@ public class XmlSchemaSerializer extends XmlSerializer { if (session.isAddJsonTypeAttrs() || (session.isAddJsonStringTypeAttrs() && base.equals("string"))) { w.cTag().nl(); w.oTag(i+3, "attribute") - .attr("name", "type") + .attr("name", bc.getBeanTypePropertyName()) .attr("type", "string") .ceTag().nl(); w.eTag(i+2, "extension").nl(); @@ -492,18 +492,12 @@ public class XmlSchemaSerializer extends XmlSerializer { w.eTag(i+1, "sequence").nl(); } - if (session.isAddBeanTypeProperties()) { + if (session.isAddBeanTypeProperties() || session.isAddJsonTypeAttrs()) { w.oTag(i+1, "attribute") .attr("name", bc.getBeanTypePropertyName()) .attr("type", "string") .ceTag().nl(); } - if (session.isAddJsonTypeAttrs()) { - w.oTag(i+1, "attribute") - .attr("name", "type") - .attr("type", "string") - .ceTag().nl(); - } } w.eTag(i, "complexType").nl(); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java index 32f618e..b3e6b83 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java @@ -343,9 +343,7 @@ public class XmlSerializer extends WriterSerializer { String typeName = null; if (session.isAddBeanTypeProperties()) { if (o != null && ! eType.equals(aType)) - typeName = aType.toString(); - else if (o == null) - typeName = eType.toString(); + typeName = aType.getDictionaryName(); } // char '\0' is interpreted as null. @@ -372,12 +370,9 @@ public class XmlSerializer extends WriterSerializer { else ts = "string"; - // Is there a name associated with this bean? if (elementName == null) elementName = sType.getDictionaryName(); - if (elementName == null) - elementName = aType.getDictionaryName(); // If the value is null then it's either going to be <null/> or <XmlSerializer nil='true'/> // depending on whether the element has a name. @@ -427,9 +422,9 @@ public class XmlSerializer extends WriterSerializer { if (xsiNs != null) out.attr("xmlns", xsiNs.name, xsiNs.uri); } - if (elementName != null && session.isAddJsonTypeAttrs() && (session.isAddJsonStringTypeAttrs() || ! ts.equals("string"))) - out.attr(dns, "type", ts); - if (typeName != null) + if (typeName == null && elementName != null && session.isAddJsonTypeAttrs() && (session.isAddJsonStringTypeAttrs() || ! ts.equals("string"))) + typeName = ts; + if (typeName != null && ! typeName.equals(elementName)) out.attr(dns, bc.getBeanTypePropertyName(), typeName); if (o == null) { if (! isNullTag) http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/test/java/org/apache/juneau/html/CommonParserTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/html/CommonParserTest.java b/juneau-core/src/test/java/org/apache/juneau/html/CommonParserTest.java index ca1da18..abc948f 100755 --- a/juneau-core/src/test/java/org/apache/juneau/html/CommonParserTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/html/CommonParserTest.java @@ -66,7 +66,6 @@ public class CommonParserTest { t2.add(new A3("name1","value1")); t1.list = t2; in = new HtmlSerializer().setProperty(SERIALIZER_addBeanTypeProperties, true).serialize(t1); - System.err.println(in); t1 = (A1)p.parse(in, Object.class); assertEquals("value1", t1.list.get(1).value); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/test/java/org/apache/juneau/msgpack/MsgPackSerialzierTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/msgpack/MsgPackSerialzierTest.java b/juneau-core/src/test/java/org/apache/juneau/msgpack/MsgPackSerialzierTest.java index f90bced..450d7ee 100755 --- a/juneau-core/src/test/java/org/apache/juneau/msgpack/MsgPackSerialzierTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/msgpack/MsgPackSerialzierTest.java @@ -201,9 +201,6 @@ public class MsgPackSerialzierTest { test(new ObjectMap("{1:1}"), "81 A1 31 01"); test(new ObjectMap("{1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,a:1,b:1,c:1,d:1,e:1,f:1}"), "8F A1 31 01 A1 32 01 A1 33 01 A1 34 01 A1 35 01 A1 36 01 A1 37 01 A1 38 01 A1 39 01 A1 61 01 A1 62 01 A1 63 01 A1 64 01 A1 65 01 A1 66 01"); test(new ObjectMap("{1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,a:1,b:1,c:1,d:1,e:1,f:1,g:1}"), "DE 00 10 A1 31 01 A1 32 01 A1 33 01 A1 34 01 A1 35 01 A1 36 01 A1 37 01 A1 38 01 A1 39 01 A1 61 01 A1 62 01 A1 63 01 A1 64 01 A1 65 01 A1 66 01 A1 67 01"); - - byte[] b = MsgPackSerializer.DEFAULT.serialize(new Person()); - System.err.println(TestUtils.toReadableBytes2(b)); } public static class Person { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java b/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java index df82751..e989d98 100755 --- a/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java @@ -419,7 +419,7 @@ public class CalendarSwapTest { Class<?> f = CalendarMapSwap.class; WriterSerializer s = new XmlSerializer.SimpleXmlJsonSq().addPojoSwaps(f); ReaderParser p = new XmlParser().addPojoSwaps(f); - doTest(s, p, true, "<object><time type='number'>-2172116928000</time><timeZone>PST</timeZone></object>"); + doTest(s, p, true, "<object><time _type='number'>-2172116928000</time><timeZone>PST</timeZone></object>"); } //==================================================================================================== http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/test/java/org/apache/juneau/transforms/ReaderFilterTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/transforms/ReaderFilterTest.java b/juneau-core/src/test/java/org/apache/juneau/transforms/ReaderFilterTest.java index 99dbf35..0398568 100755 --- a/juneau-core/src/test/java/org/apache/juneau/transforms/ReaderFilterTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/transforms/ReaderFilterTest.java @@ -40,7 +40,7 @@ public class ReaderFilterTest { assertEquals("{X:{foo:'bar',baz:'quz'}}", s.serialize(m)); s.addPojoSwaps(ReaderSwap.Xml.class); - r = new StringReader("<object><foo type='string'>bar</foo><baz type='string'>quz</baz></object>"); + r = new StringReader("<object><foo _type='string'>bar</foo><baz _type='string'>quz</baz></object>"); m = new HashMap<String,Object>(); m.put("X", r); assertEquals("{X:{foo:'bar',baz:'quz'}}", s.serialize(m)); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java b/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java index d9520e1..7081e83 100755 --- a/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java @@ -32,20 +32,20 @@ public class CommonParserTest { ReaderParser p = XmlParser.DEFAULT; Map m = null; - m = (Map)p.parse("<object><a type='number'>1</a></object>", Object.class); + m = (Map)p.parse("<object><a _type='number'>1</a></object>", Object.class); assertEquals(1, m.get("a")); - m = (Map)p.parse("<object><a type='number'>1</a><b type='string'>foo bar</b></object>", Object.class); + m = (Map)p.parse("<object><a _type='number'>1</a><b _type='string'>foo bar</b></object>", Object.class); assertEquals(1, m.get("a")); assertEquals("foo bar", m.get("b")); - m = (Map)p.parse("<object><a type='number'>1</a><b type='string'>foo bar</b><c type='boolean'>false</c></object>", Object.class); + m = (Map)p.parse("<object><a _type='number'>1</a><b _type='string'>foo bar</b><c _type='boolean'>false</c></object>", Object.class); assertEquals(1, m.get("a")); assertEquals(false, m.get("c")); - m = (Map)p.parse(" <object> <a type='number'> 1 </a> <b type='string'> foo </b> <c type='boolean'> false </c> </object> ", Object.class); + m = (Map)p.parse(" <object> <a _type='number'> 1 </a> <b _type='string'> foo </b> <c _type='boolean'> false </c> </object> ", Object.class); assertEquals(1, m.get("a")); assertEquals("foo", m.get("b")); assertEquals(false, m.get("c")); - m = (Map)p.parse("<object><x type='string'>org.apache.juneau.test.Person</x><addresses type='array'><object><x type='string'>org.apache.juneau.test.Address</x><city type='string'>city A</city><state type='string'>state A</state><street type='string'>street A</street><zip type='number'>12345</zip></object></addresses></object>", Object.class); + m = (Map)p.parse("<object><x _type='string'>org.apache.juneau.test.Person</x><addresses _type='array'><object><x _type='string'>org.apache.juneau.test.Address</x><city _type='string'>city A</city><state _type='string'>state A</state><street _type='string'>street A</street><zip _type='number'>12345</zip></object></addresses></object>", Object.class); assertEquals("org.apache.juneau.test.Person", m.get("x")); List l = (List)m.get("addresses"); assertNotNull(l); @@ -57,12 +57,12 @@ public class CommonParserTest { assertEquals("street A", m.get("street")); assertEquals(12345, m.get("zip")); - ObjectList jl = (ObjectList)p.parse("<array><object><attribute type='string'>value</attribute></object><object><attribute type='string'>value</attribute></object></array>", Object.class); + ObjectList jl = (ObjectList)p.parse("<array><object><attribute _type='string'>value</attribute></object><object><attribute _type='string'>value</attribute></object></array>", Object.class); assertEquals("value", jl.getObjectMap(0).getString("attribute")); assertEquals("value", jl.getObjectMap(1).getString("attribute")); try { - jl = (ObjectList)p.parse("<array><object><attribute type='string'>value</attribute></object><object><attribute type='string'>value</attribute></object></array>", Object.class); + jl = (ObjectList)p.parse("<array><object><attribute _type='string'>value</attribute></object><object><attribute _type='string'>value</attribute></object></array>", Object.class); assertEquals("value", jl.getObjectMap(0).getString("attribute")); assertEquals("value", jl.getObjectMap(1).getString("attribute")); } catch (Exception e) { @@ -112,7 +112,7 @@ public class CommonParserTest { assertEquals(t.a, 1); assertEquals(t.b, 2); - in = "<object><a>1</a><unknown><object><a type='string'>foo</a></object></unknown><b>2</b></object>"; + in = "<object><a>1</a><unknown><object><a _type='string'>foo</a></object></unknown><b>2</b></object>"; t = p.parse(in, B.class); assertEquals(t.a, 1); assertEquals(t.b, 2); @@ -137,7 +137,7 @@ public class CommonParserTest { ReaderParser p = XmlParser.DEFAULT; - String in = "<object><ints type='array'><number>1</number><number>2</number><number>3</number></ints><beans type='array'><object><a type='number'>1</a><b type='number'>2</b></object></beans></object>"; + String in = "<object><ints _type='array'><number>1</number><number>2</number><number>3</number></ints><beans _type='array'><object><a _type='number'>1</a><b _type='number'>2</b></object></beans></object>"; C t = p.parse(in, C.class); assertEquals(t.getInts().size(), 3); assertEquals(t.getBeans().get(0).b, 2); @@ -170,7 +170,7 @@ public class CommonParserTest { } ); - String in = "<object><a type='number'>1</a><unknownProperty type='string'>foo</unknownProperty><b type='number'>2</b></object>"; + String in = "<object><a _type='number'>1</a><unknownProperty _type='string'>foo</unknownProperty><b _type='number'>2</b></object>"; p.parse(in, B.class); assertEquals(1, events.size()); // XML parser may or may not support line numbers. http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/test/java/org/apache/juneau/xml/XmlTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/XmlTest.java b/juneau-core/src/test/java/org/apache/juneau/xml/XmlTest.java index 3c8b371..5272651 100755 --- a/juneau-core/src/test/java/org/apache/juneau/xml/XmlTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/xml/XmlTest.java @@ -73,9 +73,9 @@ public class XmlTest { @Test public void testBeanNameAnnotation() throws Exception { String e = - "<Person1 type='object'>\n" + "<Person1 _type='object'>\n" + " <name>John Smith</name>\n" - + " <age type='number'>123</age>\n" + + " <age _type='number'>123</age>\n" + "</Person1>\n"; String r = new XmlSerializer.SimpleXmlJsonSq().setProperty(SERIALIZER_useIndentation, true).serialize(new Person1("John Smith", 123)); assertEquals(e, r); @@ -104,8 +104,8 @@ public class XmlTest { @Test public void testTrimNulls() throws Exception { String e = - "<Person1 type='object'>\n" - + " <age type='number'>123</age>\n" + "<Person1 _type='object'>\n" + + " <age _type='number'>123</age>\n" + "</Person1>\n"; String r = new XmlSerializer.SimpleXmlJsonSq().setProperty(SERIALIZER_useIndentation, true).serialize(new Person1(null, 123)); assertEquals(e, r); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/test/resources/xml/testComparisonWithJson.xml ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/resources/xml/testComparisonWithJson.xml b/juneau-core/src/test/resources/xml/testComparisonWithJson.xml index b79f07a..8994736 100755 --- a/juneau-core/src/test/resources/xml/testComparisonWithJson.xml +++ b/juneau-core/src/test/resources/xml/testComparisonWithJson.xml @@ -15,18 +15,18 @@ --> <object> <name>John Smith</name> - <address type='object'> + <address _type='object'> <streetAddress>21 2nd Street</streetAddress> <city>New York</city> <state>NY</state> - <postalCode type='number'>10021</postalCode> + <postalCode _type='number'>10021</postalCode> </address> - <phoneNumbers type='array'> + <phoneNumbers _type='array'> <string>212 555-1111</string> <string>212 555-2222</string> </phoneNumbers> <additionalInfo nil='true'/> - <remote type='boolean'>false</remote> - <height type='number'>62.4</height> + <remote _type='boolean'>false</remote> + <height _type='number'>62.4</height> <fico_x0020_score>_x0020_> 640</fico_x0020_score> </object> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/a8d50ab1/juneau-core/src/test/resources/xml/testNamespaces.xml ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/resources/xml/testNamespaces.xml b/juneau-core/src/test/resources/xml/testNamespaces.xml index b09313e..17026fb 100755 --- a/juneau-core/src/test/resources/xml/testNamespaces.xml +++ b/juneau-core/src/test/resources/xml/testNamespaces.xml @@ -15,18 +15,18 @@ --> <object xmlns='http://www.ibm.com' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> <name>John Smith</name> - <address type='object'> + <address _type='object'> <streetAddress>21 2nd Street</streetAddress> <city>New York</city> <state>NY</state> - <postalCode type='number'>10021</postalCode> + <postalCode _type='number'>10021</postalCode> </address> - <phoneNumbers type='array'> + <phoneNumbers _type='array'> <string>212 555-1111</string> <string>212 555-2222</string> </phoneNumbers> <additionalInfo xsi:nil='true'/> - <remote type='boolean'>false</remote> - <height type='number'>62.4</height> + <remote _type='boolean'>false</remote> + <height _type='number'>62.4</height> <fico_x0020_score>_x0020_> 640</fico_x0020_score> </object>
