Repository: incubator-juneau Updated Branches: refs/heads/master 257776b98 -> 7239f3e34
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7239f3e3/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 aeb5fc2..71179fd 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 @@ -267,7 +267,7 @@ public class XmlSchemaSerializer extends XmlSerializer { this.defaultNs = defaultNs; this.targetNs = targetNs; this.session = session; - w = new XmlWriter(sw, session.isUseWhitespace(), session.isTrimStrings(), session.getQuoteChar(), null, true, null); + w = new XmlWriter(sw, session.isUseWhitespace(), session.getMaxIndent(), session.isTrimStrings(), session.getQuoteChar(), null, true, null); int i = session.getIndent(); w.oTag(i, "schema"); w.attr("xmlns", xs.getUri()); @@ -277,13 +277,13 @@ public class XmlSchemaSerializer extends XmlSerializer { w.attr("attributeFormDefault", "qualified"); for (Namespace ns2 : allNs) w.attr("xmlns", ns2.name, ns2.uri); - w.append('>').nl(); + w.append('>').nl(i); for (Namespace ns : allNs) { if (ns != targetNs) { w.oTag(i+1, "import") .attr("namespace", ns.getUri()) .attr("schemaLocation", ns.getName()+".xsd") - .append("/>").nl(); + .append("/>").nl(i+1); } } } @@ -303,7 +303,7 @@ public class XmlSchemaSerializer extends XmlSerializer { w.oTag(i, "element") .attr("name", XmlUtils.encodeElementName(name)) .attr("type", type) - .append('/').append('>').nl(); + .append('/').append('>').nl(i); schemas.queueType(ns, null, ft); schemas.processQueue(); @@ -321,7 +321,7 @@ public class XmlSchemaSerializer extends XmlSerializer { w.oTag(i, "attribute") .attr("name", name) .attr("type", type) - .append('/').append('>').nl(); + .append('/').append('>').nl(i); return true; } @@ -345,10 +345,10 @@ public class XmlSchemaSerializer extends XmlSerializer { if ((xbm != null && (xbm.getContentFormat() != null && xbm.getContentFormat().isOneOf(TEXT,TEXT_PWS,MIXED,MIXED_PWS,XMLTEXT))) || ! cm.isMapOrBean()) w.attr("mixed", "true"); - w.cTag().nl(); + w.cTag().nl(i); if (! (cm.isMapOrBean() || cm.isCollectionOrArray() || (cm.isAbstract() && ! cm.isNumber()) || cm.isObject())) { - w.oTag(i+1, "attribute").attr("name", session.getBeanTypePropertyName(cm)).attr("type", "string").ceTag().nl(); + w.oTag(i+1, "attribute").attr("name", session.getBeanTypePropertyName(cm)).attr("type", "string").ceTag().nl(i+1); } else { @@ -366,12 +366,12 @@ public class XmlSchemaSerializer extends XmlSerializer { XmlBeanMeta xbm2 = bm.getExtendedMeta(XmlBeanMeta.class); if (xbm2.getContentProperty() != null && xbm2.getContentFormat() == ELEMENTS) { - w.sTag(i+1, "sequence").nl(); + w.sTag(i+1, "sequence").nl(i+1); w.oTag(i+2, "any") .attr("processContents", "skip") .attr("minOccurs", 0) - .ceTag().nl(); - w.eTag(i+1, "sequence").nl(); + .ceTag().nl(i+2); + w.eTag(i+1, "sequence").nl(i+1); } else if (hasChildElements) { @@ -396,15 +396,15 @@ public class XmlSchemaSerializer extends XmlSerializer { if (hasOtherNsElement || hasCollapsed) { // If this bean has any child elements in another namespace, // we need to add an <any> element. - w.oTag(i+1, "choice").attr("maxOccurs", "unbounded").cTag().nl(); + w.oTag(i+1, "choice").attr("maxOccurs", "unbounded").cTag().nl(i+1); w.oTag(i+2, "any") .attr("processContents", "skip") .attr("minOccurs", 0) - .ceTag().nl(); - w.eTag(i+1, "choice").nl(); + .ceTag().nl(i+2); + w.eTag(i+1, "choice").nl(i+1); } else { - w.sTag(i+1, "all").nl(); + w.sTag(i+1, "all").nl(i+1); for (BeanPropertyMeta pMeta : bm.getPropertyMetas()) { XmlBeanPropertyMeta xmlMeta = pMeta.getExtendedMeta(XmlBeanPropertyMeta.class); if (xmlMeta.getXmlFormat() != ATTR) { @@ -423,7 +423,7 @@ public class XmlSchemaSerializer extends XmlSerializer { .attr("type", getXmlType(cNs, ct2)) .attr("minOccurs", 0); - w.ceTag().nl(); + w.ceTag().nl(i+2); } else { // Child element is in another namespace. schemas.queueElement(cNs, pMeta.getName(), ct2); @@ -432,7 +432,7 @@ public class XmlSchemaSerializer extends XmlSerializer { } } - w.eTag(i+1, "all").nl(); + w.eTag(i+1, "all").nl(i+1); } } @@ -447,9 +447,9 @@ public class XmlSchemaSerializer extends XmlSerializer { if (pNs != targetNs) { schemas.queueAttribute(pNs, pMeta.getName(), pMeta.getClassMeta()); w.oTag(i+1, "attribute") - //.attr("name", pMeta.getName(), true) - .attr("ref", pNs.getName() + ':' + pMeta.getName()) - .ceTag().nl(); + //.attr("name", pMeta.getName(), true) + .attr("ref", pNs.getName() + ':' + pMeta.getName()) + .ceTag().nl(i+1); } // Otherwise, it's just a plain attribute of this bean. @@ -457,7 +457,7 @@ public class XmlSchemaSerializer extends XmlSerializer { w.oTag(i+1, "attribute") .attr("name", pMeta.getName(), true) .attr("type", getXmlAttrType(pMeta.getClassMeta())) - .ceTag().nl(); + .ceTag().nl(i+1); } } @@ -465,43 +465,43 @@ public class XmlSchemaSerializer extends XmlSerializer { } else if (cm.isCollectionOrArray()) { ClassMeta<?> elementType = cm.getElementType(); if (elementType.isObject()) { - w.sTag(i+1, "sequence").nl(); + w.sTag(i+1, "sequence").nl(i+1); w.oTag(i+2, "any") .attr("processContents", "skip") .attr("maxOccurs", "unbounded") .attr("minOccurs", "0") - .ceTag().nl(); - w.eTag(i+1, "sequence").nl(); + .ceTag().nl(i+2); + w.eTag(i+1, "sequence").nl(i+1); } else { 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.sTag(i+1, "sequence").nl(i+1); w.oTag(i+2, "any") .attr("processContents", "skip") .attr("maxOccurs", "unbounded") .attr("minOccurs", "0") - .ceTag().nl(); - w.eTag(i+1, "sequence").nl(); + .ceTag().nl(i+2); + w.eTag(i+1, "sequence").nl(i+1); } //----- Map ----- } else if (cm.isMap() || cm.isAbstract() || cm.isObject()) { - w.sTag(i+1, "sequence").nl(); + w.sTag(i+1, "sequence").nl(i+1); w.oTag(i+2, "any") .attr("processContents", "skip") .attr("maxOccurs", "unbounded") .attr("minOccurs", "0") - .ceTag().nl(); - w.eTag(i+1, "sequence").nl(); + .ceTag().nl(i+2); + w.eTag(i+1, "sequence").nl(i+1); } w.oTag(i+1, "attribute") .attr("name", session.getBeanTypePropertyName(null)) .attr("type", "string") - .ceTag().nl(); + .ceTag().nl(i+1); } - w.eTag(i, "complexType").nl(); + w.eTag(i, "complexType").nl(i); schemas.processQueue(); return true; @@ -529,7 +529,8 @@ public class XmlSchemaSerializer extends XmlSerializer { @Override /* Object */ public String toString() { try { - w.eTag(session.getIndent(), "schema").nl(); + int i = session.getIndent(); + w.eTag(i, "schema").nl(i); } catch (IOException e) { throw new RuntimeException(e); // Shouldn't happen. } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7239f3e3/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 84c86aa..73fdf7e 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 @@ -512,7 +512,7 @@ public class XmlSerializer extends WriterSerializer { out.append('>'); if (cr && ! (sType.isMapOrBean())) - out.nl(); + out.nl(indent+1); } ContentResult rc = CR_ELEMENTS; @@ -568,9 +568,9 @@ public class XmlSerializer extends WriterSerializer { out.append('/').append('>'); } else - out.i(cr && rc != CR_MIXED ? indent : 0).eTag(elementNs, en, encodeEn); + out.ie(cr && rc != CR_MIXED ? indent : 0).eTag(elementNs, en, encodeEn); if (! isMixed) - out.nl(); + out.nl(indent); } return out; @@ -600,7 +600,7 @@ public class XmlSerializer extends WriterSerializer { if (! hasChildren) { hasChildren = true; - out.append('>').nlIf(! isMixed); + out.append('>').nlIf(! isMixed, session.getIndent()); } serializeAnything(session, out, value, valueType, session.toString(k), null, false, XmlFormat.DEFAULT, isMixed, false, null); } @@ -704,7 +704,7 @@ public class XmlSerializer extends WriterSerializer { if (! hasChildren) { hasChildren = true; - out.appendIf(! isCollapsed, '>').nlIf(! isMixed); + out.appendIf(! isCollapsed, '>').nlIf(! isMixed, session.getIndent()); } XmlBeanPropertyMeta xbpm = pMeta.getExtendedMeta(XmlBeanPropertyMeta.class); @@ -713,7 +713,7 @@ public class XmlSerializer extends WriterSerializer { } if (! hasContent) return (hasChildren ? CR_ELEMENTS : isVoidElement ? CR_VOID : CR_EMPTY); - out.append('>').nlIf(! isMixed); + out.append('>').nlIf(! isMixed, session.getIndent()); // Serialize XML content. if (content != null) { @@ -739,7 +739,7 @@ public class XmlSerializer extends WriterSerializer { out.i(session.indent); out.text(content); if (! isMixed) - out.nl(); + out.nl(session.indent); } } return isMixed ? CR_MIXED : CR_ELEMENTS; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7239f3e3/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java index a4db76c..bcf450f 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java @@ -273,6 +273,12 @@ public class XmlSerializerBuilder extends SerializerBuilder { } @Override /* SerializerBuilder */ + public XmlSerializerBuilder maxIndent(int value) { + super.maxIndent(value); + return this; + } + + @Override /* SerializerBuilder */ public XmlSerializerBuilder addBeanTypeProperties(boolean value) { super.addBeanTypeProperties(value); return this; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7239f3e3/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java index 5ee1962..ca67989 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java @@ -201,6 +201,6 @@ public class XmlSerializerSession extends SerializerSession { Object output = getOutput(); if (output instanceof XmlWriter) return (XmlWriter)output; - return new XmlWriter(super.getWriter(), isUseWhitespace(), isTrimStrings(), getQuoteChar(), getUriResolver(), isEnableNamespaces(), getDefaultNamespace()); + return new XmlWriter(super.getWriter(), isUseWhitespace(), getMaxIndent(), isTrimStrings(), getQuoteChar(), getUriResolver(), isEnableNamespaces(), getDefaultNamespace()); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7239f3e3/juneau-core/src/main/java/org/apache/juneau/xml/XmlWriter.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlWriter.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlWriter.java index 3166b98..21d1d2a 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlWriter.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlWriter.java @@ -37,14 +37,15 @@ public class XmlWriter extends SerializerWriter { * * @param out The wrapped writer. * @param useWhitespace If <jk>true</jk> XML elements will be indented. + * @param maxIndent The maximum indentation level. * @param trimStrings If <jk>true</jk>, strings should be trimmed before they're serialized. * @param quoteChar The quote character to use for attributes. Should be <js>'\''</js> or <js>'"'</js>. * @param uriResolver The URI resolver for resolving URIs to absolute or root-relative form. * @param enableNs Flag to indicate if XML namespaces are enabled. * @param defaultNamespace The default namespace if XML namespaces are enabled. */ - public XmlWriter(Writer out, boolean useWhitespace, boolean trimStrings, char quoteChar, UriResolver uriResolver, boolean enableNs, Namespace defaultNamespace) { - super(out, useWhitespace, trimStrings, quoteChar, uriResolver); + public XmlWriter(Writer out, boolean useWhitespace, int maxIndent, boolean trimStrings, char quoteChar, UriResolver uriResolver, boolean enableNs, Namespace defaultNamespace) { + super(out, useWhitespace, maxIndent, trimStrings, quoteChar, uriResolver); this.enableNs = enableNs; this.defaultNsPrefix = defaultNamespace == null ? null : defaultNamespace.name; } @@ -570,6 +571,12 @@ public class XmlWriter extends SerializerWriter { } @Override /* SerializerWriter */ + public XmlWriter cre(int depth) throws IOException { + super.cre(depth); + return this; + } + + @Override /* SerializerWriter */ public XmlWriter appendln(int indent, String text) throws IOException { super.appendln(indent, text); return this; @@ -612,8 +619,14 @@ public class XmlWriter extends SerializerWriter { } @Override /* SerializerWriter */ - public XmlWriter nl() throws IOException { - super.nl(); + public XmlWriter ie(int indent) throws IOException { + super.ie(indent); + return this; + } + + @Override /* SerializerWriter */ + public XmlWriter nl(int indent) throws IOException { + super.nl(indent); return this; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7239f3e3/juneau-core/src/main/javadoc/overview.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/javadoc/overview.html b/juneau-core/src/main/javadoc/overview.html index 81a3f33..460915d 100644 --- a/juneau-core/src/main/javadoc/overview.html +++ b/juneau-core/src/main/javadoc/overview.html @@ -6263,6 +6263,7 @@ <li>{@link org.apache.juneau.serializer.SerializerContext#SERIALIZER_uriContext} <li>{@link org.apache.juneau.serializer.SerializerContext#SERIALIZER_uriRelativity} <li>{@link org.apache.juneau.serializer.SerializerContext#SERIALIZER_uriResolution} + <li>{@link org.apache.juneau.serializer.SerializerContext#SERIALIZER_maxIndent} </ul> <li>New annotation property: {@link org.apache.juneau.annotation.BeanProperty#value()}. <br>The following two annotations are considered equivalent: http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7239f3e3/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java ---------------------------------------------------------------------- diff --git a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java index 23b31bf..fd2b66a 100644 --- a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java +++ b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java @@ -913,6 +913,17 @@ public class RestClientBuilder extends CoreObjectBuilder { } /** + * Sets the {@link SerializerContext#SERIALIZER_maxIndent} property on all serializers in this group. + * + * @param value The new value for this property. + * @return This object (for method chaining). + * @see SerializerContext#SERIALIZER_maxIndent + */ + public RestClientBuilder maxIndent(boolean value) { + return property(SERIALIZER_maxIndent, value); + } + + /** * Sets the {@link SerializerContext#SERIALIZER_addBeanTypeProperties} property on all serializers in this group. * * @param value The new value for this property. http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7239f3e3/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java index b4ef754..755109f 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java @@ -201,6 +201,18 @@ public final class RestRequest extends HttpServletRequestWrapper { return "HTTP " + getMethod() + " " + getRequestURI() + (qs == null ? "" : "?" + qs); } + /** + * Same as {@link #getAttribute(String)} but returns a default value if not found. + * + * @param name The request attribute name. + * @param def The default value if the attribute doesn't exist. + * @return The request attribute value. + */ + public Object getAttribute(String name, Object def) { + Object o = super.getAttribute(name); + return (o == null ? def : o); + } + //-------------------------------------------------------------------------------- // Properties
