Repository: incubator-juneau Updated Branches: refs/heads/master 864893f23 -> f479285a7
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java index 948be20..8b8da03 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java @@ -343,14 +343,14 @@ public class UonSerializer extends WriterSerializer { return out; } - private SerializerWriter serializeBeanMap(UonSerializerSession session, UonWriter out, BeanMap<?> m, boolean addClassAttr) throws Exception { + private SerializerWriter serializeBeanMap(UonSerializerSession session, UonWriter out, BeanMap<?> m, boolean addTypeProperty) throws Exception { int depth = session.getIndent(); out.startFlag('o'); boolean addComma = false; - for (BeanPropertyValue p : m.getValues(session.isTrimNulls(), addClassAttr ? session.createBeanTypeNameProperty(m, null) : null)) { + for (BeanPropertyValue p : m.getValues(session.isTrimNulls(), addTypeProperty ? session.createBeanTypeNameProperty(m) : null)) { BeanPropertyMeta pMeta = p.getMeta(); ClassMeta<?> cMeta = p.getClassMeta(); @@ -452,6 +452,12 @@ public class UonSerializer extends WriterSerializer { } @Override /* CoreApi */ + public UonSerializer addToDictionary(Class<?>...classes) throws LockedException { + super.addToDictionary(classes); + return this; + } + + @Override /* CoreApi */ public <T> UonSerializer addImplClass(Class<T> interfaceClass, Class<? extends T> implClass) throws LockedException { super.addImplClass(interfaceClass, implClass); return this; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializerContext.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializerContext.java index 5e0e440..cfcb1c6 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializerContext.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializerContext.java @@ -28,6 +28,7 @@ import org.apache.juneau.serializer.*; * <li>{@link UonSerializer#addNotBeanClasses(Class[])} * <li>{@link UonSerializer#addBeanFilters(Class[])} * <li>{@link UonSerializer#addPojoSwaps(Class[])} + * <li>{@link UonSerializer#addToDictionary(Class[])} * <li>{@link UonSerializer#addImplClass(Class,Class)} * </ul> * <p> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java index cda21ba..103e16c 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java @@ -76,6 +76,7 @@ public class UrlEncodingParser extends UonParser { eType = (ClassMeta<T>)object(); PojoSwap<T,Object> transform = (PojoSwap<T,Object>)eType.getPojoSwap(); ClassMeta<?> sType = eType.getSerializedClassMeta(); + BeanDictionary bd = bc.getBeanDictionary(); int c = r.peek(); if (c == '?') @@ -89,7 +90,7 @@ public class UrlEncodingParser extends UonParser { if (m.containsKey("_value")) o = m.get("_value"); else - o = m.cast(); + o = bd.cast(m); } else if (sType.isMap()) { Map m = (sType.canCreateNewInstance() ? (Map)sType.newInstance() : new ObjectMap(bc)); o = parseIntoMap(session, r, m, sType.getKeyType(), sType.getValueType()); @@ -107,7 +108,7 @@ public class UrlEncodingParser extends UonParser { ClassMeta<Object> valueType = object(); parseIntoMap(session, r, m, string(), valueType); if (m.containsKey(bc.getBeanTypePropertyName())) - o = m.cast(); + o = bd.cast(m); else if (m.containsKey("_value")) o = session.getBeanContext().convertToType(m.get("_value"), sType); else if (sType.isCollection()) { @@ -183,7 +184,7 @@ public class UrlEncodingParser extends UonParser { state = S1; } else { // For performance, we bypass parseAnything for string values. - V value = (V)(valueType.isString() ? super.parseString(session, r.unread(), true) : super.parseAnything(session, valueType, r.unread(), m, true)); + V value = (V)(valueType.isString() ? super.parseString(session, r.unread(), true) : super.parseAnything(session, valueType, r.unread(), m, true, null)); // If we already encountered this parameter, turn it into a list. if (m.containsKey(currAttr) && valueType.isObject()) { @@ -289,22 +290,22 @@ public class UrlEncodingParser extends UonParser { BeanPropertyMeta pMeta = m.getPropertyMeta(currAttr); if (pMeta == null) { if (m.getMeta().isSubTyped()) { - Object value = parseAnything(session, object(), r.unread(), m.getBean(false), true); + Object value = parseAnything(session, object(), r.unread(), m.getBean(false), true, null); m.put(currAttr, value); } else { onUnknownProperty(session, currAttr, m, currAttrLine, currAttrCol); - parseAnything(session, object(), r.unread(), m.getBean(false), true); // Read content anyway to ignore it + parseAnything(session, object(), r.unread(), m.getBean(false), true, null); // Read content anyway to ignore it } } else { session.setCurrentProperty(pMeta); if (session.shouldUseExpandedParams(pMeta)) { ClassMeta et = pMeta.getClassMeta().getElementType(); - Object value = parseAnything(session, et, r.unread(), m.getBean(false), true); + Object value = parseAnything(session, et, r.unread(), m.getBean(false), true, pMeta); setName(et, value, currAttr); pMeta.add(m, value); } else { ClassMeta<?> cm = pMeta.getClassMeta(); - Object value = parseAnything(session, cm, r.unread(), m.getBean(false), true); + Object value = parseAnything(session, cm, r.unread(), m.getBean(false), true, pMeta); setName(cm, value, currAttr); pMeta.set(m, value); } @@ -431,7 +432,7 @@ public class UrlEncodingParser extends UonParser { throw new ParseException(session, "Argument lengths don't match. vals={0}, argTypes={1}", vals.length, argTypes.length); for (int i = 0; i < vals.length; i++) { String s = String.valueOf(vals[i]); - vals[i] = super.parseAnything(session, argTypes[i], new UonReader(s, false), session.getOuter(), true); + vals[i] = super.parseAnything(session, argTypes[i], new UonReader(s, false), session.getOuter(), true, null); } return vals; @@ -451,7 +452,7 @@ public class UrlEncodingParser extends UonParser { UonParserSession session = createParameterContext(in); try { UonReader r = session.getReader(); - return super.parseAnything(session, type, r, null, true); + return super.parseAnything(session, type, r, null, true, null); } catch (ParseException e) { throw e; } catch (Exception e) { @@ -540,6 +541,12 @@ public class UrlEncodingParser extends UonParser { } @Override /* CoreApi */ + public UrlEncodingParser addToDictionary(Class<?>...classes) throws LockedException { + super.addToDictionary(classes); + return this; + } + + @Override /* CoreApi */ public <T> UrlEncodingParser addImplClass(Class<T> interfaceClass, Class<? extends T> implClass) throws LockedException { super.addImplClass(interfaceClass, implClass); return this; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserContext.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserContext.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserContext.java index b7a75c3..43f7da4 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserContext.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserContext.java @@ -27,6 +27,7 @@ import org.apache.juneau.*; * <li>{@link UrlEncodingParser#addNotBeanClasses(Class[])} * <li>{@link UrlEncodingParser#addBeanFilters(Class[])} * <li>{@link UrlEncodingParser#addPojoSwaps(Class[])} + * <li>{@link UrlEncodingParser#addToDictionary(Class[])} * <li>{@link UrlEncodingParser#addImplClass(Class,Class)} * </ul> * <p> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java index 3863386..714309c 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java @@ -321,12 +321,12 @@ public class UrlEncodingSerializer extends UonSerializer { } @SuppressWarnings({ "rawtypes" }) - private SerializerWriter serializeBeanMap(UrlEncodingSerializerSession session, UonWriter out, BeanMap<?> m, boolean addClassAttr) throws Exception { + private SerializerWriter serializeBeanMap(UrlEncodingSerializerSession session, UonWriter out, BeanMap<?> m, boolean addTypeProperty) throws Exception { int depth = session.getIndent(); boolean addAmp = false; - for (BeanPropertyValue p : m.getValues(session.isTrimNulls(), addClassAttr ? session.createBeanTypeNameProperty(m, null) : null)) { + for (BeanPropertyValue p : m.getValues(session.isTrimNulls(), addTypeProperty ? session.createBeanTypeNameProperty(m) : null)) { BeanPropertyMeta pMeta = p.getMeta(); ClassMeta<?> cMeta = p.getClassMeta(); @@ -444,6 +444,12 @@ public class UrlEncodingSerializer extends UonSerializer { } @Override /* CoreApi */ + public UrlEncodingSerializer addToDictionary(Class<?>...classes) throws LockedException { + super.addToDictionary(classes); + return this; + } + + @Override /* CoreApi */ public <T> UrlEncodingSerializer addImplClass(Class<T> interfaceClass, Class<? extends T> implClass) throws LockedException { super.addImplClass(interfaceClass, implClass); return this; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java index 6ccfb6b..6f5f7c8 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java @@ -27,6 +27,7 @@ import org.apache.juneau.*; * <li>{@link UrlEncodingSerializer#addNotBeanClasses(Class[])} * <li>{@link UrlEncodingSerializer#addBeanFilters(Class[])} * <li>{@link UrlEncodingSerializer#addPojoSwaps(Class[])} + * <li>{@link UrlEncodingSerializer#addToDictionary(Class[])} * <li>{@link UrlEncodingSerializer#addImplClass(Class,Class)} * </ul> * <p> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/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 2311a52..f066c84 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 @@ -62,7 +62,7 @@ public class XmlParser extends ReaderParser { private static final int UNKNOWN=0, OBJECT=1, ARRAY=2, STRING=3, NUMBER=4, BOOLEAN=5, NULL=6; - private <T> T parseAnything(XmlParserSession session, ClassMeta<T> eType, String currAttr, XMLStreamReader r, Object outer, boolean isRoot) throws Exception { + private <T> T parseAnything(XmlParserSession session, ClassMeta<T> eType, String currAttr, XMLStreamReader r, Object outer, boolean isRoot, BeanPropertyMeta pMeta) throws Exception { BeanContext bc = session.getBeanContext(); if (eType == null) @@ -70,6 +70,7 @@ public class XmlParser extends ReaderParser { PojoSwap<T,Object> transform = (PojoSwap<T,Object>)eType.getPojoSwap(); ClassMeta<?> sType = eType.getSerializedClassMeta(); session.setCurrentClass(sType); + BeanDictionary bd = (pMeta == null ? bc.getBeanDictionary() : pMeta.getBeanDictionary()); String wrapperAttr = (isRoot && session.isPreserveRootElement()) ? r.getName().getLocalPart() : null; String typeAttr = r.getAttributeValue(null, "type"); @@ -108,12 +109,12 @@ public class XmlParser extends ReaderParser { if (sType.isObject()) { if (jsonType == OBJECT) { ObjectMap m = new ObjectMap(bc); - parseIntoMap(session, r, m, string(), object()); + parseIntoMap(session, r, m, string(), object(), pMeta); if (wrapperAttr != null) m = new ObjectMap(bc).append(wrapperAttr, m); - o = m.cast(); + o = bd.cast(m); } else if (jsonType == ARRAY) - o = parseIntoCollection(session, r, new ObjectList(bc), object()); + o = parseIntoCollection(session, r, new ObjectList(bc), object(), pMeta); else if (jsonType == STRING) { o = session.decodeString(r.getElementText()); if (sType.isChar()) @@ -133,17 +134,17 @@ public class XmlParser extends ReaderParser { o = session.decodeString(r.getElementText()).charAt(0); } else if (sType.isMap()) { Map m = (sType.canCreateNewInstance(outer) ? (Map)sType.newInstance(outer) : new ObjectMap(bc)); - o = parseIntoMap(session, r, m, sType.getKeyType(), sType.getValueType()); + o = parseIntoMap(session, r, m, sType.getKeyType(), sType.getValueType(), pMeta); if (wrapperAttr != null) o = new ObjectMap(bc).append(wrapperAttr, m); } else if (sType.isCollection()) { Collection l = (sType.canCreateNewInstance(outer) ? (Collection)sType.newInstance(outer) : new ObjectList(bc)); - o = parseIntoCollection(session, r, l, sType.getElementType()); + o = parseIntoCollection(session, r, l, sType.getElementType(), pMeta); } else if (sType.isNumber()) { o = parseNumber(session.decodeLiteral(r.getElementText()), (Class<? extends Number>)sType.getInnerClass()); } else if (sType.canCreateNewInstanceFromObjectMap(outer)) { ObjectMap m = new ObjectMap(bc); - parseIntoMap(session, r, m, string(), object()); + parseIntoMap(session, r, m, string(), object(), pMeta); o = sType.newInstanceFromObjectMap(outer, m); } else if (sType.canCreateNewBean(outer)) { if (sType.getExtendedMeta(XmlClassMeta.class).getFormat() == XmlFormat.COLLAPSED) { @@ -151,7 +152,7 @@ public class XmlParser extends ReaderParser { BeanMap<?> m = bc.newBeanMap(outer, sType.getInnerClass()); BeanPropertyMeta bpm = m.getMeta().getExtendedMeta(XmlBeanMeta.class).getPropertyMeta(fieldName); ClassMeta<?> cm = m.getMeta().getClassMeta(); - Object value = parseAnything(session, cm, currAttr, r, m.getBean(false), false); + Object value = parseAnything(session, cm, currAttr, r, m.getBean(false), false, null); setName(cm, value, currAttr); bpm.set(m, value); o = m.getBean(); @@ -160,7 +161,7 @@ public class XmlParser extends ReaderParser { o = parseIntoBean(session, r, m).getBean(); } } else if (sType.isArray()) { - ArrayList l = (ArrayList)parseIntoCollection(session, r, new ArrayList(), sType.getElementType()); + ArrayList l = (ArrayList)parseIntoCollection(session, r, new ArrayList(), sType.getElementType(), pMeta); o = bc.toArray(sType, l); } else if (sType.canCreateNewInstanceFromString(outer)) { o = sType.newInstanceFromString(outer, session.decodeString(r.getElementText())); @@ -179,7 +180,7 @@ public class XmlParser extends ReaderParser { return (T)o; } - private <K,V> Map<K,V> parseIntoMap(XmlParserSession session, XMLStreamReader r, Map<K,V> m, ClassMeta<K> keyType, ClassMeta<V> valueType) throws Exception { + private <K,V> Map<K,V> parseIntoMap(XmlParserSession session, XMLStreamReader r, Map<K,V> m, ClassMeta<K> keyType, ClassMeta<V> valueType, BeanPropertyMeta pMeta) throws Exception { BeanContext bc = session.getBeanContext(); int depth = 0; for (int i = 0; i < r.getAttributeCount(); i++) { @@ -199,7 +200,7 @@ public class XmlParser extends ReaderParser { depth++; currAttr = session.decodeString(r.getLocalName()); K key = convertAttrToType(session, m, currAttr, keyType); - V value = parseAnything(session, valueType, currAttr, r, m, false); + V value = parseAnything(session, valueType, currAttr, r, m, false, pMeta); setName(valueType, value, currAttr); if (valueType.isObject() && m.containsKey(key)) { Object o = m.get(key); @@ -218,13 +219,13 @@ public class XmlParser extends ReaderParser { return m; } - private <E> Collection<E> parseIntoCollection(XmlParserSession session, XMLStreamReader r, Collection<E> l, ClassMeta<E> elementType) throws Exception { + private <E> Collection<E> parseIntoCollection(XmlParserSession session, XMLStreamReader r, Collection<E> l, ClassMeta<E> elementType, BeanPropertyMeta pMeta) throws Exception { int depth = 0; do { int event = r.nextTag(); if (event == START_ELEMENT) { depth++; - E value = parseAnything(session, elementType, null, r, l, false); + E value = parseAnything(session, elementType, null, r, l, false, pMeta); l.add(value); } else if (event == END_ELEMENT) { depth--; @@ -242,7 +243,7 @@ public class XmlParser extends ReaderParser { int event = r.nextTag(); if (event == START_ELEMENT) { depth++; - o[i] = parseAnything(session, argTypes[i], null, r, null, false); + o[i] = parseAnything(session, argTypes[i], null, r, null, false, null); i++; } else if (event == END_ELEMENT) { depth--; @@ -315,7 +316,7 @@ public class XmlParser extends ReaderParser { BeanPropertyMeta pMeta = xmlMeta.getPropertyMeta(currAttr); if (pMeta == null) { if (m.getMeta().isSubTyped()) { - Object value = parseAnything(session, string(), currAttr, r, m.getBean(false), false); + Object value = parseAnything(session, string(), currAttr, r, m.getBean(false), false, null); m.put(currAttr, value); } else { Location l = r.getLocation(); @@ -327,7 +328,7 @@ public class XmlParser extends ReaderParser { XmlFormat xf = pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat(); if (xf == COLLAPSED) { ClassMeta<?> et = pMeta.getClassMeta().getElementType(); - Object value = parseAnything(session, et, currAttr, r, m.getBean(false), false); + Object value = parseAnything(session, et, currAttr, r, m.getBean(false), false, pMeta); setName(et, value, currAttr); pMeta.add(m, value); } else if (xf == ATTR) { @@ -335,7 +336,7 @@ public class XmlParser extends ReaderParser { r.nextTag(); } else { ClassMeta<?> cm = pMeta.getClassMeta(); - Object value = parseAnything(session, cm, currAttr, r, m.getBean(false), false); + Object value = parseAnything(session, cm, currAttr, r, m.getBean(false), false, pMeta); setName(cm, value, currAttr); pMeta.set(m, value); } @@ -399,7 +400,7 @@ public class XmlParser extends ReaderParser { depth++; currAttr = session.decodeString(r.getLocalName()); String key = convertAttrToType(session, null, currAttr, string()); - Object value = parseAnything(session, object(), currAttr, r, null, false); + Object value = parseAnything(session, object(), currAttr, r, null, false, null); if (m.containsKey(key)) { Object o = m.get(key); if (o instanceof ObjectList) @@ -446,7 +447,7 @@ public class XmlParser extends ReaderParser { protected <T> T doParse(ParserSession session, ClassMeta<T> type) throws Exception { XmlParserSession s = (XmlParserSession)session; type = s.getBeanContext().normalizeClassMeta(type); - return parseAnything(s, type, null, s.getXmlStreamReader(), s.getOuter(), true); + return parseAnything(s, type, null, s.getXmlStreamReader(), s.getOuter(), true, null); } @Override /* ReaderParser */ @@ -500,6 +501,12 @@ public class XmlParser extends ReaderParser { } @Override /* CoreApi */ + public XmlParser addToDictionary(Class<?>...classes) throws LockedException { + super.addToDictionary(classes); + return this; + } + + @Override /* CoreApi */ public <T> XmlParser addImplClass(Class<T> interfaceClass, Class<? extends T> implClass) throws LockedException { super.addImplClass(interfaceClass, implClass); return this; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java index 09307a6..22bf648 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java @@ -31,6 +31,7 @@ import org.apache.juneau.parser.*; * <li>{@link XmlParser#addNotBeanClasses(Class[])} * <li>{@link XmlParser#addBeanFilters(Class[])} * <li>{@link XmlParser#addPojoSwaps(Class[])} + * <li>{@link XmlParser#addToDictionary(Class[])} * <li>{@link XmlParser#addImplClass(Class,Class)} * </ul> * <p> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/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 b848532..601e9e5 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 @@ -473,19 +473,11 @@ public class XmlSchemaSerializer extends XmlSerializer { Namespace cNs = first(elementType.getExtendedMeta(XmlClassMeta.class).getNamespace(), cm.getExtendedMeta(XmlClassMeta.class).getNamespace(), defaultNs); schemas.queueType(cNs, null, elementType); w.sTag(i+1, "sequence").nl(); - w.oTag(i+2, "choice") - .attr("minOccurs", 0) + w.oTag(i+2, "any") + .attr("processContents", "skip") .attr("maxOccurs", "unbounded") - .cTag().nl(); - w.oTag(i+3, "element") - .attr("name", XmlUtils.encodeElementName(getElementName(elementType))) - .attr("type", getXmlType(cNs, elementType)) - .ceTag().nl(); - w.oTag(i+3, "element") - .attr("name", "null") - .attr("type", "string") + .attr("minOccurs", "0") .ceTag().nl(); - w.eTag(i+2, "choice").nl(); w.eTag(i+1, "sequence").nl(); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/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 cdc7d0e..32f618e 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 @@ -690,6 +690,12 @@ public class XmlSerializer extends WriterSerializer { } @Override /* CoreApi */ + public XmlSerializer addToDictionary(Class<?>...classes) throws LockedException { + super.addToDictionary(classes); + return this; + } + + @Override /* CoreApi */ public <T> XmlSerializer addImplClass(Class<T> interfaceClass, Class<? extends T> implClass) throws LockedException { super.addImplClass(interfaceClass, implClass); return this; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java index 97704d6..c1fba2e 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java @@ -28,6 +28,7 @@ import org.apache.juneau.serializer.*; * <li>{@link XmlSerializer#addNotBeanClasses(Class[])} * <li>{@link XmlSerializer#addBeanFilters(Class[])} * <li>{@link XmlSerializer#addPojoSwaps(Class[])} + * <li>{@link XmlSerializer#addToDictionary(Class[])} * <li>{@link XmlSerializer#addImplClass(Class,Class)} * </ul> * <p> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/test/java/org/apache/juneau/BeanMapTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/BeanMapTest.java b/juneau-core/src/test/java/org/apache/juneau/BeanMapTest.java index df431d5..c51757b 100755 --- a/juneau-core/src/test/java/org/apache/juneau/BeanMapTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/BeanMapTest.java @@ -457,23 +457,23 @@ public class BeanMapTest { m.put("b", new D2()); assertEquals("default", t.b.s); - JsonParser p = new JsonParser().setClassLoader(BeanMapTest.class.getClassLoader()); - m.put("lb1", new ObjectList("[{_type:'"+D2.class.getName()+"',s:'foobar'}]", p)); + JsonParser p = new JsonParser().setClassLoader(BeanMapTest.class.getClassLoader()).addToDictionary(D2.class); + m.put("lb1", new ObjectList("[{_type:'D2',s:'foobar'}]", p)); assertEquals(ObjectList.class.getName(), t.lb1.getClass().getName()); assertEquals(D2.class.getName(), t.lb1.get(0).getClass().getName()); assertEquals("foobar", (t.lb1.get(0)).s); - m.put("lb2", new ObjectList("[{_type:'"+D2.class.getName()+"',s:'foobar'}]", p)); + m.put("lb2", new ObjectList("[{_type:'D2',s:'foobar'}]", p)); assertEquals(ArrayList.class.getName(), t.lb2.getClass().getName()); assertEquals(D2.class.getName(), t.lb2.get(0).getClass().getName()); assertEquals("foobar", (t.lb2.get(0)).s); - m.put("ab1", new ObjectList("[{_type:'"+D2.class.getName()+"',s:'foobar'}]", p)); + m.put("ab1", new ObjectList("[{_type:'D2',s:'foobar'}]", p)); assertEquals("[L"+D2.class.getName()+";", t.ab1.getClass().getName()); assertEquals(D2.class.getName(), t.ab1[0].getClass().getName()); assertEquals("foobar", t.ab1[0].s); - m.put("ab2", new ObjectList("[{_type:'"+D2.class.getName()+"',s:'foobar'}]", p)); + m.put("ab2", new ObjectList("[{_type:'D2',s:'foobar'}]", p)); assertEquals("[L"+D2.class.getName()+";", t.ab2.getClass().getName()); assertEquals(D2.class.getName(), t.ab2[0].getClass().getName()); assertEquals("foobar", t.ab2[0].s); @@ -487,6 +487,7 @@ public class BeanMapTest { public D2[] ab2 = new D2[0]; } + @Bean(typeName="D2") public static class D2 { public String s = "default"; } @@ -643,8 +644,8 @@ public class BeanMapTest { assertEquals(HEnum.THREE, t7.getEnum2()); // Create instance directly from JSON. - JsonParser p = new JsonParser().setClassLoader(BeanMapTest.class.getClassLoader()); - t7 = (H)p.parse("{_type:'"+H.class.getName()+"',enum1:'THREE',enum2:'ONE'}", Object.class); + JsonParser p = new JsonParser().setClassLoader(BeanMapTest.class.getClassLoader()).addToDictionary(H.class); + t7 = (H)p.parse("{_type:'H',enum1:'THREE',enum2:'ONE'}", Object.class); assertEquals("{enum1:'THREE',enum2:'ONE'}", serializer.serialize(t7)); assertEquals(HEnum.THREE, t7.enum1); assertEquals(HEnum.ONE, t7.getEnum2()); @@ -654,6 +655,7 @@ public class BeanMapTest { ONE, TWO, THREE } + @Bean(typeName="H") public static class H { public HEnum enum1; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java b/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java index 1f46926..a325b08 100755 --- a/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripAddClassAttrsTest.java @@ -19,6 +19,7 @@ import static org.junit.Assert.*; import java.util.*; +import org.apache.juneau.annotation.*; import org.apache.juneau.html.*; import org.apache.juneau.jena.*; import org.apache.juneau.json.*; @@ -107,6 +108,11 @@ public class RoundTripAddClassAttrsTest extends RoundTripTest { super(label, s, p, flags); } + @Override + public Class<?>[] getDictionary() { + return new Class<?>[]{A.class, B.class, C.class, D.class, E.class, F.class}; + } + //==================================================================================================== // testBean //==================================================================================================== @@ -137,6 +143,7 @@ public class RoundTripAddClassAttrsTest extends RoundTripTest { public static abstract class AA implements IA { } + @Bean(typeName="A") public static class A extends AA { private String f1; @@ -193,6 +200,7 @@ public class RoundTripAddClassAttrsTest extends RoundTripTest { assertEquals("foo", ((A)t.f2d).getF1()); } + @Bean(typeName="B") public static class B { public A f2a; public AA f2b; @@ -223,6 +231,7 @@ public class RoundTripAddClassAttrsTest extends RoundTripTest { assertEquals("foo", t.f3d.get("foo").getF1()); } + @Bean(typeName="C") public static class C { public Map<String,A> f3a = new HashMap<String,A>(); public Map<String,A> f3b = new HashMap<String,A>(); @@ -258,6 +267,7 @@ public class RoundTripAddClassAttrsTest extends RoundTripTest { assertEquals("foo", ((A)t.f4d[0]).getF1()); } + @Bean(typeName="D") public static class D { public A[] f4a; public AA[] f4b; @@ -293,6 +303,7 @@ public class RoundTripAddClassAttrsTest extends RoundTripTest { assertEquals("foo", ((A)t.f5d.get(0)).getF1()); } + @Bean(typeName="E") public static class E { public List<A> f5a = new LinkedList<A>(); public List<AA> f5b = new LinkedList<AA>(); @@ -328,6 +339,7 @@ public class RoundTripAddClassAttrsTest extends RoundTripTest { assertEquals("foo", ((A)t.f6d.get(0)[0]).getF1()); } + @Bean(typeName="F") public static class F { public List<A[]> f6a = new LinkedList<A[]>(); public List<AA[]> f6b = new LinkedList<AA[]>(); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java b/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java index 5cf2d81..14bb115 100755 --- a/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java @@ -189,8 +189,8 @@ public abstract class RoundTripTest { public boolean debug = false; public RoundTripTest(String label, Serializer s, Parser p, int flags) throws Exception { - this.s = s.clone().addBeanFilters(getBeanFilters()).addPojoSwaps(getPojoSwaps()); - this.p = p == null ? null : p.clone().addBeanFilters(getBeanFilters()).addPojoSwaps(getPojoSwaps()); + this.s = s.clone().addBeanFilters(getBeanFilters()).addPojoSwaps(getPojoSwaps()).addToDictionary(getDictionary()); + this.p = p == null ? null : p.clone().addBeanFilters(getBeanFilters()).addPojoSwaps(getPojoSwaps()).addToDictionary(getDictionary()); this.label = label; Map<Class<Object>, Class<? extends Object>> m = getImplClasses(); @@ -215,6 +215,10 @@ public abstract class RoundTripTest { return new Class<?>[0]; } + public Class<?>[] getDictionary() { + return new Class<?>[0]; + } + public <T> Map<Class<T>,Class<? extends T>> getImplClasses() { return null; } @@ -282,6 +286,12 @@ public abstract class RoundTripTest { p.addPojoSwaps(c); } + protected void addToDictionary(Class<?>...c) { + s.addToDictionary(c); + if (p != null) + p.addToDictionary(c); + } + public boolean isValidationOnly() { return returnOriginalObject; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/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 3b8df3e..6fb6e6f 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 @@ -19,6 +19,7 @@ import static org.junit.Assert.*; import java.util.*; import org.apache.juneau.*; +import org.apache.juneau.annotation.*; import org.apache.juneau.parser.*; import org.junit.*; @@ -30,7 +31,7 @@ public class CommonParserTest { //==================================================================================================== @Test public void testFromSerializer() throws Exception { - ReaderParser p = HtmlParser.DEFAULT.clone().setClassLoader(getClass().getClassLoader()); + ReaderParser p = HtmlParser.DEFAULT.clone().setClassLoader(getClass().getClassLoader()).addToDictionary(A1.class); Map m = null; String in; @@ -65,6 +66,7 @@ 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); @@ -73,6 +75,7 @@ public class CommonParserTest { assertEquals("value1", t1.list.get(1).value); } + @Bean(typeName="A1") public static class A1 { public A2 list; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/test/java/org/apache/juneau/json/CommonParserTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/json/CommonParserTest.java b/juneau-core/src/test/java/org/apache/juneau/json/CommonParserTest.java index f9fe1f0..f621811 100755 --- a/juneau-core/src/test/java/org/apache/juneau/json/CommonParserTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/json/CommonParserTest.java @@ -19,6 +19,7 @@ import static org.junit.Assert.*; import java.util.*; import org.apache.juneau.*; +import org.apache.juneau.annotation.*; import org.apache.juneau.parser.*; import org.junit.*; @@ -30,7 +31,7 @@ public class CommonParserTest { //==================================================================================================== @Test public void testFromSerializer() throws Exception { - ReaderParser p = JsonParser.DEFAULT.clone().setClassLoader(getClass().getClassLoader()); + ReaderParser p = JsonParser.DEFAULT.clone().setClassLoader(getClass().getClassLoader()).addToDictionary(A1.class); Map m = null; m = (Map)p.parse("{a:1}", Object.class); @@ -84,7 +85,7 @@ public class CommonParserTest { tl.add(new A3("name0","value0")); tl.add(new A3("name1","value1")); b.list = tl; - String json = new JsonSerializer().setProperty(SERIALIZER_addBeanTypeProperties, true).serialize(b); + String json = new JsonSerializer().setProperty(SERIALIZER_addBeanTypeProperties, true).addToDictionary(A1.class).serialize(b); b = (A1)p.parse(json, Object.class); assertEquals("value1", b.list.get(1).value); @@ -93,6 +94,7 @@ public class CommonParserTest { assertEquals("value1", b.list.get(1).value); } + @Bean(typeName="A1") public static class A1 { public A2 list; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/test/java/org/apache/juneau/urlencoding/CommonParser_UonTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/urlencoding/CommonParser_UonTest.java b/juneau-core/src/test/java/org/apache/juneau/urlencoding/CommonParser_UonTest.java index bac9a2c..d55b456 100755 --- a/juneau-core/src/test/java/org/apache/juneau/urlencoding/CommonParser_UonTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/urlencoding/CommonParser_UonTest.java @@ -19,13 +19,14 @@ import static org.junit.Assert.*; import java.util.*; import org.apache.juneau.*; +import org.apache.juneau.annotation.*; import org.apache.juneau.parser.*; import org.junit.*; @SuppressWarnings({"rawtypes","hiding","serial","javadoc"}) public class CommonParser_UonTest { - ReaderParser p = UonParser.DEFAULT.clone().setClassLoader(getClass().getClassLoader()); + ReaderParser p = UonParser.DEFAULT.clone().setClassLoader(getClass().getClassLoader()).addToDictionary(A1.class); ReaderParser pe = UonParser.DEFAULT_DECODING.clone().setClassLoader(getClass().getClassLoader()); //==================================================================================================== @@ -79,6 +80,7 @@ public class CommonParser_UonTest { assertEquals("value1", b.list.get(1).value); } + @Bean(typeName="A1") public static class A1 { public A2 list; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java b/juneau-core/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java index d33854a..1254916 100755 --- a/juneau-core/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java @@ -20,6 +20,7 @@ import static org.junit.Assert.*; import java.util.*; import org.apache.juneau.*; +import org.apache.juneau.annotation.*; import org.apache.juneau.parser.*; import org.apache.juneau.serializer.*; import org.junit.*; @@ -27,7 +28,7 @@ import org.junit.*; @SuppressWarnings({"rawtypes","hiding","serial","javadoc"}) public class CommonParser_UrlEncodingTest { - ReaderParser p = UrlEncodingParser.DEFAULT.clone().setClassLoader(getClass().getClassLoader()); + ReaderParser p = UrlEncodingParser.DEFAULT.clone().setClassLoader(getClass().getClassLoader()).addToDictionary(A1.class); //==================================================================================================== // testFromSerializer @@ -81,6 +82,7 @@ public class CommonParser_UrlEncodingTest { assertEquals("value1", b.list.get(1).value); } + @Bean(typeName="A1") public static class A1 { public A2 list; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f479285a/juneau-core/src/test/java/org/apache/juneau/utils/PojoRestTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/utils/PojoRestTest.java b/juneau-core/src/test/java/org/apache/juneau/utils/PojoRestTest.java index 5addefc..8661c71 100755 --- a/juneau-core/src/test/java/org/apache/juneau/utils/PojoRestTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/utils/PojoRestTest.java @@ -18,6 +18,7 @@ import static org.junit.Assert.*; import java.util.*; import org.apache.juneau.*; +import org.apache.juneau.annotation.*; import org.apache.juneau.json.*; import org.apache.juneau.parser.*; import org.junit.*; @@ -90,18 +91,18 @@ public class PojoRestTest { // Serialize it to JSON. String s = serializer.serialize(p); - String expectedValue = "{_type:'org.apache.juneau.utils.PojoRestTest$Person',name:'some name',age:123,addresses:[{street:'street A',city:'city A',state:'state A',zip:12345,isCurrent:true},{street:'street B',city:'city B',state:'state B',zip:12345,isCurrent:false}]}"; + String expectedValue = "{_type:'Person',name:'some name',age:123,addresses:[{street:'street A',city:'city A',state:'state A',zip:12345,isCurrent:true},{street:'street B',city:'city B',state:'state B',zip:12345,isCurrent:false}]}"; assertEquals(expectedValue, s); // Parse it back to Java objects. - p = (Person)JsonParser.DEFAULT.clone().setClassLoader(getClass().getClassLoader()).parse(s, Object.class); + p = (Person)JsonParser.DEFAULT.clone().setClassLoader(getClass().getClassLoader()).addToDictionary(Person.class).parse(s, Object.class); expectedValue = "city B"; s = p.addresses[1].city; assertEquals(expectedValue, s); // Parse it back into JSON again. s = serializer.serialize(p); - expectedValue = "{_type:'org.apache.juneau.utils.PojoRestTest$Person',name:'some name',age:123,addresses:[{street:'street A',city:'city A',state:'state A',zip:12345,isCurrent:true},{street:'street B',city:'city B',state:'state B',zip:12345,isCurrent:false}]}"; + expectedValue = "{_type:'Person',name:'some name',age:123,addresses:[{street:'street A',city:'city A',state:'state A',zip:12345,isCurrent:true},{street:'street B',city:'city B',state:'state B',zip:12345,isCurrent:false}]}"; assertEquals(expectedValue, s); // Try adding an address @@ -242,6 +243,7 @@ public class PojoRestTest { } } + @Bean(typeName="Person") public static class Person { public String name; public int age;
