You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/03/10 16:51:03 UTC
[07/34] incubator-juneau git commit: Add builder classes for all
serializers and parsers.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
new file mode 100644
index 0000000..6cdf163
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
@@ -0,0 +1,570 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.xml;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+
+/**
+ * Builder class for building instances of XML Schema serializers.
+ */
+public class XmlSchemaSerializerBuilder extends XmlSerializerBuilder {
+
+ /**
+ * Constructor, default settings.
+ */
+ public XmlSchemaSerializerBuilder() {
+ super();
+ }
+
+ /**
+ * Constructor.
+ * @param propertyStore The initial configuration settings for this builder.
+ */
+ public XmlSchemaSerializerBuilder(PropertyStore propertyStore) {
+ super(propertyStore);
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializer build() {
+ return new XmlSchemaSerializer(propertyStore);
+ }
+
+
+ //--------------------------------------------------------------------------------
+ // Properties
+ //--------------------------------------------------------------------------------
+
+ @Override /* XmlSerializerBuilder */
+ public XmlSchemaSerializerBuilder enableNamespaces(boolean value) {
+ super.enableNamespaces(value);
+ return this;
+ }
+
+ @Override /* XmlSerializerBuilder */
+ public XmlSchemaSerializerBuilder ns() {
+ super.ns();
+ return this;
+ }
+
+ @Override /* XmlSerializerBuilder */
+ public XmlSchemaSerializerBuilder autoDetectNamespaces(boolean value) {
+ super.autoDetectNamespaces(value);
+ return this;
+ }
+
+ @Override /* XmlSerializerBuilder */
+ public XmlSchemaSerializerBuilder addNamespaceUrisToRoot(boolean value) {
+ super.addNamespaceUrisToRoot(value);
+ return this;
+ }
+
+ @Override /* XmlSerializerBuilder */
+ public XmlSchemaSerializerBuilder defaultNamespace(String value) {
+ super.defaultNamespace(value);
+ return this;
+ }
+
+ @Override /* XmlSerializerBuilder */
+ public XmlSchemaSerializerBuilder xsNamespace(Namespace value) {
+ super.xsNamespace(value);
+ return this;
+ }
+
+ @Override /* XmlSerializerBuilder */
+ public XmlSchemaSerializerBuilder namespaces(Namespace...values) {
+ super.namespaces(values);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder maxDepth(int value) {
+ super.maxDepth(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder initialDepth(int value) {
+ super.initialDepth(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder detectRecursions(boolean value) {
+ super.detectRecursions(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder ignoreRecursions(boolean value) {
+ super.ignoreRecursions(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder useWhitespace(boolean value) {
+ super.useWhitespace(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder ws() {
+ super.ws();
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder addBeanTypeProperties(boolean value) {
+ super.addBeanTypeProperties(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder quoteChar(char value) {
+ super.quoteChar(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder sq() {
+ super.sq();
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder trimNullProperties(boolean value) {
+ super.trimNullProperties(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder trimEmptyCollections(boolean value) {
+ super.trimEmptyCollections(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder trimEmptyMaps(boolean value) {
+ super.trimEmptyMaps(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder trimStrings(boolean value) {
+ super.trimStrings(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder relativeUriBase(String value) {
+ super.relativeUriBase(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder absolutePathUriBase(String value) {
+ super.absolutePathUriBase(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder sortCollections(boolean value) {
+ super.sortCollections(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSchemaSerializerBuilder sortMaps(boolean value) {
+ super.sortMaps(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beansRequireDefaultConstructor(boolean value) {
+ super.beansRequireDefaultConstructor(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beansRequireSerializable(boolean value) {
+ super.beansRequireSerializable(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beansRequireSettersForGetters(boolean value) {
+ super.beansRequireSettersForGetters(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beansRequireSomeProperties(boolean value) {
+ super.beansRequireSomeProperties(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
+ super.beanMapPutReturnsOldValue(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beanConstructorVisibility(Visibility value) {
+ super.beanConstructorVisibility(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beanClassVisibility(Visibility value) {
+ super.beanClassVisibility(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beanFieldVisibility(Visibility value) {
+ super.beanFieldVisibility(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder methodVisibility(Visibility value) {
+ super.methodVisibility(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder useJavaBeanIntrospector(boolean value) {
+ super.useJavaBeanIntrospector(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder useInterfaceProxies(boolean value) {
+ super.useInterfaceProxies(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
+ super.ignoreUnknownBeanProperties(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
+ super.ignoreUnknownNullBeanProperties(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
+ super.ignorePropertiesWithoutSetters(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
+ super.ignoreInvocationExceptionsOnGetters(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
+ super.ignoreInvocationExceptionsOnSetters(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder sortProperties(boolean value) {
+ super.sortProperties(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder notBeanPackages(String...values) {
+ super.notBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder notBeanPackages(Collection<String> values) {
+ super.notBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder setNotBeanPackages(String...values) {
+ super.setNotBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder setNotBeanPackages(Collection<String> values) {
+ super.setNotBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removeNotBeanPackages(String...values) {
+ super.removeNotBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removeNotBeanPackages(Collection<String> values) {
+ super.removeNotBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder notBeanClasses(Class<?>...values) {
+ super.notBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder notBeanClasses(Collection<Class<?>> values) {
+ super.notBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder setNotBeanClasses(Class<?>...values) {
+ super.setNotBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder setNotBeanClasses(Collection<Class<?>> values) {
+ super.setNotBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removeNotBeanClasses(Class<?>...values) {
+ super.removeNotBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removeNotBeanClasses(Collection<Class<?>> values) {
+ super.removeNotBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beanFilters(Class<?>...values) {
+ super.beanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beanFilters(Collection<Class<?>> values) {
+ super.beanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder setBeanFilters(Class<?>...values) {
+ super.setBeanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder setBeanFilters(Collection<Class<?>> values) {
+ super.setBeanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removeBeanFilters(Class<?>...values) {
+ super.removeBeanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removeBeanFilters(Collection<Class<?>> values) {
+ super.removeBeanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder pojoSwaps(Class<?>...values) {
+ super.pojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder pojoSwaps(Collection<Class<?>> values) {
+ super.pojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder setPojoSwaps(Class<?>...values) {
+ super.setPojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder setPojoSwaps(Collection<Class<?>> values) {
+ super.setPojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removePojoSwaps(Class<?>...values) {
+ super.removePojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removePojoSwaps(Collection<Class<?>> values) {
+ super.removePojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder implClasses(Map<Class<?>,Class<?>> values) {
+ super.implClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public <T> XmlSchemaSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
+ super.implClass(interfaceClass, implClass);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beanDictionary(Class<?>...values) {
+ super.beanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beanDictionary(Collection<Class<?>> values) {
+ super.beanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder setBeanDictionary(Class<?>...values) {
+ super.setBeanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder setBeanDictionary(Collection<Class<?>> values) {
+ super.setBeanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removeFromBeanDictionary(Class<?>...values) {
+ super.removeFromBeanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removeFromBeanDictionary(Collection<Class<?>> values) {
+ super.removeFromBeanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder beanTypePropertyName(String value) {
+ super.beanTypePropertyName(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder defaultParser(Class<?> value) {
+ super.defaultParser(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder locale(Locale value) {
+ super.locale(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder timeZone(TimeZone value) {
+ super.timeZone(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder mediaType(MediaType value) {
+ super.mediaType(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder debug(boolean value) {
+ super.debug(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder property(String name, Object value) {
+ super.property(name, value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder properties(Map<String,Object> properties) {
+ super.properties(properties);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder addToProperty(String name, Object value) {
+ super.addToProperty(name, value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder putToProperty(String name, Object key, Object value) {
+ super.putToProperty(name, key, value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder putToProperty(String name, Object value) {
+ super.putToProperty(name, value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder removeFromProperty(String name, Object value) {
+ super.removeFromProperty(name, value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder classLoader(ClassLoader classLoader) {
+ super.classLoader(classLoader);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSchemaSerializerBuilder apply(PropertyStore copyFrom) {
+ super.apply(copyFrom);
+ return this;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/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 3091056..da39582 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
@@ -12,10 +12,11 @@
// ***************************************************************************************************************************
package org.apache.juneau.xml;
-import static org.apache.juneau.xml.XmlSerializerContext.*;
-import static org.apache.juneau.xml.annotation.XmlFormat.*;
+import static org.apache.juneau.serializer.SerializerContext.*;
import static org.apache.juneau.xml.XmlSerializer.ContentResult.*;
import static org.apache.juneau.xml.XmlSerializer.JsonType.*;
+import static org.apache.juneau.xml.XmlSerializerContext.*;
+import static org.apache.juneau.xml.annotation.XmlFormat.*;
import java.lang.reflect.*;
import java.util.*;
@@ -125,64 +126,128 @@ import org.apache.juneau.xml.annotation.*;
public class XmlSerializer extends WriterSerializer {
/** Default serializer without namespaces. */
- public static final XmlSerializer DEFAULT = new XmlSerializer().lock();
+ public static final XmlSerializer DEFAULT = new XmlSerializer(PropertyStore.create());
/** Default serializer without namespaces, with single quotes. */
- public static final XmlSerializer DEFAULT_SQ = new XmlSerializer.Sq().lock();
+ public static final XmlSerializer DEFAULT_SQ = new Sq(PropertyStore.create());
/** Default serializer without namespaces, with single quotes, whitespace added. */
- public static final XmlSerializer DEFAULT_SQ_READABLE = new XmlSerializer.SqReadable().lock();
+ public static final XmlSerializer DEFAULT_SQ_READABLE = new SqReadable(PropertyStore.create());
/** Default serializer, all default settings. */
- public static final XmlSerializer DEFAULT_NS = new XmlSerializer.Ns().lock();
+ public static final XmlSerializer DEFAULT_NS = new Ns(PropertyStore.create());
/** Default serializer, single quotes. */
- public static final XmlSerializer DEFAULT_NS_SQ = new XmlSerializer.NsSq().lock();
+ public static final XmlSerializer DEFAULT_NS_SQ = new NsSq(PropertyStore.create());
/** Default serializer, single quotes, whitespace added. */
- public static final XmlSerializer DEFAULT_NS_SQ_READABLE = new XmlSerializer.NsSqReadable().lock();
+ public static final XmlSerializer DEFAULT_NS_SQ_READABLE = new NsSqReadable(PropertyStore.create());
+
/** Default serializer, single quotes. */
public static class Sq extends XmlSerializer {
- /** Constructor */
- public Sq() {
- setQuoteChar('\'');
+
+ /**
+ * Constructor.
+ * @param propertyStore The property store containing all the settings for this object.
+ */
+ public Sq(PropertyStore propertyStore) {
+ super(propertyStore);
+ }
+
+ @Override /* CoreObject */
+ protected ObjectMap getOverrideProperties() {
+ return super.getOverrideProperties().append(SERIALIZER_quoteChar, '\'');
}
}
/** Default serializer, single quotes, whitespace added. */
- public static class SqReadable extends Sq {
- /** Constructor */
- public SqReadable() {
- setUseWhitespace(true);
+ public static class SqReadable extends XmlSerializer {
+
+ /**
+ * Constructor.
+ * @param propertyStore The property store containing all the settings for this object.
+ */
+ public SqReadable(PropertyStore propertyStore) {
+ super(propertyStore);
+ }
+
+ @Override /* CoreObject */
+ protected ObjectMap getOverrideProperties() {
+ return super.getOverrideProperties().append(SERIALIZER_quoteChar, '\'').append(SERIALIZER_useWhitespace, true);
}
}
/** Default serializer without namespaces. */
@Produces(value="text/xml+simple",contentType="text/xml")
public static class Ns extends XmlSerializer {
- /** Constructor */
- public Ns() {
- setEnableNamespaces(true);
+
+ /**
+ * Constructor.
+ * @param propertyStore The property store containing all the settings for this object.
+ */
+ public Ns(PropertyStore propertyStore) {
+ super(propertyStore);
+ }
+
+ @Override /* CoreObject */
+ protected ObjectMap getOverrideProperties() {
+ return super.getOverrideProperties().append(XML_enableNamespaces, true);
}
}
/** Default serializer without namespaces, single quotes. */
- public static class NsSq extends Ns {
- /** Constructor */
- public NsSq() {
- setQuoteChar('\'');
+ public static class NsSq extends XmlSerializer {
+
+ /**
+ * Constructor.
+ * @param propertyStore The property store containing all the settings for this object.
+ */
+ public NsSq(PropertyStore propertyStore) {
+ super(propertyStore);
+ }
+
+ @Override /* CoreObject */
+ protected ObjectMap getOverrideProperties() {
+ return super.getOverrideProperties().append(XML_enableNamespaces, true).append(SERIALIZER_quoteChar, '\'');
}
}
/** Default serializer without namespaces, single quotes, with whitespace. */
- public static class NsSqReadable extends NsSq {
- /** Constructor */
- public NsSqReadable() {
- setUseWhitespace(true);
+ public static class NsSqReadable extends XmlSerializer {
+
+ /**
+ * Constructor.
+ * @param propertyStore The property store containing all the settings for this object.
+ */
+ public NsSqReadable(PropertyStore propertyStore) {
+ super(propertyStore);
+ }
+
+ @Override /* CoreObject */
+ protected ObjectMap getOverrideProperties() {
+ return super.getOverrideProperties().append(XML_enableNamespaces, true).append(SERIALIZER_quoteChar, '\'').append(SERIALIZER_useWhitespace, true);
}
}
+
+ private final XmlSerializerContext ctx;
+ private volatile XmlSchemaSerializer schemaSerializer;
+
+ /**
+ * Constructor.
+ * @param propertyStore The property store containing all the settings for this object.
+ */
+ public XmlSerializer(PropertyStore propertyStore) {
+ super(propertyStore);
+ this.ctx = createContext(XmlSerializerContext.class);
+ }
+
+ @Override /* CoreObject */
+ public XmlSerializerBuilder builder() {
+ return new XmlSerializerBuilder(propertyStore);
+ }
+
/**
* Recursively searches for the XML namespaces on the specified POJO and adds them to the serializer context object.
*
@@ -717,8 +782,9 @@ public class XmlSerializer extends WriterSerializer {
* @return The schema serializer.
*/
public XmlSerializer getSchemaSerializer() {
- XmlSchemaSerializer s = new XmlSchemaSerializer(getContextFactory());
- return s;
+ if (schemaSerializer == null)
+ schemaSerializer = new XmlSchemaSerializer(propertyStore, getOverrideProperties());
+ return schemaSerializer;
}
static enum JsonType {
@@ -767,677 +833,6 @@ public class XmlSerializer extends WriterSerializer {
@Override /* Serializer */
public XmlSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType) {
- return new XmlSerializerSession(getContext(XmlSerializerContext.class), op, output, javaMethod, locale, timeZone, mediaType);
- }
-
-
- //--------------------------------------------------------------------------------
- // Properties
- //--------------------------------------------------------------------------------
-
- /**
- * <b>Configuration property:</b> Enable support for XML namespaces.
- * <p>
- * <ul>
- * <li><b>Name:</b> <js>"XmlSerializer.enableNamespaces"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session-overridable:</b> <jk>true</jk>
- * </ul>
- * <p>
- * If not enabled, XML output will not contain any namespaces regardless of any other settings.
- * <p>
- * <h5 class='section'>Notes:</h5>
- * <ul>
- * <li>This is equivalent to calling <code>setProperty(<jsf>XML_enableNamespaces</jsf>, value)</code>.
- * <li>This introduces a slight performance penalty.
- * </ul>
- *
- * @param value The new value for this property.
- * @return This object (for method chaining).
- * @throws LockedException If {@link #lock()} was called on this class.
- * @see XmlSerializerContext#XML_enableNamespaces
- */
- public XmlSerializer setEnableNamespaces(boolean value) throws LockedException {
- return setProperty(XML_enableNamespaces, value);
- }
-
- /**
- * <b>Configuration property:</b> Auto-detect namespace usage.
- * <p>
- * <ul>
- * <li><b>Name:</b> <js>"XmlSerializer.autoDetectNamespaces"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>true</jk>
- * <li><b>Session-overridable:</b> <jk>true</jk>
- * </ul>
- * <p>
- * Detect namespace usage before serialization.
- * <p>
- * Used in conjunction with {@link XmlSerializerContext#XML_addNamespaceUrisToRoot} to reduce
- * the list of namespace URLs appended to the root element to only those
- * that will be used in the resulting document.
- * <p>
- * If enabled, then the data structure will first be crawled looking for
- * namespaces that will be encountered before the root element is
- * serialized.
- * <p>
- * This setting is ignored if {@link XmlSerializerContext#XML_enableNamespaces} is not enabled.
- * <p>
- * <h5 class='section'>Notes:</h5>
- * <ul>
- * <li>Auto-detection of namespaces can be costly performance-wise.
- * In high-performance environments, it's recommended that namespace detection be
- * disabled, and that namespaces be manually defined through the {@link XmlSerializerContext#XML_namespaces} property.
- * </ul>
- * <p>
- * <h5 class='section'>Notes:</h5>
- * <ul>
- * <li>This is equivalent to calling <code>setProperty(<jsf>XML_autoDetectNamespaces</jsf>, value)</code>.
- * <li>This introduces a slight performance penalty.
- * </ul>
- *
- * @param value The new value for this property.
- * @return This object (for method chaining).
- * @throws LockedException If {@link #lock()} was called on this class.
- * @see XmlSerializerContext#XML_autoDetectNamespaces
- */
- public XmlSerializer setAutoDetectNamespaces(boolean value) throws LockedException {
- return setProperty(XML_autoDetectNamespaces, value);
- }
-
- /**
- * <b>Configuration property:</b> Add namespace URLs to the root element.
- * <p>
- * <ul>
- * <li><b>Name:</b> <js>"XmlSerializer.addNamespaceUrisToRoot"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session-overridable:</b> <jk>true</jk>
- * </ul>
- * <p>
- * Use this setting to add {@code xmlns:x} attributes to the root
- * element for the default and all mapped namespaces.
- * <p>
- * This setting is ignored if {@link XmlSerializerContext#XML_enableNamespaces} is not enabled.
- * <p>
- * <h5 class='section'>Notes:</h5>
- * <ul>
- * <li>This is equivalent to calling <code>setProperty(<jsf>XML_addNamespaceUrisToRoot</jsf>, value)</code>.
- * <li>This introduces a slight performance penalty.
- * </ul>
- *
- * @param value The new value for this property.
- * @return This object (for method chaining).
- * @throws LockedException If {@link #lock()} was called on this class.
- * @see XmlSerializerContext#XML_addNamespaceUrisToRoot
- */
- public XmlSerializer setAddNamespaceUrisToRoot(boolean value) throws LockedException {
- return setProperty(XML_addNamespaceUrisToRoot, value);
- }
-
- /**
- * <b>Configuration property:</b> Default namespace.
- * <p>
- * <ul>
- * <li><b>Name:</b> <js>"XmlSerializer.defaultNamespace"</js>
- * <li><b>Data type:</b> <code>String</code>
- * <li><b>Default:</b> <js>"{juneau:'http://www.apache.org/2013/Juneau'}"</js>
- * <li><b>Session-overridable:</b> <jk>true</jk>
- * </ul>
- * <p>
- * Specifies the default namespace URI for this document.
- * <p>
- * <h5 class='section'>Notes:</h5>
- * <ul>
- * <li>This is equivalent to calling <code>setProperty(<jsf>XML_defaultNamespace</jsf>, value)</code>.
- * <li>This introduces a slight performance penalty.
- * </ul>
- *
- * @param value The new value for this property.
- * @return This object (for method chaining).
- * @throws LockedException If {@link #lock()} was called on this class.
- * @see XmlSerializerContext#XML_defaultNamespace
- */
- public XmlSerializer setDefaultNamespace(String value) throws LockedException {
- return setProperty(XML_defaultNamespace, value);
- }
-
- /**
- * <b>Configuration property:</b> XMLSchema namespace.
- * <p>
- * <ul>
- * <li><b>Name:</b> <js>"XmlSerializer.xsNamespace"</js>
- * <li><b>Data type:</b> {@link Namespace}
- * <li><b>Default:</b> <code>{name:<js>'xs'</js>,uri:<js>'http://www.w3.org/2001/XMLSchema'</js>}</code>
- * <li><b>Session-overridable:</b> <jk>true</jk>
- * </ul>
- * <p>
- * Specifies the namespace for the <code>XMLSchema</code> namespace, used by the schema generated
- * by the {@link XmlSchemaSerializer} class.
- * <p>
- * <h5 class='section'>Notes:</h5>
- * <ul>
- * <li>This is equivalent to calling <code>setProperty(<jsf>XML_xsNamespace</jsf>, value)</code>.
- * <li>This introduces a slight performance penalty.
- * </ul>
- *
- * @param value The new value for this property.
- * @return This object (for method chaining).
- * @throws LockedException If {@link #lock()} was called on this class.
- * @see XmlSerializerContext#XML_xsNamespace
- */
- public XmlSerializer setXsNamespace(Namespace value) throws LockedException {
- return setProperty(XML_xsNamespace, value);
- }
-
- /**
- * <b>Configuration property:</b> Default namespaces.
- * <p>
- * <ul>
- * <li><b>Name:</b> <js>"XmlSerializer.namespaces"</js>
- * <li><b>Data type:</b> <code>Set<{@link Namespace}></code>
- * <li><b>Default:</b> empty set
- * <li><b>Session-overridable:</b> <jk>true</jk>
- * </ul>
- * <p>
- * The default list of namespaces associated with this serializer.
- * <p>
- * <h5 class='section'>Notes:</h5>
- * <ul>
- * <li>This is equivalent to calling <code>setProperty(<jsf>XML_namespaces</jsf>, values)</code>.
- * <li>This introduces a slight performance penalty.
- * </ul>
- *
- * @param values The new value for this property.
- * @return This object (for method chaining).
- * @throws LockedException If {@link #lock()} was called on this class.
- * @see XmlSerializerContext#XML_namespaces
- */
- public XmlSerializer setNamespaces(Namespace...values) throws LockedException {
- return setProperty(XML_namespaces, values);
- }
-
- @Override /* Serializer */
- public XmlSerializer setMaxDepth(int value) throws LockedException {
- super.setMaxDepth(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setInitialDepth(int value) throws LockedException {
- super.setInitialDepth(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setDetectRecursions(boolean value) throws LockedException {
- super.setDetectRecursions(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setIgnoreRecursions(boolean value) throws LockedException {
- super.setIgnoreRecursions(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setUseWhitespace(boolean value) throws LockedException {
- super.setUseWhitespace(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setAddBeanTypeProperties(boolean value) throws LockedException {
- super.setAddBeanTypeProperties(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setQuoteChar(char value) throws LockedException {
- super.setQuoteChar(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setTrimNullProperties(boolean value) throws LockedException {
- super.setTrimNullProperties(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setTrimEmptyCollections(boolean value) throws LockedException {
- super.setTrimEmptyCollections(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setTrimEmptyMaps(boolean value) throws LockedException {
- super.setTrimEmptyMaps(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setTrimStrings(boolean value) throws LockedException {
- super.setTrimStrings(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setRelativeUriBase(String value) throws LockedException {
- super.setRelativeUriBase(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setAbsolutePathUriBase(String value) throws LockedException {
- super.setAbsolutePathUriBase(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setSortCollections(boolean value) throws LockedException {
- super.setSortCollections(value);
- return this;
- }
-
- @Override /* Serializer */
- public XmlSerializer setSortMaps(boolean value) throws LockedException {
- super.setSortMaps(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeansRequireDefaultConstructor(boolean value) throws LockedException {
- super.setBeansRequireDefaultConstructor(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeansRequireSerializable(boolean value) throws LockedException {
- super.setBeansRequireSerializable(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeansRequireSettersForGetters(boolean value) throws LockedException {
- super.setBeansRequireSettersForGetters(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeansRequireSomeProperties(boolean value) throws LockedException {
- super.setBeansRequireSomeProperties(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeanMapPutReturnsOldValue(boolean value) throws LockedException {
- super.setBeanMapPutReturnsOldValue(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeanConstructorVisibility(Visibility value) throws LockedException {
- super.setBeanConstructorVisibility(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeanClassVisibility(Visibility value) throws LockedException {
- super.setBeanClassVisibility(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeanFieldVisibility(Visibility value) throws LockedException {
- super.setBeanFieldVisibility(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setMethodVisibility(Visibility value) throws LockedException {
- super.setMethodVisibility(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setUseJavaBeanIntrospector(boolean value) throws LockedException {
- super.setUseJavaBeanIntrospector(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setUseInterfaceProxies(boolean value) throws LockedException {
- super.setUseInterfaceProxies(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setIgnoreUnknownBeanProperties(boolean value) throws LockedException {
- super.setIgnoreUnknownBeanProperties(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setIgnoreUnknownNullBeanProperties(boolean value) throws LockedException {
- super.setIgnoreUnknownNullBeanProperties(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setIgnorePropertiesWithoutSetters(boolean value) throws LockedException {
- super.setIgnorePropertiesWithoutSetters(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setIgnoreInvocationExceptionsOnGetters(boolean value) throws LockedException {
- super.setIgnoreInvocationExceptionsOnGetters(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setIgnoreInvocationExceptionsOnSetters(boolean value) throws LockedException {
- super.setIgnoreInvocationExceptionsOnSetters(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setSortProperties(boolean value) throws LockedException {
- super.setSortProperties(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setNotBeanPackages(String...values) throws LockedException {
- super.setNotBeanPackages(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setNotBeanPackages(Collection<String> values) throws LockedException {
- super.setNotBeanPackages(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addNotBeanPackages(String...values) throws LockedException {
- super.addNotBeanPackages(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addNotBeanPackages(Collection<String> values) throws LockedException {
- super.addNotBeanPackages(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removeNotBeanPackages(String...values) throws LockedException {
- super.removeNotBeanPackages(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removeNotBeanPackages(Collection<String> values) throws LockedException {
- super.removeNotBeanPackages(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setNotBeanClasses(Class<?>...values) throws LockedException {
- super.setNotBeanClasses(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setNotBeanClasses(Collection<Class<?>> values) throws LockedException {
- super.setNotBeanClasses(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addNotBeanClasses(Class<?>...values) throws LockedException {
- super.addNotBeanClasses(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addNotBeanClasses(Collection<Class<?>> values) throws LockedException {
- super.addNotBeanClasses(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removeNotBeanClasses(Class<?>...values) throws LockedException {
- super.removeNotBeanClasses(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removeNotBeanClasses(Collection<Class<?>> values) throws LockedException {
- super.removeNotBeanClasses(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeanFilters(Class<?>...values) throws LockedException {
- super.setBeanFilters(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeanFilters(Collection<Class<?>> values) throws LockedException {
- super.setBeanFilters(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addBeanFilters(Class<?>...values) throws LockedException {
- super.addBeanFilters(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addBeanFilters(Collection<Class<?>> values) throws LockedException {
- super.addBeanFilters(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removeBeanFilters(Class<?>...values) throws LockedException {
- super.removeBeanFilters(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removeBeanFilters(Collection<Class<?>> values) throws LockedException {
- super.removeBeanFilters(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setPojoSwaps(Class<?>...values) throws LockedException {
- super.setPojoSwaps(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setPojoSwaps(Collection<Class<?>> values) throws LockedException {
- super.setPojoSwaps(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addPojoSwaps(Class<?>...values) throws LockedException {
- super.addPojoSwaps(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addPojoSwaps(Collection<Class<?>> values) throws LockedException {
- super.addPojoSwaps(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removePojoSwaps(Class<?>...values) throws LockedException {
- super.removePojoSwaps(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removePojoSwaps(Collection<Class<?>> values) throws LockedException {
- super.removePojoSwaps(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setImplClasses(Map<Class<?>,Class<?>> values) throws LockedException {
- super.setImplClasses(values);
- return this;
- }
-
- @Override /* CoreApi */
- public <T> CoreApi addImplClass(Class<T> interfaceClass, Class<? extends T> implClass) throws LockedException {
- super.addImplClass(interfaceClass, implClass);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeanDictionary(Class<?>...values) throws LockedException {
- super.setBeanDictionary(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeanDictionary(Collection<Class<?>> values) throws LockedException {
- super.setBeanDictionary(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addToBeanDictionary(Class<?>...values) throws LockedException {
- super.addToBeanDictionary(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addToBeanDictionary(Collection<Class<?>> values) throws LockedException {
- super.addToBeanDictionary(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removeFromBeanDictionary(Class<?>...values) throws LockedException {
- super.removeFromBeanDictionary(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removeFromBeanDictionary(Collection<Class<?>> values) throws LockedException {
- super.removeFromBeanDictionary(values);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setBeanTypePropertyName(String value) throws LockedException {
- super.setBeanTypePropertyName(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setDefaultParser(Class<?> value) throws LockedException {
- super.setDefaultParser(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setLocale(Locale value) throws LockedException {
- super.setLocale(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setTimeZone(TimeZone value) throws LockedException {
- super.setTimeZone(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setMediaType(MediaType value) throws LockedException {
- super.setMediaType(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setDebug(boolean value) throws LockedException {
- super.setDebug(value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setProperty(String name, Object value) throws LockedException {
- super.setProperty(name, value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer setProperties(ObjectMap properties) throws LockedException {
- super.setProperties(properties);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer addToProperty(String name, Object value) throws LockedException {
- super.addToProperty(name, value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer putToProperty(String name, Object key, Object value) throws LockedException {
- super.putToProperty(name, key, value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer putToProperty(String name, Object value) throws LockedException {
- super.putToProperty(name, value);
- return this;
- }
-
- @Override /* CoreApi */
- public XmlSerializer removeFromProperty(String name, Object value) throws LockedException {
- super.removeFromProperty(name, value);
- return this;
- }
-
-
- //--------------------------------------------------------------------------------
- // Overridden methods
- //--------------------------------------------------------------------------------
-
- @Override /* CoreApi */
- public XmlSerializer setClassLoader(ClassLoader classLoader) throws LockedException {
- super.setClassLoader(classLoader);
- return this;
- }
-
- @Override /* Lockable */
- public XmlSerializer lock() {
- super.lock();
- return this;
- }
-
- @Override /* Lockable */
- public XmlSerializer clone() {
- try {
- XmlSerializer c = (XmlSerializer)super.clone();
- return c;
- } catch (CloneNotSupportedException e) {
- throw new RuntimeException(e); // Shouldn't happen.
- }
+ return new XmlSerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/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
new file mode 100644
index 0000000..d9f9a53
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
@@ -0,0 +1,717 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.xml;
+
+import static org.apache.juneau.xml.XmlSerializerContext.*;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.serializer.*;
+
+/**
+ * Builder class for building instances of XML serializers.
+ */
+public class XmlSerializerBuilder extends SerializerBuilder {
+
+ /**
+ * Constructor, default settings.
+ */
+ public XmlSerializerBuilder() {
+ super();
+ }
+
+ /**
+ * Constructor.
+ * @param propertyStore The initial configuration settings for this builder.
+ */
+ public XmlSerializerBuilder(PropertyStore propertyStore) {
+ super(propertyStore);
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializer build() {
+ return new XmlSerializer(propertyStore);
+ }
+
+
+ //--------------------------------------------------------------------------------
+ // Properties
+ //--------------------------------------------------------------------------------
+
+ /**
+ * <b>Configuration property:</b> Enable support for XML namespaces.
+ * <p>
+ * <ul>
+ * <li><b>Name:</b> <js>"XmlSerializer.enableNamespaces"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Session-overridable:</b> <jk>true</jk>
+ * </ul>
+ * <p>
+ * If not enabled, XML output will not contain any namespaces regardless of any other settings.
+ * <p>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * <li>This is equivalent to calling <code>property(<jsf>XML_enableNamespaces</jsf>, value)</code>.
+ * <li>This introduces a slight performance penalty.
+ * </ul>
+ *
+ * @param value The new value for this property.
+ * @return This object (for method chaining).
+ * @see XmlSerializerContext#XML_enableNamespaces
+ */
+ public XmlSerializerBuilder enableNamespaces(boolean value) {
+ return property(XML_enableNamespaces, value);
+ }
+
+ /**
+ * Shortcut for calling <code>setEnableNamespaces(<jk>true</jk>)</code>.
+ *
+ * @return This object (for method chaining).
+ */
+ public XmlSerializerBuilder ns() {
+ return enableNamespaces(true);
+ }
+
+ /**
+ * <b>Configuration property:</b> Auto-detect namespace usage.
+ * <p>
+ * <ul>
+ * <li><b>Name:</b> <js>"XmlSerializer.autoDetectNamespaces"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>true</jk>
+ * <li><b>Session-overridable:</b> <jk>true</jk>
+ * </ul>
+ * <p>
+ * Detect namespace usage before serialization.
+ * <p>
+ * Used in conjunction with {@link XmlSerializerContext#XML_addNamespaceUrisToRoot} to reduce
+ * the list of namespace URLs appended to the root element to only those
+ * that will be used in the resulting document.
+ * <p>
+ * If enabled, then the data structure will first be crawled looking for
+ * namespaces that will be encountered before the root element is
+ * serialized.
+ * <p>
+ * This setting is ignored if {@link XmlSerializerContext#XML_enableNamespaces} is not enabled.
+ * <p>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * <li>Auto-detection of namespaces can be costly performance-wise.
+ * In high-performance environments, it's recommended that namespace detection be
+ * disabled, and that namespaces be manually defined through the {@link XmlSerializerContext#XML_namespaces} property.
+ * </ul>
+ * <p>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * <li>This is equivalent to calling <code>property(<jsf>XML_autoDetectNamespaces</jsf>, value)</code>.
+ * <li>This introduces a slight performance penalty.
+ * </ul>
+ *
+ * @param value The new value for this property.
+ * @return This object (for method chaining).
+ * @see XmlSerializerContext#XML_autoDetectNamespaces
+ */
+ public XmlSerializerBuilder autoDetectNamespaces(boolean value) {
+ return property(XML_autoDetectNamespaces, value);
+ }
+
+ /**
+ * <b>Configuration property:</b> Add namespace URLs to the root element.
+ * <p>
+ * <ul>
+ * <li><b>Name:</b> <js>"XmlSerializer.addNamespaceUrisToRoot"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Session-overridable:</b> <jk>true</jk>
+ * </ul>
+ * <p>
+ * Use this setting to add {@code xmlns:x} attributes to the root
+ * element for the default and all mapped namespaces.
+ * <p>
+ * This setting is ignored if {@link XmlSerializerContext#XML_enableNamespaces} is not enabled.
+ * <p>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * <li>This is equivalent to calling <code>property(<jsf>XML_addNamespaceUrisToRoot</jsf>, value)</code>.
+ * <li>This introduces a slight performance penalty.
+ * </ul>
+ *
+ * @param value The new value for this property.
+ * @return This object (for method chaining).
+ * @see XmlSerializerContext#XML_addNamespaceUrisToRoot
+ */
+ public XmlSerializerBuilder addNamespaceUrisToRoot(boolean value) {
+ return property(XML_addNamespaceUrisToRoot, value);
+ }
+
+ /**
+ * <b>Configuration property:</b> Default namespace.
+ * <p>
+ * <ul>
+ * <li><b>Name:</b> <js>"XmlSerializer.defaultNamespace"</js>
+ * <li><b>Data type:</b> <code>String</code>
+ * <li><b>Default:</b> <js>"{juneau:'http://www.apache.org/2013/Juneau'}"</js>
+ * <li><b>Session-overridable:</b> <jk>true</jk>
+ * </ul>
+ * <p>
+ * Specifies the default namespace URI for this document.
+ * <p>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * <li>This is equivalent to calling <code>property(<jsf>XML_defaultNamespace</jsf>, value)</code>.
+ * <li>This introduces a slight performance penalty.
+ * </ul>
+ *
+ * @param value The new value for this property.
+ * @return This object (for method chaining).
+ * @see XmlSerializerContext#XML_defaultNamespace
+ */
+ public XmlSerializerBuilder defaultNamespace(String value) {
+ return property(XML_defaultNamespace, value);
+ }
+
+ /**
+ * <b>Configuration property:</b> XMLSchema namespace.
+ * <p>
+ * <ul>
+ * <li><b>Name:</b> <js>"XmlSerializer.xsNamespace"</js>
+ * <li><b>Data type:</b> {@link Namespace}
+ * <li><b>Default:</b> <code>{name:<js>'xs'</js>,uri:<js>'http://www.w3.org/2001/XMLSchema'</js>}</code>
+ * <li><b>Session-overridable:</b> <jk>true</jk>
+ * </ul>
+ * <p>
+ * Specifies the namespace for the <code>XMLSchema</code> namespace, used by the schema generated
+ * by the {@link XmlSchemaSerializer} class.
+ * <p>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * <li>This is equivalent to calling <code>property(<jsf>XML_xsNamespace</jsf>, value)</code>.
+ * <li>This introduces a slight performance penalty.
+ * </ul>
+ *
+ * @param value The new value for this property.
+ * @return This object (for method chaining).
+ * @see XmlSerializerContext#XML_xsNamespace
+ */
+ public XmlSerializerBuilder xsNamespace(Namespace value) {
+ return property(XML_xsNamespace, value);
+ }
+
+ /**
+ * <b>Configuration property:</b> Default namespaces.
+ * <p>
+ * <ul>
+ * <li><b>Name:</b> <js>"XmlSerializer.namespaces"</js>
+ * <li><b>Data type:</b> <code>Set<{@link Namespace}></code>
+ * <li><b>Default:</b> empty set
+ * <li><b>Session-overridable:</b> <jk>true</jk>
+ * </ul>
+ * <p>
+ * The default list of namespaces associated with this serializer.
+ * <p>
+ * <h5 class='section'>Notes:</h5>
+ * <ul>
+ * <li>This is equivalent to calling <code>property(<jsf>XML_namespaces</jsf>, values)</code>.
+ * <li>This introduces a slight performance penalty.
+ * </ul>
+ *
+ * @param values The new value for this property.
+ * @return This object (for method chaining).
+ * @see XmlSerializerContext#XML_namespaces
+ */
+ public XmlSerializerBuilder namespaces(Namespace...values) {
+ return property(XML_namespaces, values);
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder maxDepth(int value) {
+ super.maxDepth(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder initialDepth(int value) {
+ super.initialDepth(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder detectRecursions(boolean value) {
+ super.detectRecursions(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder ignoreRecursions(boolean value) {
+ super.ignoreRecursions(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder useWhitespace(boolean value) {
+ super.useWhitespace(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder ws() {
+ super.ws();
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder addBeanTypeProperties(boolean value) {
+ super.addBeanTypeProperties(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder quoteChar(char value) {
+ super.quoteChar(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder sq() {
+ super.sq();
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder trimNullProperties(boolean value) {
+ super.trimNullProperties(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder trimEmptyCollections(boolean value) {
+ super.trimEmptyCollections(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder trimEmptyMaps(boolean value) {
+ super.trimEmptyMaps(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder trimStrings(boolean value) {
+ super.trimStrings(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder relativeUriBase(String value) {
+ super.relativeUriBase(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder absolutePathUriBase(String value) {
+ super.absolutePathUriBase(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder sortCollections(boolean value) {
+ super.sortCollections(value);
+ return this;
+ }
+
+ @Override /* SerializerBuilder */
+ public XmlSerializerBuilder sortMaps(boolean value) {
+ super.sortMaps(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beansRequireDefaultConstructor(boolean value) {
+ super.beansRequireDefaultConstructor(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beansRequireSerializable(boolean value) {
+ super.beansRequireSerializable(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beansRequireSettersForGetters(boolean value) {
+ super.beansRequireSettersForGetters(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beansRequireSomeProperties(boolean value) {
+ super.beansRequireSomeProperties(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
+ super.beanMapPutReturnsOldValue(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beanConstructorVisibility(Visibility value) {
+ super.beanConstructorVisibility(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beanClassVisibility(Visibility value) {
+ super.beanClassVisibility(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beanFieldVisibility(Visibility value) {
+ super.beanFieldVisibility(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder methodVisibility(Visibility value) {
+ super.methodVisibility(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder useJavaBeanIntrospector(boolean value) {
+ super.useJavaBeanIntrospector(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder useInterfaceProxies(boolean value) {
+ super.useInterfaceProxies(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
+ super.ignoreUnknownBeanProperties(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
+ super.ignoreUnknownNullBeanProperties(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
+ super.ignorePropertiesWithoutSetters(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
+ super.ignoreInvocationExceptionsOnGetters(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
+ super.ignoreInvocationExceptionsOnSetters(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder sortProperties(boolean value) {
+ super.sortProperties(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder notBeanPackages(String...values) {
+ super.notBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder notBeanPackages(Collection<String> values) {
+ super.notBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder setNotBeanPackages(String...values) {
+ super.setNotBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder setNotBeanPackages(Collection<String> values) {
+ super.setNotBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removeNotBeanPackages(String...values) {
+ super.removeNotBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removeNotBeanPackages(Collection<String> values) {
+ super.removeNotBeanPackages(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder notBeanClasses(Class<?>...values) {
+ super.notBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder notBeanClasses(Collection<Class<?>> values) {
+ super.notBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder setNotBeanClasses(Class<?>...values) {
+ super.setNotBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder setNotBeanClasses(Collection<Class<?>> values) {
+ super.setNotBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removeNotBeanClasses(Class<?>...values) {
+ super.removeNotBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removeNotBeanClasses(Collection<Class<?>> values) {
+ super.removeNotBeanClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beanFilters(Class<?>...values) {
+ super.beanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beanFilters(Collection<Class<?>> values) {
+ super.beanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder setBeanFilters(Class<?>...values) {
+ super.setBeanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder setBeanFilters(Collection<Class<?>> values) {
+ super.setBeanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removeBeanFilters(Class<?>...values) {
+ super.removeBeanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removeBeanFilters(Collection<Class<?>> values) {
+ super.removeBeanFilters(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder pojoSwaps(Class<?>...values) {
+ super.pojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder pojoSwaps(Collection<Class<?>> values) {
+ super.pojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder setPojoSwaps(Class<?>...values) {
+ super.setPojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder setPojoSwaps(Collection<Class<?>> values) {
+ super.setPojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removePojoSwaps(Class<?>...values) {
+ super.removePojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removePojoSwaps(Collection<Class<?>> values) {
+ super.removePojoSwaps(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder implClasses(Map<Class<?>,Class<?>> values) {
+ super.implClasses(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public <T> XmlSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
+ super.implClass(interfaceClass, implClass);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beanDictionary(Class<?>...values) {
+ super.beanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beanDictionary(Collection<Class<?>> values) {
+ super.beanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder setBeanDictionary(Class<?>...values) {
+ super.setBeanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder setBeanDictionary(Collection<Class<?>> values) {
+ super.setBeanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removeFromBeanDictionary(Class<?>...values) {
+ super.removeFromBeanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removeFromBeanDictionary(Collection<Class<?>> values) {
+ super.removeFromBeanDictionary(values);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder beanTypePropertyName(String value) {
+ super.beanTypePropertyName(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder defaultParser(Class<?> value) {
+ super.defaultParser(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder locale(Locale value) {
+ super.locale(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder timeZone(TimeZone value) {
+ super.timeZone(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder mediaType(MediaType value) {
+ super.mediaType(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder debug(boolean value) {
+ super.debug(value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder property(String name, Object value) {
+ super.property(name, value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder properties(Map<String,Object> properties) {
+ super.properties(properties);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder addToProperty(String name, Object value) {
+ super.addToProperty(name, value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder putToProperty(String name, Object key, Object value) {
+ super.putToProperty(name, key, value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder putToProperty(String name, Object value) {
+ super.putToProperty(name, value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder removeFromProperty(String name, Object value) {
+ super.removeFromProperty(name, value);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder classLoader(ClassLoader classLoader) {
+ super.classLoader(classLoader);
+ return this;
+ }
+
+ @Override /* CoreObjectBuilder */
+ public XmlSerializerBuilder apply(PropertyStore copyFrom) {
+ super.apply(copyFrom);
+ return this;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/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 cac3b8a..a431fc6 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
@@ -18,10 +18,10 @@ import org.apache.juneau.serializer.*;
/**
* Configurable properties on the {@link XmlSerializer} class.
* <p>
- * Context properties are set by calling {@link ContextFactory#setProperty(String, Object)} on the context factory
- * returned {@link CoreApi#getContextFactory()}.
+ * Context properties are set by calling {@link PropertyStore#setProperty(String, Object)} on the property store
+ * passed into the constructor.
* <p>
- * See {@link ContextFactory} for more information about context properties.
+ * See {@link PropertyStore} for more information about context properties.
*
* <h5 class='section'>Inherited configurable properties:</h5>
* <ul class='javahierarchy'>
@@ -174,19 +174,19 @@ public class XmlSerializerContext extends SerializerContext {
/**
* Constructor.
* <p>
- * Typically only called from {@link ContextFactory#getContext(Class)}.
+ * Typically only called from {@link PropertyStore#getContext(Class)}.
*
- * @param cf The factory that created this context.
+ * @param ps The property store that created this context.
*/
- public XmlSerializerContext(ContextFactory cf) {
- super(cf);
- autoDetectNamespaces = cf.getProperty(XML_autoDetectNamespaces, boolean.class, true);
- enableNamespaces = cf.getProperty(XML_enableNamespaces, boolean.class, false);
- addNamespaceUrlsToRoot = cf.getProperty(XML_addNamespaceUrisToRoot, boolean.class, false);
- defaultNamespace = cf.getProperty(XML_defaultNamespace, String.class, "{juneau:'http://www.apache.org/2013/Juneau'}");
- xsNamespace = cf.getProperty(XML_xsNamespace, Namespace.class, new Namespace("xs", "http://www.w3.org/2001/XMLSchema"));
- namespaces = cf.getProperty(XML_namespaces, Namespace[].class, new Namespace[0]);
- addBeanTypeProperties = cf.getProperty(XML_addBeanTypeProperties, boolean.class, cf.getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
+ public XmlSerializerContext(PropertyStore ps) {
+ super(ps);
+ autoDetectNamespaces = ps.getProperty(XML_autoDetectNamespaces, boolean.class, true);
+ enableNamespaces = ps.getProperty(XML_enableNamespaces, boolean.class, false);
+ addNamespaceUrlsToRoot = ps.getProperty(XML_addNamespaceUrisToRoot, boolean.class, false);
+ defaultNamespace = ps.getProperty(XML_defaultNamespace, String.class, "{juneau:'http://www.apache.org/2013/Juneau'}");
+ xsNamespace = ps.getProperty(XML_xsNamespace, Namespace.class, new Namespace("xs", "http://www.w3.org/2001/XMLSchema"));
+ namespaces = ps.getProperty(XML_namespaces, Namespace[].class, new Namespace[0]);
+ addBeanTypeProperties = ps.getProperty(XML_addBeanTypeProperties, boolean.class, ps.getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
}
@Override /* Context */
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/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 36c8a03..824b01e 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
@@ -53,7 +53,7 @@ public class XmlSerializerSession extends SerializerSession {
* @param output The output object. See {@link JsonSerializerSession#getWriter()} for valid class types.
* @param op The override properties.
* These override any context properties defined in the context.
- * @param javaMethod The java method that called this parser, usually the method in a REST servlet.
+ * @param javaMethod The java method that called this serializer, usually the method in a REST servlet.
* @param locale The session locale.
* If <jk>null</jk>, then the locale defined on the context is used.
* @param timeZone The session timezone.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/package.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/package.html b/juneau-core/src/main/java/org/apache/juneau/xml/package.html
index 5b91afe..4d9d595 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/package.html
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/package.html
@@ -237,10 +237,11 @@
</p>
<p class='bcode'>
<jc>// Create a new serializer with readable output, no namespaces yet.</jc>
- XmlSerializer s = <jk>new</jk> XmlSerializer()
- .setUseIndentation(<jk>true</jk>)
- .setQuoteChar(<js>'\''</js>)
- .setEnableNamespaces(<jk>false</jk>);
+ XmlSerializer s = <jk>new</jk> XmlSerializerBuilder()
+ .ws() <jc>// or .useWhitespace(true)</jc>
+ .sq() <jc>// or .quoteChar('\'')</jc>
+ .ns() <jc>// or .enableNamespaces(false)</jc>
+ .build();
<jc>// Create our bean.</jc>
Person p = <jk>new</jk> Person(1, <js>"John Smith"</js>);
@@ -253,8 +254,10 @@
</p>
<p class='bcode'>
<jc>// Create a new serializer with readable output, no namespaces yet, but use cloning method.</jc>
- XmlSerializer s = XmlSerializer.<jsf>DEFAULT_SQ_READABLE</jsf>.clone()
- .setEnableNamespaces(<jk>false</jk>);
+ XmlSerializer s = XmlSerializer.<jsf>DEFAULT_SQ_READABLE</jsf>
+ .builder()
+ .ns()
+ .build();
</p>
<p>
The code above produces the following output:
@@ -1983,10 +1986,7 @@
<p class='bcode'>
<jc>// Create a new serializer with readable output, this time with namespaces enabled.</jc>
<jc>// Note that this is identical to XmlSerializer.DEFAULT_NS_SQ_READABLE.</jc>
- XmlSerializer s = <jk>new</jk> XmlSerializer()
- .setEnableNamespaces(<jk>true</jk>)
- .setUseIndentation(<jk>true</jk>)
- .setQuoteChar(<js>'\''</js>);
+ XmlSerializer s = <jk>new</jk> XmlSerializerBuilder().ns().ws().sq().build();
<jc>// Create our bean.</jc>
Person p = <jk>new</jk> Person(1, <js>"John Smith"</js>);
@@ -2072,11 +2072,12 @@
all the elements do not need to be prefixed:
<p class='bcode'>
<jc>// Create a new serializer with readable output, this time with namespaces enabled.</jc>
- XmlSerializer s = <jk>new</jk> XmlSerializer()
- .setUseIndentation(<jk>true</jk>)
- .setQuoteChar(<js>'\''</js>)
- .setEnableNamespaces(<jk>true</jk>)
- .setDefaultNamespaceUri(<js>"http://www.apache.org/person/"</js>);
+ XmlSerializer s = <jk>new</jk> XmlSerializerBuilder()
+ .ws()
+ .sq()
+ .ns()
+ .defaultNamespaceUri(<js>"http://www.apache.org/person/"</js>)
+ .build();
</p>
<p>
This produces the following equivalent where the elements don't need prefixes since they're already in the default document namespace:
@@ -2106,11 +2107,12 @@
</p>
<p class='bcode'>
<jc>// Create a new serializer with readable output, this time with namespaces enabled.</jc>
- XmlSerializer s = <jk>new</jk> XmlSerializer()
- .setUseIndentation(<jk>true</jk>)
- .setQuoteChar(<js>'\''</js>)
- .setAutoDetectNamespaces(<jk>false</jk>)
- .setNamespaces(<js>"{per:'http://www.apache.org/person/'}"</js>);
+ XmlSerializer s = <jk>new</jk> XmlSerializerBuilder()
+ .ws()
+ .sq()
+ .autoDetectNamespaces(<jk>false</jk>)
+ .namespaces(<js>"{per:'http://www.apache.org/person/'}"</js>)
+ .build();
</p>
</div>
@@ -2240,9 +2242,7 @@
</p>
<p class='bcode'>
<jc>// Create a new serializer with readable output.</jc>
- XmlSerializer s = <jk>new</jk> XmlSerializer()
- .setUseIndentation(<jk>true</jk>)
- .setQuoteChar(<js>'\''</js>);
+ XmlSerializer s = <jk>new</jk> XmlSerializerBuilder().ws().sq().build();
<jc>// Create our bean.</jc>
Person p = <jk>new</jk> Person(1, <js>"John Smith"</js>, <js>"http://sample/addressBook/person/1"</js>, <js>"http://sample/addressBook"</js>, <js>"Aug 12, 1946"</js>);
@@ -2353,11 +2353,12 @@
</p>
<p class='bcode'>
<jc>// Create a new serializer with readable output.</jc>
- XmlSerializer s = <jk>new</jk> XmlSerializer()
- .setUseIndentation(<jk>true</jk>)
- .setEnableNamespaces(<jk>true</jk>)
- .setAddNamespaceUrisToRoot(<jk>true</jk>)
- .setQuoteChar(<js>'\''</js>);
+ XmlSerializer s = <jk>new</jk> XmlSerializerBuilder()
+ .ws()
+ .ns()
+ .sq()
+ .addNamespaceUrisToRoot(<jk>true</jk>)
+ .build();
<jc>// Create the equivalent schema serializer.</jc>
XmlSchemaSerializer ss = s.getSchemaSerializer();
@@ -2655,11 +2656,12 @@
</p>
<p class='bcode'>
<jc>// Create a new serializer with readable output.</jc>
- XmlSerializer s = <jk>new</jk> XmlSerializer()
- .setUseIndentation(<jk>true</jk>)
- .setQuoteChar(<js>'\''</js>)
- .setEnableNamespaces(<jk>false</jk>)
- .setDetectRecursions(<jk>true</jk>);
+ XmlSerializer s = <jk>new</jk> XmlSerializerBuilder()
+ .ws()
+ .sq()
+ .ns()
+ .detectRecursions(<jk>true</jk>)
+ .build();
<jc>// Create a recursive loop.</jc>
A a = <jk>new</jk> A();
@@ -2735,10 +2737,7 @@
</p>
<p class='bcode'>
<jc>// Create a new serializer with readable output.</jc>
- XmlSerializer s = <jk>new</jk> XmlSerializer()
- .setEnableNamespaces(<jk>true</jk>)
- .setUseIndentation(<jk>true</jk>)
- .setQuoteChar(<js>'\''</js>);
+ XmlSerializer s = <jk>new</jk> XmlSerializerBuilder().ws().sq().ns().build();
<jc>// Create our bean.</jc>
Person p = <jk>new</jk> Person(1, <js>"John Smith"</js>, <js>"http://sample/addressBook/person/1"</js>, <js>"http://sample/addressBook"</js>, <js>"Aug 12, 1946"</js>);
@@ -3191,7 +3190,7 @@
</p>
<p class='bcode'>
<jc>// Create a client to handle XML requests and responses.</jc>
- RestClient client = <jk>new</jk> RestClient(XmlSerializer.<jk>class</jk>, XmlParser.<jk>class</jk>);
+ RestClient client = <jk>new</jk> RestClientBuilder(XmlSerializer.<jk>class</jk>, XmlParser.<jk>class</jk>).build();
</p>
<p>
The client handles all content negotiation based on the registered serializers and parsers.