This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 6d2b74f Context API refactoring.
6d2b74f is described below
commit 6d2b74f1c1ff601b9b26aecea6e85feb6469c155
Author: JamesBognar <[email protected]>
AuthorDate: Mon Sep 27 13:30:19 2021 -0400
Context API refactoring.
---
.../java/org/apache/juneau/jena/RdfParser.java | 8 +-
.../java/org/apache/juneau/jena/RdfSerializer.java | 10 +-
.../main/java/org/apache/juneau/jena/RdfUtils.java | 14 +-
.../java/org/apache/juneau/ContextBuilder.java | 14 ++
.../juneau/html/HtmlDocSerializerBuilder.java | 12 --
.../juneau/html/HtmlSchemaSerializerBuilder.java | 12 --
.../apache/juneau/html/HtmlSerializerBuilder.java | 12 --
.../html/HtmlStrippedDocSerializerBuilder.java | 12 --
.../org/apache/juneau/json/JsonSerializer.java | 5 +-
.../juneau/soap/SoapXmlSerializerBuilder.java | 12 --
.../main/java/org/apache/juneau/xml/Namespace.java | 12 +-
.../org/apache/juneau/xml/XmlParserBuilder.java | 15 ++
.../java/org/apache/juneau/xml/XmlSerializer.java | 223 +++------------------
.../apache/juneau/xml/XmlSerializerBuilder.java | 142 +++++++++----
.../apache/juneau/xml/XmlSerializerSession.java | 18 +-
.../main/java/org/apache/juneau/xml/XmlUtils.java | 14 +-
.../apache/juneau/xml/annotation/XmlConfig.java | 20 +-
.../juneau/xml/annotation/XmlConfigAnnotation.java | 14 +-
.../examples/core/xml/XmlConfigurationExample.java | 6 +-
.../test/java/org/apache/juneau/ComboInput.java | 10 +-
.../java/org/apache/juneau/ComboRoundTripTest.java | 23 ++-
.../juneau/SerializerPropertiesComboTest.java | 5 +-
.../java/org/apache/juneau/dto/atom/AtomTest.java | 2 +-
.../test/java/org/apache/juneau/xml/XmlTest.java | 60 +++---
24 files changed, 277 insertions(+), 398 deletions(-)
diff --git
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
index 04e48f8..39ad615 100644
---
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
+++
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
@@ -47,8 +47,8 @@ import org.apache.juneau.xml.*;
public class RdfParser extends ReaderParser implements RdfCommon,
RdfMetaProvider {
private static final Namespace
- DEFAULT_JUNEAU_NS = Namespace.create("j",
"http://www.apache.org/juneau/"),
- DEFAULT_JUNEAUBP_NS = Namespace.create("jp",
"http://www.apache.org/juneaubp/");
+ DEFAULT_JUNEAU_NS = Namespace.of("j",
"http://www.apache.org/juneau/"),
+ DEFAULT_JUNEAUBP_NS = Namespace.of("jp",
"http://www.apache.org/juneaubp/");
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -114,8 +114,8 @@ public class RdfParser extends ReaderParser implements
RdfCommon, RdfMetaProvide
trimWhitespace =
cp.getBoolean(RDF_trimWhitespace).orElse(false);
looseCollections =
cp.getBoolean(RDF_looseCollections).orElse(false);
rdfLanguage =
cp.getString(RDF_language).orElse("RDF/XML-ABBREV");
- juneauNs = cp.getInstance(RDF_juneauNs,
Namespace.class).orElse(DEFAULT_JUNEAU_NS);
- juneauBpNs = cp.getInstance(RDF_juneauBpNs,
Namespace.class).orElse(DEFAULT_JUNEAUBP_NS);
+ juneauNs = cp.getInstance(RDF_juneauNs,
String.class).map(Namespace::of).orElse(DEFAULT_JUNEAU_NS);
+ juneauBpNs = cp.getInstance(RDF_juneauBpNs,
String.class).map(Namespace::of).orElse(DEFAULT_JUNEAUBP_NS);
collectionFormat = cp.get(RDF_collectionFormat,
RdfCollectionFormat.class).orElse(RdfCollectionFormat.DEFAULT);
ASortedMap<String,Object> m = ASortedMap.create();
diff --git
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
index 5d7271f..ba062c7 100644
---
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
+++
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
@@ -46,8 +46,8 @@ import org.apache.juneau.xml.annotation.*;
public class RdfSerializer extends WriterSerializer implements RdfCommon,
RdfMetaProvider {
private static final Namespace
- DEFAULT_JUNEAU_NS = Namespace.create("j",
"http://www.apache.org/juneau/"),
- DEFAULT_JUNEAUBP_NS = Namespace.create("jp",
"http://www.apache.org/juneaubp/");
+ DEFAULT_JUNEAU_NS = Namespace.of("j",
"http://www.apache.org/juneau/"),
+ DEFAULT_JUNEAUBP_NS = Namespace.of("jp",
"http://www.apache.org/juneaubp/");
//-------------------------------------------------------------------------------------------------------------------
// Configurable properties
@@ -262,10 +262,10 @@ public class RdfSerializer extends WriterSerializer
implements RdfCommon, RdfMet
looseCollections =
cp.getBoolean(RDF_looseCollections).orElse(false);
autoDetectNamespaces = !
cp.getBoolean(RDF_disableAutoDetectNamespaces).orElse(false);
rdfLanguage =
cp.getString(RDF_language).orElse("RDF/XML-ABBREV");
- juneauNs = cp.get(RDF_juneauNs,
Namespace.class).orElse(DEFAULT_JUNEAU_NS);
- juneauBpNs = cp.get(RDF_juneauBpNs,
Namespace.class).orElse(DEFAULT_JUNEAUBP_NS);
+ juneauNs = cp.get(RDF_juneauNs,
String.class).map(Namespace::of).orElse(DEFAULT_JUNEAU_NS);
+ juneauBpNs = cp.get(RDF_juneauBpNs,
String.class).map(Namespace::of).orElse(DEFAULT_JUNEAUBP_NS);
collectionFormat = cp.get(RDF_collectionFormat,
RdfCollectionFormat.class).orElse(RdfCollectionFormat.DEFAULT);
- namespaces = cp.get(RDF_namespaces,
Namespace[].class).orElse(new Namespace[0]);
+ namespaces = cp.get(RDF_namespaces,
String[].class).map(Namespace::createArray).orElse(new Namespace[0]);
addBeanTypes = cp.getFirstBoolean(RDF_addBeanTypes,
SERIALIZER_addBeanTypes).orElse(false);
ASortedMap<String,Object> m = ASortedMap.create();
diff --git
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfUtils.java
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfUtils.java
index cd59930..c5576c6 100644
---
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfUtils.java
+++
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfUtils.java
@@ -54,20 +54,20 @@ public class RdfUtils {
// If both prefix and namespace specified, use that Namespace
mapping.
if (! (prefix.isEmpty() || ns.isEmpty()))
- return Namespace.create(prefix, ns);
+ return Namespace.of(prefix, ns);
// If only prefix specified, need to search for namespaceURI.
if (! prefix.isEmpty()) {
if (rdfs != null)
for (Rdf rdf2 : rdfs)
if (rdf2.prefix().equals(prefix) && !
rdf2.namespace().isEmpty())
- return Namespace.create(prefix,
rdf2.namespace());
+ return Namespace.of(prefix,
rdf2.namespace());
for (RdfSchema schema : schemas) {
if (schema.prefix().equals(prefix) && !
schema.namespace().isEmpty())
- return Namespace.create(prefix,
schema.namespace());
+ return Namespace.of(prefix,
schema.namespace());
for (RdfNs rdfNs : schema.rdfNs())
if (rdfNs.prefix().equals(prefix))
- return Namespace.create(prefix,
rdfNs.namespaceURI());
+ return Namespace.of(prefix,
rdfNs.namespaceURI());
}
throw new BeanRuntimeException("Found @Rdf.prefix
annotation with no matching URI. prefix='"+prefix+"'");
}
@@ -77,13 +77,13 @@ public class RdfUtils {
if (rdfs != null)
for (Rdf rdf2 : rdfs)
if (rdf2.namespace().equals(ns) && !
rdf2.prefix().isEmpty())
- return
Namespace.create(rdf2.prefix(), ns);
+ return
Namespace.of(rdf2.prefix(), ns);
for (RdfSchema schema : schemas) {
if (schema.namespace().equals(ns) && !
schema.prefix().isEmpty())
- return
Namespace.create(schema.prefix(), ns);
+ return Namespace.of(schema.prefix(),
ns);
for (RdfNs rdfNs : schema.rdfNs())
if (rdfNs.namespaceURI().equals(ns))
- return
Namespace.create(rdfNs.prefix(), ns);
+ return
Namespace.of(rdfNs.prefix(), ns);
}
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
index a9aa9ff..9074b87 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
@@ -132,6 +132,20 @@ public abstract class ContextBuilder {
}
/**
+ * Apply a consumer to this builder.
+ *
+ * @param subtype The builder subtype that this consumer can be applied
to.
+ * @param consumer The consumer.
+ * @return This object.
+ */
+ @SuppressWarnings("unchecked")
+ public <T extends ContextBuilder> ContextBuilder apply(Class<T>
subtype, Consumer<T> consumer) {
+ if (subtype.isInstance(this))
+ consumer.accept((T)this);
+ return this;
+ }
+
+ /**
* Associates a context class with this builder.
*
* @param value The context class that this builder should create.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
index 8cfd10f..02cc9d9 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
@@ -1286,12 +1286,6 @@ public class HtmlDocSerializerBuilder extends
HtmlStrippedDocSerializerBuilder {
}
@Override /* GENERATED - XmlSerializerBuilder */
- public HtmlDocSerializerBuilder defaultNamespace(String value) {
- super.defaultNamespace(value);
- return this;
- }
-
- @Override /* GENERATED - XmlSerializerBuilder */
public HtmlDocSerializerBuilder disableAutoDetectNamespaces() {
super.disableAutoDetectNamespaces();
return this;
@@ -1304,12 +1298,6 @@ public class HtmlDocSerializerBuilder extends
HtmlStrippedDocSerializerBuilder {
}
@Override /* GENERATED - XmlSerializerBuilder */
- public HtmlDocSerializerBuilder namespaces(String...values) {
- super.namespaces(values);
- return this;
- }
-
- @Override /* GENERATED - XmlSerializerBuilder */
public HtmlDocSerializerBuilder namespaces(Namespace...values) {
super.namespaces(values);
return this;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
index 8f713f9..e1ab4b3 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
@@ -829,12 +829,6 @@ public class HtmlSchemaSerializerBuilder extends
HtmlSerializerBuilder {
}
@Override /* GENERATED - XmlSerializerBuilder */
- public HtmlSchemaSerializerBuilder defaultNamespace(String value) {
- super.defaultNamespace(value);
- return this;
- }
-
- @Override /* GENERATED - XmlSerializerBuilder */
public HtmlSchemaSerializerBuilder disableAutoDetectNamespaces() {
super.disableAutoDetectNamespaces();
return this;
@@ -847,12 +841,6 @@ public class HtmlSchemaSerializerBuilder extends
HtmlSerializerBuilder {
}
@Override /* GENERATED - XmlSerializerBuilder */
- public HtmlSchemaSerializerBuilder namespaces(String...values) {
- super.namespaces(values);
- return this;
- }
-
- @Override /* GENERATED - XmlSerializerBuilder */
public HtmlSchemaSerializerBuilder namespaces(Namespace...values) {
super.namespaces(values);
return this;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
index 3ca9b39..68133b9 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
@@ -1117,12 +1117,6 @@ public class HtmlSerializerBuilder extends
XmlSerializerBuilder {
}
@Override /* GENERATED - XmlSerializerBuilder */
- public HtmlSerializerBuilder defaultNamespace(String value) {
- super.defaultNamespace(value);
- return this;
- }
-
- @Override /* GENERATED - XmlSerializerBuilder */
public HtmlSerializerBuilder disableAutoDetectNamespaces() {
super.disableAutoDetectNamespaces();
return this;
@@ -1135,12 +1129,6 @@ public class HtmlSerializerBuilder extends
XmlSerializerBuilder {
}
@Override /* GENERATED - XmlSerializerBuilder */
- public HtmlSerializerBuilder namespaces(String...values) {
- super.namespaces(values);
- return this;
- }
-
- @Override /* GENERATED - XmlSerializerBuilder */
public HtmlSerializerBuilder namespaces(Namespace...values) {
super.namespaces(values);
return this;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
index 63d4008..0286eec 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
@@ -649,12 +649,6 @@ public class HtmlStrippedDocSerializerBuilder extends
HtmlSerializerBuilder {
}
@Override /* GENERATED - XmlSerializerBuilder */
- public HtmlStrippedDocSerializerBuilder defaultNamespace(String value) {
- super.defaultNamespace(value);
- return this;
- }
-
- @Override /* GENERATED - XmlSerializerBuilder */
public HtmlStrippedDocSerializerBuilder disableAutoDetectNamespaces() {
super.disableAutoDetectNamespaces();
return this;
@@ -667,12 +661,6 @@ public class HtmlStrippedDocSerializerBuilder extends
HtmlSerializerBuilder {
}
@Override /* GENERATED - XmlSerializerBuilder */
- public HtmlStrippedDocSerializerBuilder namespaces(String...values) {
- super.namespaces(values);
- return this;
- }
-
- @Override /* GENERATED - XmlSerializerBuilder */
public HtmlStrippedDocSerializerBuilder namespaces(Namespace...values) {
super.namespaces(values);
return this;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
index 2cd0f18..16c5630 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
@@ -142,6 +142,7 @@ public class JsonSerializer extends WriterSerializer
implements JsonMetaProvider
final boolean addBeanTypesJson, escapeSolidus, simpleMode;
+ private final boolean addBeanTypes;
private final Map<ClassMeta<?>,JsonClassMeta> jsonClassMetas = new
ConcurrentHashMap<>();
private final Map<BeanPropertyMeta,JsonBeanPropertyMeta>
jsonBeanPropertyMetas = new ConcurrentHashMap<>();
@@ -157,6 +158,8 @@ public class JsonSerializer extends WriterSerializer
implements JsonMetaProvider
addBeanTypesJson = builder.addBeanTypesJson;
simpleMode = builder.simpleMode;
escapeSolidus = builder.escapeSolidus;
+
+ addBeanTypes = addBeanTypesJson || super.isAddBeanTypes();
}
@Override /* Context */
@@ -245,7 +248,7 @@ public class JsonSerializer extends WriterSerializer
implements JsonMetaProvider
*/
@Override
protected final boolean isAddBeanTypes() {
- return addBeanTypesJson || super.isAddBeanTypes();
+ return addBeanTypes;
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
index e3c1c14..ce77217 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
@@ -680,12 +680,6 @@ public class SoapXmlSerializerBuilder extends
XmlSerializerBuilder {
}
@Override /* GENERATED - XmlSerializerBuilder */
- public SoapXmlSerializerBuilder defaultNamespace(String value) {
- super.defaultNamespace(value);
- return this;
- }
-
- @Override /* GENERATED - XmlSerializerBuilder */
public SoapXmlSerializerBuilder disableAutoDetectNamespaces() {
super.disableAutoDetectNamespaces();
return this;
@@ -698,12 +692,6 @@ public class SoapXmlSerializerBuilder extends
XmlSerializerBuilder {
}
@Override /* GENERATED - XmlSerializerBuilder */
- public SoapXmlSerializerBuilder namespaces(String...values) {
- super.namespaces(values);
- return this;
- }
-
- @Override /* GENERATED - XmlSerializerBuilder */
public SoapXmlSerializerBuilder namespaces(Namespace...values) {
super.namespaces(values);
return this;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/Namespace.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/Namespace.java
index 90bce08..740e4c7 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/Namespace.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/Namespace.java
@@ -44,7 +44,7 @@ public final class Namespace {
* @param uri The namespace URI. See {@link Namespace#getUri()}.
* @return The namespace object.
*/
- public static Namespace create(String name, String uri) {
+ public static Namespace of(String name, String uri) {
String key = name + ":" + uri;
Namespace n = CACHE.get(key);
if (n == null) {
@@ -61,16 +61,16 @@ public final class Namespace {
* @param key The key/pair string.
* @return The namespace object.
*/
- public static Namespace create(String key) {
+ public static Namespace of(String key) {
Namespace n = CACHE.get(key);
if (n != null)
return n;
int i = key.indexOf(':');
if (i == -1)
- return create(key, null);
+ return of(key, null);
if (key.startsWith("http://") || key.startsWith("https://"))
- return create(null, key);
- return create(key.substring(0, i).trim(),
key.substring(i+1).trim());
+ return of(null, key);
+ return of(key.substring(0, i).trim(),
key.substring(i+1).trim());
}
/**
@@ -92,7 +92,7 @@ public final class Namespace {
if (o instanceof Namespace)
return (Namespace)o;
if (o instanceof CharSequence)
- return create(o.toString());
+ return of(o.toString());
throw runtimeException("Invalid object type passed to
Namespace.create(Object): ''{0}''", className(o));
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
index 1f1c0c0..9f02106 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
@@ -45,6 +45,11 @@ public class XmlParserBuilder extends ReaderParserBuilder {
super();
consumes("text/xml,application/xml");
type(XmlParser.class);
+ preserveRootElement = env("XmlParser.preserveRootElement",
false);
+ validating = env("XmlParser.validating", false);
+ eventAllocator = null;
+ reporter = null;
+ resolver = null;
}
/**
@@ -54,6 +59,11 @@ public class XmlParserBuilder extends ReaderParserBuilder {
*/
protected XmlParserBuilder(XmlParser copyFrom) {
super(copyFrom);
+ preserveRootElement = copyFrom.preserveRootElement;
+ validating = copyFrom.validating;
+ eventAllocator = copyFrom.eventAllocator;
+ reporter = copyFrom.reporter;
+ resolver = copyFrom.resolver;
}
/**
@@ -63,6 +73,11 @@ public class XmlParserBuilder extends ReaderParserBuilder {
*/
protected XmlParserBuilder(XmlParserBuilder copyFrom) {
super(copyFrom);
+ preserveRootElement = copyFrom.preserveRootElement;
+ validating = copyFrom.validating;
+ eventAllocator = copyFrom.eventAllocator;
+ reporter = copyFrom.reporter;
+ resolver = copyFrom.resolver;
}
@Override /* ContextBuilder */
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index 69df583..3ff439a 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -12,6 +12,8 @@
//
***************************************************************************************************************************
package org.apache.juneau.xml;
+import static java.util.Optional.*;
+
import java.util.*;
import java.util.concurrent.*;
@@ -119,181 +121,7 @@ import org.apache.juneau.serializer.*;
public class XmlSerializer extends WriterSerializer implements XmlMetaProvider
{
//-------------------------------------------------------------------------------------------------------------------
- // Configurable properties
-
//-------------------------------------------------------------------------------------------------------------------
-
- static final String PREFIX = "XmlSerializer";
-
- /**
- * Configuration property: Add <js>"_type"</js> properties when needed.
- *
- * <p>
- * If <jk>true</jk>, then <js>"_type"</js> properties will be added to
beans if their type cannot be inferred
- * through reflection.
- *
- * <p>
- * When present, this value overrides the {@link
#SERIALIZER_addBeanTypes} setting and is
- * provided to customize the behavior of specific serializers in a
{@link SerializerGroup}.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.xml.XmlSerializer#XML_addBeanTypes XML_addBeanTypes}
- * <li><b>Name:</b> <js>"XmlSerializer.addBeanTypes.b"</js>
- * <li><b>Data type:</b> <jk>boolean</jk>
- * <li><b>System property:</b> <c>XmlSerializer.addBeanTypes</c>
- * <li><b>Environment variable:</b>
<c>XMLSERIALIZER_ADDBEANTYPES</c>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.xml.annotation.XmlConfig#addBeanTypes()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.xml.XmlSerializerBuilder#addBeanTypes()}
- * </ul>
- * </ul>
- */
- public static final String XML_addBeanTypes = PREFIX +
".addBeanTypes.b";
-
- /**
- * Configuration property: Add namespace URLs to the root element.
- *
- * <p>
- * Use this setting to add {@code xmlns:x} attributes to the root
element for the default and all mapped namespaces.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.xml.XmlSerializer#XML_addNamespaceUrisToRoot
XML_addNamespaceUrisToRoot}
- * <li><b>Name:</b>
<js>"XmlSerializer.addNamespaceUrisToRoot.b"</js>
- * <li><b>Data type:</b> <jk>boolean</jk>
- * <li><b>System property:</b>
<c>XmlSerializer.addNamespaceUrisToRoot</c>
- * <li><b>Environment variable:</b>
<c>XMLSERIALIZER_ADDNAMESPACEURISTOROOT</c>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.xml.annotation.XmlConfig#addNamespaceUrisToRoot()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.xml.XmlSerializerBuilder#addNamespaceUrisToRoot()}
- * </ul>
- * </ul>
- */
- public static final String XML_addNamespaceUrisToRoot = PREFIX +
".addNamespaceUrisToRoot.b";
-
- /**
- * Configuration property: Default namespace.
- *
- * <p>
- * Specifies the default namespace URI for this document.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.xml.XmlSerializer#XML_defaultNamespace XML_defaultNamespace}
- * <li><b>Name:</b> <js>"XmlSerializer.defaultNamespace.s"</js>
- * <li><b>Data type:</b> {@link org.apache.juneau.xml.Namespace}
- * <li><b>System property:</b>
<c>XmlSerializer.defaultNamespace</c>
- * <li><b>Environment variable:</b>
<c>XMLSERIALIZER_DEFAULTNAMESPACE</c>
- * <li><b>Default:</b> <js>"juneau:
http://www.apache.org/2013/Juneau"</js>
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.xml.annotation.XmlConfig#defaultNamespace()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.xml.XmlSerializerBuilder#defaultNamespace(String)}
- * </ul>
- * </ul>
- */
- public static final String XML_defaultNamespace = PREFIX +
".defaultNamespace.s";
-
- /**
- * Configuration property: Don't auto-detect namespace usage.
- *
- * <p>
- * Don't detect namespace usage before serialization.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.xml.XmlSerializer#XML_disableAutoDetectNamespaces
XML_disableAutoDetectNamespaces}
- * <li><b>Name:</b>
<js>"XmlSerializer.disableAutoDetectNamespaces.b"</js>
- * <li><b>Data type:</b> <jk>boolean</jk>
- * <li><b>System property:</b>
<c>XmlSerializer.disableAutoDetectNamespaces</c>
- * <li><b>Environment variable:</b>
<c>XMLSERIALIZER_DONTAUTODETECTNAMESPACES</c>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.xml.annotation.XmlConfig#disableAutoDetectNamespaces()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.xml.XmlSerializerBuilder#disableAutoDetectNamespaces()}
- * </ul>
- * </ul>
- */
- public static final String XML_disableAutoDetectNamespaces = PREFIX +
".disableAutoDetectNamespaces.b";
-
- /**
- * Configuration property: Enable support for XML namespaces.
- *
- * <p>
- * If not enabled, XML output will not contain any namespaces
regardless of any other settings.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.xml.XmlSerializer#XML_enableNamespaces XML_enableNamespaces}
- * <li><b>Name:</b> <js>"XmlSerializer.enableNamespaces.b"</js>
- * <li><b>Data type:</b> <jk>boolean</jk>
- * <li><b>System property:</b>
<c>XmlSerializer.enableNamespaces</c>
- * <li><b>Environment variable:</b>
<c>XMLSERIALIZER_ENABLENAMESPACES</c>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.xml.annotation.XmlConfig#enableNamespaces()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.xml.XmlSerializerBuilder#enableNamespaces()}
- * <li class='jm'>{@link
org.apache.juneau.xml.XmlSerializerBuilder#ns()}
- * </ul>
- * </ul>
- */
- public static final String XML_enableNamespaces = PREFIX +
".enableNamespaces.b";
-
- /**
- * Configuration property: Default namespaces.
- *
- * <p>
- * The default list of namespaces associated with this serializer.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.xml.XmlSerializer#XML_namespaces XML_namespaces}
- * <li><b>Name:</b> <js>"XmlSerializer.namespaces.ls"</js>
- * <li><b>Data type:</b> <c>Set<{@link
org.apache.juneau.xml.Namespace}></c>
- * <li><b>System property:</b> <c>XmlSerializer.namespaces</c>
- * <li><b>Environment variable:</b>
<c>XMLSERIALIZER_NAMESPACES</c>
- * <li><b>Default:</b> empty set
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.xml.annotation.XmlConfig#defaultNamespace()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.xml.XmlSerializerBuilder#defaultNamespace(String)}
- * </ul>
- * </ul>
- */
- public static final String XML_namespaces = PREFIX + ".namespaces.ls";
-
-
//-------------------------------------------------------------------------------------------------------------------
- // Predefined instances
+ // c
//-------------------------------------------------------------------------------------------------------------------
/** Default serializer without namespaces. */
@@ -314,9 +142,8 @@ public class XmlSerializer extends WriterSerializer
implements XmlMetaProvider {
/** Default serializer, single quotes, whitespace added. */
public static final XmlSerializer DEFAULT_NS_SQ_READABLE = new
NsSqReadable(create());
-
//-------------------------------------------------------------------------------------------------------------------
- // Predefined subclasses
+ // Static subclasses
//-------------------------------------------------------------------------------------------------------------------
/** Default serializer, single quotes. */
@@ -386,20 +213,23 @@ public class XmlSerializer extends WriterSerializer
implements XmlMetaProvider {
@SuppressWarnings("javadoc")
protected static final Namespace
- DEFAULT_JUNEAU_NAMESPACE = Namespace.create("juneau",
"http://www.apache.org/2013/Juneau"),
- DEFAULT_XS_NAMESPACE = Namespace.create("xs",
"http://www.w3.org/2001/XMLSchema");
+ DEFAULT_JUNEAU_NAMESPACE = Namespace.of("juneau",
"http://www.apache.org/2013/Juneau"),
+ DEFAULT_XS_NAMESPACE = Namespace.of("xs",
"http://www.w3.org/2001/XMLSchema");
//-------------------------------------------------------------------------------------------------------------------
// Instance
//-------------------------------------------------------------------------------------------------------------------
- private final boolean
+ final boolean
autoDetectNamespaces,
enableNamespaces,
addNamespaceUrlsToRoot,
- addBeanTypes;
- private final Namespace defaultNamespace;
- private final Namespace[] namespaces;
+ addBeanTypesXml;
+
+ final Namespace defaultNamespace;
+ final Namespace[] namespaces;
+
+ private final boolean addBeanTypes;
private final Map<ClassMeta<?>,XmlClassMeta> xmlClassMetas = new
ConcurrentHashMap<>();
private final Map<BeanMeta<?>,XmlBeanMeta> xmlBeanMetas = new
ConcurrentHashMap<>();
private final Map<BeanPropertyMeta,XmlBeanPropertyMeta>
xmlBeanPropertyMetas = new ConcurrentHashMap<>();
@@ -412,13 +242,14 @@ public class XmlSerializer extends WriterSerializer
implements XmlMetaProvider {
*/
protected XmlSerializer(XmlSerializerBuilder builder) {
super(builder);
- ContextProperties cp = getContextProperties();
- autoDetectNamespaces = !
cp.getBoolean(XML_disableAutoDetectNamespaces).orElse(false);
- enableNamespaces =
cp.getBoolean(XML_enableNamespaces).orElse(false);
- addNamespaceUrlsToRoot =
cp.getBoolean(XML_addNamespaceUrisToRoot).orElse(false);
- defaultNamespace = cp.getInstance(XML_defaultNamespace,
Namespace.class).orElse(DEFAULT_JUNEAU_NAMESPACE);
- addBeanTypes = cp.getFirstBoolean(XML_addBeanTypes,
SERIALIZER_addBeanTypes).orElse(false);
- namespaces = cp.getInstanceArray(XML_namespaces,
Namespace.class).orElse(new Namespace[0]);
+ autoDetectNamespaces = ! builder.disableAutoDetectNamespaces;
+ enableNamespaces = builder.enableNamespaces;
+ addNamespaceUrlsToRoot = builder.addNamespaceUrisToRoot;
+ addBeanTypesXml = builder.addBeanTypesXml;
+ defaultNamespace =
ofNullable(builder.defaultNamespace).orElse(DEFAULT_JUNEAU_NAMESPACE);
+ namespaces = ofNullable(builder.namespaces).map(x ->
x.toArray(new Namespace[0])).orElse(new Namespace[0]);
+
+ addBeanTypes = addBeanTypesXml || super.isAddBeanTypes();
}
@Override /* Context */
@@ -493,7 +324,7 @@ public class XmlSerializer extends WriterSerializer
implements XmlMetaProvider {
/**
* Add <js>"_type"</js> properties when needed.
*
- * @see #XML_addBeanTypes
+ * @see XmlSerializerBuilder#addBeanTypesXml()
* @return
* <jk>true</jk> if<js>"_type"</js> properties will be added to
beans if their type cannot be inferred
* through reflection.
@@ -506,7 +337,7 @@ public class XmlSerializer extends WriterSerializer
implements XmlMetaProvider {
/**
* Add namespace URLs to the root element.
*
- * @see #XML_addNamespaceUrisToRoot
+ * @see XmlSerializerBuilder#addNamespaceUrisToRoot()
* @return
* <jk>true</jk> if {@code xmlns:x} attributes are added to the
root element for the default and all mapped namespaces.
*/
@@ -517,7 +348,7 @@ public class XmlSerializer extends WriterSerializer
implements XmlMetaProvider {
/**
* Auto-detect namespace usage.
*
- * @see #XML_disableAutoDetectNamespaces
+ * @see XmlSerializerBuilder#disableAutoDetectNamespaces()
* @return
* <jk>true</jk> if namespace usage is detected before
serialization.
*/
@@ -528,7 +359,7 @@ public class XmlSerializer extends WriterSerializer
implements XmlMetaProvider {
/**
* Default namespace.
*
- * @see #XML_defaultNamespace
+ * @see XmlSerializerBuilder#defaultNamespace(Namespace)
* @return
* The default namespace URI for this document.
*/
@@ -539,7 +370,7 @@ public class XmlSerializer extends WriterSerializer
implements XmlMetaProvider {
/**
* Enable support for XML namespaces.
*
- * @see #XML_enableNamespaces
+ * @see XmlSerializerBuilder#enableNamespaces()
* @return
* <jk>false</jk> if XML output will not contain any namespaces
regardless of any other settings.
*/
@@ -550,7 +381,7 @@ public class XmlSerializer extends WriterSerializer
implements XmlMetaProvider {
/**
* Default namespaces.
*
- * @see #XML_namespaces
+ * @see XmlSerializerBuilder#namespaces(Namespace...)
* @return
* The default list of namespaces associated with this serializer.
*/
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
index b0a0de7..7d05a14 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
@@ -12,14 +12,13 @@
//
***************************************************************************************************************************
package org.apache.juneau.xml;
-import static org.apache.juneau.xml.XmlSerializer.*;
-
import java.lang.annotation.*;
import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
import org.apache.juneau.*;
+import org.apache.juneau.collections.*;
import org.apache.juneau.http.header.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.serializer.*;
@@ -31,6 +30,10 @@ import org.apache.juneau.serializer.*;
@FluentSetters
public class XmlSerializerBuilder extends WriterSerializerBuilder {
+ boolean addBeanTypesXml, addNamespaceUrisToRoot,
disableAutoDetectNamespaces, enableNamespaces;
+ Namespace defaultNamespace;
+ List<Namespace> namespaces;
+
/**
* Constructor, default settings.
*/
@@ -38,6 +41,13 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
super();
produces("text/xml");
type(XmlSerializer.class);
+ addBeanTypesXml = env("XmlSerializer.addBeanTypes", false);
+ addNamespaceUrisToRoot =
env("XmlSerializer.addNamespaceUrisToRoot", false);
+ disableAutoDetectNamespaces =
env("XmlSerializer.disableAutoDetectNamespaces", false);
+ enableNamespaces = env("XmlSerializer.enableNamespaces", false);
+ defaultNamespace = null;
+ namespaces = null;
+
}
/**
@@ -47,6 +57,12 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
*/
protected XmlSerializerBuilder(XmlSerializer copyFrom) {
super(copyFrom);
+ addBeanTypesXml = copyFrom.addBeanTypesXml;
+ addNamespaceUrisToRoot = copyFrom.addNamespaceUrlsToRoot;
+ disableAutoDetectNamespaces = ! copyFrom.autoDetectNamespaces;
+ enableNamespaces = copyFrom.enableNamespaces;
+ defaultNamespace = copyFrom.defaultNamespace;
+ namespaces = copyFrom.namespaces.length == 0 ? null :
AList.of(copyFrom.namespaces);
}
/**
@@ -56,6 +72,12 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
*/
protected XmlSerializerBuilder(XmlSerializerBuilder copyFrom) {
super(copyFrom);
+ addBeanTypesXml = copyFrom.addBeanTypesXml;
+ addNamespaceUrisToRoot = copyFrom.addNamespaceUrisToRoot;
+ disableAutoDetectNamespaces =
copyFrom.disableAutoDetectNamespaces;
+ enableNamespaces = copyFrom.enableNamespaces;
+ defaultNamespace = copyFrom.defaultNamespace;
+ namespaces = copyFrom.namespaces == null ? null :
AList.of(copyFrom.namespaces);
}
@Override /* ContextBuilder */
@@ -73,6 +95,36 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
//-----------------------------------------------------------------------------------------------------------------
/**
+ * Add <js>"_type"</js> properties when needed.
+ *
+ * <p>
+ * If <jk>true</jk>, then <js>"_type"</js> properties will be added to
beans if their type cannot be inferred
+ * through reflection.
+ *
+ * <p>
+ * When present, this value overrides the {@link
SerializerBuilder#addBeanTypes()} setting and is
+ * provided to customize the behavior of specific serializers in a
{@link SerializerGroup}.
+ *
+ * @return This object.
+ */
+ @FluentSetter
+ public XmlSerializerBuilder addBeanTypesXml() {
+ return addBeanTypesXml(true);
+ }
+
+ /**
+ * Same as {@link #addBeanTypesXml()} but allows you to explicitly
specify the value.
+ *
+ * @param value The value for this setting.
+ * @return This object.
+ */
+ @FluentSetter
+ public XmlSerializerBuilder addBeanTypesXml(boolean value) {
+ addBeanTypesXml = value;
+ return this;
+ }
+
+ /**
* Add namespace URLs to the root element.
*
* <p>
@@ -82,7 +134,6 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
* This setting is ignored if {@link #enableNamespaces()} is not
enabled.
*
* <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_addNamespaceUrisToRoot}
* <li class='link'>{@doc XmlNamespaces}
* </ul>
*
@@ -90,7 +141,19 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
*/
@FluentSetter
public XmlSerializerBuilder addNamespaceUrisToRoot() {
- return set(XML_addNamespaceUrisToRoot);
+ return addNamespaceUrisToRoot(true);
+ }
+
+ /**
+ * Same as {@link #addNamespaceUrisToRoot()} but allows you to
explicitly specify the value.
+ *
+ * @param value The value for this setting.
+ * @return This object.
+ */
+ @FluentSetter
+ public XmlSerializerBuilder addNamespaceUrisToRoot(boolean value) {
+ addNamespaceUrisToRoot = value;
+ return this;
}
/**
@@ -100,7 +163,7 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
* Don't detect namespace usage before serialization.
*
* <p>
- * Used in conjunction with {@link #XML_addNamespaceUrisToRoot} to
reduce the list of namespace URLs appended to the
+ * Used in conjunction with {@link
XmlSerializerBuilder#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>
@@ -108,17 +171,16 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
* the root element is serialized.
*
* <p>
- * This setting is ignored if {@link #XML_enableNamespaces} is not
enabled.
+ * This setting is ignored if {@link
XmlSerializerBuilder#enableNamespaces()} is not enabled.
*
* <ul class='notes'>
* <li>
* Auto-detection of namespaces can be costly
performance-wise.
* <br>In high-performance environments, it's recommended
that namespace detection be
- * disabled, and that namespaces be manually defined
through the {@link #XML_namespaces} property.
+ * disabled, and that namespaces be manually defined
through the {@link XmlSerializerBuilder#namespaces(Namespace...)} property.
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link
XmlSerializer#XML_disableAutoDetectNamespaces}
* <li class='link'>{@doc XmlNamespaces}
* </ul>
*
@@ -126,7 +188,19 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
*/
@FluentSetter
public XmlSerializerBuilder disableAutoDetectNamespaces() {
- return set(XML_disableAutoDetectNamespaces);
+ return disableAutoDetectNamespaces(true);
+ }
+
+ /**
+ * Same as {@link #disableAutoDetectNamespaces()} but allows you to
explicitly specify the value.
+ *
+ * @param value The value for this setting.
+ * @return This object.
+ */
+ @FluentSetter
+ public XmlSerializerBuilder disableAutoDetectNamespaces(boolean value) {
+ disableAutoDetectNamespaces = value;
+ return this;
}
/**
@@ -136,7 +210,6 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
* Specifies the default namespace URI for this document.
*
* <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_defaultNamespace}
* <li class='link'>{@doc XmlNamespaces}
* </ul>
*
@@ -146,8 +219,9 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
* @return This object (for method chaining).
*/
@FluentSetter
- public XmlSerializerBuilder defaultNamespace(String value) {
- return set(XML_defaultNamespace, value);
+ public XmlSerializerBuilder defaultNamespace(Namespace value) {
+ defaultNamespace = value;
+ return this;
}
/**
@@ -157,7 +231,6 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
* If not enabled, XML output will not contain any namespaces
regardless of any other settings.
*
* <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_enableNamespaces}
* <li class='link'>{@doc XmlNamespaces}
* </ul>
*
@@ -165,42 +238,32 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
*/
@FluentSetter
public XmlSerializerBuilder enableNamespaces() {
- return set(XML_enableNamespaces);
+ return enableNamespaces(true);
}
/**
- * Enable support for XML namespaces.
+ * Same as {@link #enableNamespaces()} but allows you to explicitly
specify the value.
*
- * <p>
- * Shortcut for calling <code>enableNamespaces(<jk>true</jk>)</code>.
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_enableNamespaces}
- * </ul>
- *
- * @return This object (for method chaining).
+ * @param value The value for this setting.
+ * @return This object.
*/
@FluentSetter
- public XmlSerializerBuilder ns() {
- return set(XML_enableNamespaces);
+ public XmlSerializerBuilder enableNamespaces(boolean value) {
+ enableNamespaces = value;
+ return this;
}
/**
- * Default namespaces.
+ * Enable support for XML namespaces.
*
* <p>
- * The default list of namespaces associated with this serializer.
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_namespaces}
- * </ul>
+ * Shortcut for calling <code>enableNamespaces(<jk>true</jk>)</code>.
*
- * @param values The new value for this property.
* @return This object (for method chaining).
*/
@FluentSetter
- public XmlSerializerBuilder namespaces(Namespace...values) {
- return set(XML_namespaces, values);
+ public XmlSerializerBuilder ns() {
+ return enableNamespaces();
}
/**
@@ -209,16 +272,15 @@ public class XmlSerializerBuilder extends
WriterSerializerBuilder {
* <p>
* The default list of namespaces associated with this serializer.
*
- * <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_namespaces}
- * </ul>
- *
* @param values The new value for this property.
* @return This object (for method chaining).
*/
@FluentSetter
- public XmlSerializerBuilder namespaces(String...values) {
- return set(XML_namespaces, Namespace.createArray(values));
+ public XmlSerializerBuilder namespaces(Namespace...values) {
+ if (namespaces == null)
+ namespaces = new ArrayList<>();
+ Collections.addAll(namespaces, values);
+ return this;
}
// <FluentSetters>
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
index ebc5ff9..a8c8e87 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
@@ -14,7 +14,6 @@ package org.apache.juneau.xml;
import static org.apache.juneau.internal.ArrayUtils.*;
import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.xml.XmlSerializer.*;
import static org.apache.juneau.xml.XmlSerializerSession.ContentResult.*;
import static org.apache.juneau.xml.XmlSerializerSession.JsonType.*;
import static org.apache.juneau.xml.annotation.XmlFormat.*;
@@ -60,9 +59,8 @@ public class XmlSerializerSession extends
WriterSerializerSession {
protected XmlSerializerSession(XmlSerializer ctx, SerializerSessionArgs
args) {
super(ctx, args);
this.ctx = ctx;
- SessionProperties sp = getSessionProperties();
- namespaces = sp.getInstanceArray(XML_namespaces,
Namespace.class).orElse(ctx.getNamespaces());
- defaultNamespace =
findDefaultNamespace(sp.getInstance(XML_defaultNamespace,
Namespace.class).orElse(ctx.getDefaultNamespace()));
+ namespaces = ctx.getNamespaces();
+ defaultNamespace =
findDefaultNamespace(ctx.getDefaultNamespace());
}
private Namespace findDefaultNamespace(Namespace n) {
@@ -750,7 +748,7 @@ public class XmlSerializerSession extends
WriterSerializerSession {
/**
* Configuration property: Add <js>"_type"</js> properties when needed.
*
- * @see XmlSerializer#XML_addBeanTypes
+ * @see XmlSerializerBuilder#addBeanTypesXml()
* @return
* <jk>true</jk> if<js>"_type"</js> properties will be added to
beans if their type cannot be inferred
* through reflection.
@@ -763,7 +761,7 @@ public class XmlSerializerSession extends
WriterSerializerSession {
/**
* Configuration property: Add namespace URLs to the root element.
*
- * @see XmlSerializer#XML_addNamespaceUrisToRoot
+ * @see XmlSerializerBuilder#addNamespaceUrisToRoot()
* @return
* <jk>true</jk> if {@code xmlns:x} attributes are added to the
root element for the default and all mapped namespaces.
*/
@@ -774,7 +772,7 @@ public class XmlSerializerSession extends
WriterSerializerSession {
/**
* Configuration property: Auto-detect namespace usage.
*
- * @see XmlSerializer#XML_disableAutoDetectNamespaces
+ * @see XmlSerializerBuilder#disableAutoDetectNamespaces()
* @return
* <jk>true</jk> if namespace usage is detected before
serialization.
*/
@@ -785,7 +783,7 @@ public class XmlSerializerSession extends
WriterSerializerSession {
/**
* Configuration property: Default namespace.
*
- * @see XmlSerializer#XML_defaultNamespace
+ * @see XmlSerializerBuilder#defaultNamespace(Namespace)
* @return
* The default namespace URI for this document.
*/
@@ -796,7 +794,7 @@ public class XmlSerializerSession extends
WriterSerializerSession {
/**
* Configuration property: Enable support for XML namespaces.
*
- * @see XmlSerializer#XML_enableNamespaces
+ * @see XmlSerializerBuilder#enableNamespaces()
* @return
* <jk>false</jk> if XML output will not contain any namespaces
regardless of any other settings.
*/
@@ -807,7 +805,7 @@ public class XmlSerializerSession extends
WriterSerializerSession {
/**
* Configuration property: Default namespaces.
*
- * @see XmlSerializer#XML_namespaces
+ * @see XmlSerializerBuilder#namespaces(Namespace...)
* @return
* The default list of namespaces associated with this serializer.
*/
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlUtils.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlUtils.java
index 17bed61..31fb281 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlUtils.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlUtils.java
@@ -512,20 +512,20 @@ public final class XmlUtils {
// If both prefix and namespace specified, use that Namespace
mapping.
if (! (prefix.isEmpty() || ns.isEmpty()))
- return Namespace.create(prefix, ns);
+ return Namespace.of(prefix, ns);
// If only prefix specified, need to search for namespaceURI.
if (! prefix.isEmpty()) {
if (xmls != null)
for (Xml xml2 : xmls)
if (xml2.prefix().equals(prefix) && !
xml2.namespace().isEmpty())
- return Namespace.create(prefix,
xml2.namespace());
+ return Namespace.of(prefix,
xml2.namespace());
for (XmlSchema schema : schemas) {
if (schema.prefix().equals(prefix) && !
schema.namespace().isEmpty())
- return Namespace.create(prefix,
schema.namespace());
+ return Namespace.of(prefix,
schema.namespace());
for (XmlNs xmlNs : schema.xmlNs())
if (xmlNs.prefix().equals(prefix))
- return Namespace.create(prefix,
xmlNs.namespaceURI());
+ return Namespace.of(prefix,
xmlNs.namespaceURI());
}
throw new BeanRuntimeException("Found @Xml.prefix
annotation with no matching URI. prefix='"+prefix+"'");
}
@@ -535,13 +535,13 @@ public final class XmlUtils {
if (xmls != null)
for (Xml xml2 : xmls)
if (xml2.namespace().equals(ns) && !
xml2.prefix().isEmpty())
- return
Namespace.create(xml2.prefix(), ns);
+ return
Namespace.of(xml2.prefix(), ns);
for (XmlSchema schema : schemas) {
if (schema.namespace().equals(ns) && !
schema.prefix().isEmpty())
- return
Namespace.create(schema.prefix(), ns);
+ return Namespace.of(schema.prefix(),
ns);
for (XmlNs xmlNs : schema.xmlNs())
if (xmlNs.namespaceURI().equals(ns))
- return
Namespace.create(xmlNs.prefix(), ns);
+ return
Namespace.of(xmlNs.prefix(), ns);
}
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfig.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfig.java
index fe46fdf..3a78dcc 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfig.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfig.java
@@ -172,7 +172,7 @@ public @interface XmlConfig {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_addBeanTypes}
+ * <li class='jm'>{@link XmlSerializerBuilder#addBeanTypesXml()}
* </ul>
*/
String addBeanTypes() default "";
@@ -191,13 +191,13 @@ public @interface XmlConfig {
* <li><js>"false"</js> (default)
* </ul>
* <li>
- * This setting is ignored if {@link
XmlSerializer#XML_enableNamespaces} is not enabled.
+ * This setting is ignored if {@link
XmlSerializerBuilder#enableNamespaces()} is not enabled.
* <li>
* Supports {@doc DefaultVarResolver} (e.g.
<js>"$C{myConfigVar}"</js>).
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_addNamespaceUrisToRoot}
+ * <li class='jm'>{@link
XmlSerializerBuilder#addNamespaceUrisToRoot()}
* <li class='link'>{@doc XmlNamespaces}
* </ul>
*/
@@ -210,7 +210,7 @@ public @interface XmlConfig {
* Don't detect namespace usage before serialization.
*
* <p>
- * Used in conjunction with {@link
XmlSerializer#XML_addNamespaceUrisToRoot} to reduce the list of namespace URLs
appended to the
+ * Used in conjunction with {@link
XmlSerializerBuilder#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>
@@ -218,13 +218,13 @@ public @interface XmlConfig {
* the root element is serialized.
*
* <p>
- * This setting is ignored if {@link
XmlSerializer#XML_enableNamespaces} is not enabled.
+ * This setting is ignored if {@link
XmlSerializerBuilder#enableNamespaces()} is not enabled.
*
* <ul class='notes'>
* <li>
* Auto-detection of namespaces can be costly
performance-wise.
* <br>In high-performance environments, it's recommended
that namespace detection be
- * disabled, and that namespaces be manually defined
through the {@link XmlSerializer#XML_namespaces} property.
+ * disabled, and that namespaces be manually defined
through the {@link XmlSerializerBuilder#namespaces(Namespace...)} property.
* <li>
* Possible values:
* <ul>
@@ -236,7 +236,7 @@ public @interface XmlConfig {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link
XmlSerializer#XML_disableAutoDetectNamespaces}
+ * <li class='jm'>{@link
XmlSerializerBuilder#disableAutoDetectNamespaces()}
* <li class='link'>{@doc XmlNamespaces}
* </ul>
*/
@@ -254,7 +254,7 @@ public @interface XmlConfig {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_defaultNamespace}
+ * <li class='jm'>{@link
XmlSerializerBuilder#defaultNamespace(Namespace)}
* <li class='link'>{@doc XmlNamespaces}
* </ul>
*/
@@ -278,7 +278,7 @@ public @interface XmlConfig {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_enableNamespaces}
+ * <li class='jm'>{@link XmlSerializerBuilder#enableNamespaces()}
* <li class='link'>{@doc XmlNamespaces}
* </ul>
*/
@@ -296,7 +296,7 @@ public @interface XmlConfig {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link XmlSerializer#XML_namespaces}
+ * <li class='jm'>{@link
XmlSerializerBuilder#namespaces(Namespace...)}
* <li class='link'>{@doc XmlNamespaces}
* </ul>
*/
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfigAnnotation.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfigAnnotation.java
index a1c90df..762569e 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfigAnnotation.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/annotation/XmlConfigAnnotation.java
@@ -12,8 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.xml.annotation;
-import static org.apache.juneau.xml.XmlSerializer.*;
-
import org.apache.juneau.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.svl.*;
@@ -42,12 +40,12 @@ public class XmlConfigAnnotation {
public void apply(AnnotationInfo<XmlConfig> ai,
XmlSerializerBuilder b) {
XmlConfig a = ai.getAnnotation();
- bool(a.addBeanTypes()).ifPresent(x ->
b.set(XML_addBeanTypes, x));
- bool(a.addNamespaceUrisToRoot()).ifPresent(x ->
b.set(XML_addNamespaceUrisToRoot, x));
- bool(a.disableAutoDetectNamespaces()).ifPresent(x ->
b.set(XML_disableAutoDetectNamespaces, x));
- string(a.defaultNamespace()).ifPresent(x ->
b.set(XML_defaultNamespace, x));
- bool(a.enableNamespaces()).ifPresent(x ->
b.set(XML_enableNamespaces, x));
- b.setIf(a.namespaces().length > 0, XML_namespaces,
Namespace.createArray(stringList(a.namespaces())));
+ bool(a.addBeanTypes()).ifPresent(x ->
b.addBeanTypesXml(x));
+ bool(a.addNamespaceUrisToRoot()).ifPresent(x ->
b.addNamespaceUrisToRoot(x));
+ bool(a.disableAutoDetectNamespaces()).ifPresent(x ->
b.disableAutoDetectNamespaces(x));
+
string(a.defaultNamespace()).map(Namespace::create).ifPresent(x ->
b.defaultNamespace(x));
+ bool(a.enableNamespaces()).ifPresent(x ->
b.enableNamespaces(x));
+
strings(a.namespaces()).map(Namespace::createArray).ifPresent(x ->
b.namespaces(x));
}
}
diff --git
a/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlConfigurationExample.java
b/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlConfigurationExample.java
index f646a11..985bca2 100644
---
a/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlConfigurationExample.java
+++
b/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/core/xml/XmlConfigurationExample.java
@@ -14,7 +14,7 @@ package org.apache.juneau.examples.core.xml;
import org.apache.juneau.examples.core.pojo.Pojo;
import org.apache.juneau.examples.core.pojo.PojoComplex;
-import org.apache.juneau.xml.XmlSerializer;
+import org.apache.juneau.xml.*;
import java.util.HashMap;
import java.util.List;
@@ -76,8 +76,8 @@ public class XmlConfigurationExample {
//Produces
//<object
xmlns="http://www.pierobon.org/iis/review1.htm.html#one"><name><pojo></name><id>a</id></object>
- String dNamsSpace =
XmlSerializer.create().enableNamespaces().defaultNamespace("http://www.pierobon.org"
+
-
"/iis/review1.htm.html#one").addNamespaceUrisToRoot().build()
+ String dNamsSpace =
XmlSerializer.create().enableNamespaces().defaultNamespace(Namespace.create("http://www.pierobon.org"
+
+
"/iis/review1.htm.html#one")).addNamespaceUrisToRoot().build()
.serialize(aPojo);
// the output will have new default namespace added.
System.out.println(dNamsSpace);
diff --git a/juneau-utest/src/test/java/org/apache/juneau/ComboInput.java
b/juneau-utest/src/test/java/org/apache/juneau/ComboInput.java
index 4e9b851..54de083 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/ComboInput.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/ComboInput.java
@@ -18,6 +18,7 @@ import java.util.function.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.internal.*;
+import org.apache.juneau.utils.*;
/**
* Represents the input to a ComboTest.
@@ -32,14 +33,19 @@ public class ComboInput<T> {
private Predicate<String> skipTest;
private Function<T,T> convert;
private List<Function<T,String>> verify = AList.create();
- List<Consumer<BeanContextBuilder>> beanContextApplies = AList.create();
List<Class<?>> swaps = AList.create();
final Type type;
String json, jsonT, jsonR, xml, xmlT, xmlR, xmlNs, html, htmlT, htmlR,
uon, uonT, uonR, urlEncoding,
urlEncodingT, urlEncodingR, msgPack, msgPackT, rdfXml, rdfXmlT,
rdfXmlR;
+ List<Tuple2<Class<?>,Consumer<?>>> applies = AList.create();
public ComboInput<T> beanContext(Consumer<BeanContextBuilder> c) {
- this.beanContextApplies.add(c);
+ apply(BeanContextBuilder.class, c);
+ return this;
+ }
+
+ public <T2> ComboInput<T> apply(Class<T2> t, Consumer<T2> c) {
+ applies.add(Tuple2.of(t, c));
return this;
}
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java
b/juneau-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java
index 3a0899c..59c9da0 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/ComboRoundTripTest.java
@@ -29,6 +29,7 @@ import org.apache.juneau.parser.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.uon.*;
import org.apache.juneau.urlencoding.*;
+import org.apache.juneau.utils.*;
import org.apache.juneau.xml.*;
import org.junit.*;
@@ -61,11 +62,16 @@ public abstract class ComboRoundTripTest {
Serializer s2 = serializerMap.get(s);
if (s2 == null) {
s2 = applySettings(s);
- if (! (comboInput.swaps.isEmpty() &&
comboInput.beanContextApplies.isEmpty())) {
+ if (! (comboInput.swaps.isEmpty() &&
comboInput.applies.isEmpty())) {
SerializerBuilder b = s2.copy();
b.swaps((Class<?>[])comboInput.swaps.toArray(new Class[0]));
- for (Consumer<BeanContextBuilder> c :
(List<Consumer<BeanContextBuilder>>)comboInput.beanContextApplies)
- b.beanContext(c);
+ List<Tuple2<Class<?>,Consumer<?>>> pairs =
comboInput.applies;
+ for (Tuple2<Class<?>,Consumer<?>> pair : pairs)
{
+ if
(pair.getA().equals(BeanContextBuilder.class))
+
b.beanContext((Consumer<BeanContextBuilder>) pair.getB());
+ else if (pair.getA().isInstance(b))
+
b.apply(SerializerBuilder.class, (Consumer<SerializerBuilder>) pair.getB());
+ }
s2 = b.build();
}
serializerMap.put(s, s2);
@@ -77,11 +83,16 @@ public abstract class ComboRoundTripTest {
Parser p2 = parserMap.get(p);
if (p2 == null) {
p2 = applySettings(p);
- if (! (comboInput.swaps.isEmpty() &&
comboInput.beanContextApplies.isEmpty())) {
+ if (! (comboInput.swaps.isEmpty() &&
comboInput.applies.isEmpty())) {
ParserBuilder b = p2.copy();
b.swaps((Class<?>[])comboInput.swaps.toArray(new Class[0]));
- for (Consumer<BeanContextBuilder> c :
(List<Consumer<BeanContextBuilder>>)comboInput.beanContextApplies)
- b.beanContext(c);
+ List<Tuple2<Class<?>,Consumer<?>>> pairs =
comboInput.applies;
+ for (Tuple2<Class<?>,Consumer<?>> pair : pairs)
{
+ if
(pair.getA().equals(BeanContextBuilder.class))
+
b.beanContext((Consumer<BeanContextBuilder>) pair.getB());
+ else if (pair.getA().isInstance(b))
+ b.apply(ParserBuilder.class,
(Consumer<ParserBuilder>) pair.getB());
+ }
p2 = b.build();
}
parserMap.put(p, p2);
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
b/juneau-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
index 8a0bde1..f22f025 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/SerializerPropertiesComboTest.java
@@ -14,11 +14,11 @@ package org.apache.juneau;
import static org.apache.juneau.serializer.Serializer.*;
import static org.apache.juneau.serializer.WriterSerializer.*;
-import static org.apache.juneau.xml.XmlSerializer.*;
import java.util.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.collections.*;
+import org.apache.juneau.xml.*;
import org.junit.runner.*;
import org.junit.runners.*;
@@ -382,7 +382,8 @@ public class SerializerPropertiesComboTest extends
ComboRoundTripTest {
.rdfXml("<rdf:RDF>\n<rdf:Description>\n<jp:_type>T11</jp:_type>\n<jp:f>\n<rdf:Seq>\n<rdf:li
rdf:parseType='Resource'>\n<jp:f>\n<rdf:Seq>\n<rdf:li>_x0020_foo_x0020_</rdf:li>\n</rdf:Seq>\n</jp:f>\n</rdf:li>\n</rdf:Seq>\n</jp:f>\n</rdf:Description>\n</rdf:RDF>\n")
.rdfXmlT("<rdf:RDF>\n<rdf:Description>\n<jp:t>T11</jp:t>\n<jp:f>\n<rdf:Seq>\n<rdf:li
rdf:parseType='Resource'>\n<jp:f>\n<rdf:Seq>\n<rdf:li>_x0020_foo_x0020_</rdf:li>\n</rdf:Seq>\n</jp:f>\n</rdf:li>\n</rdf:Seq>\n</jp:f>\n</rdf:Description>\n</rdf:RDF>\n")
.rdfXmlR("<rdf:RDF>\n <rdf:Description>\n
<jp:_type>T11</jp:_type>\n <jp:f>\n <rdf:Seq>\n <rdf:li
rdf:parseType='Resource'>\n <jp:f>\n <rdf:Seq>\n
<rdf:li>_x0020_foo_x0020_</rdf:li>\n </rdf:Seq>\n
</jp:f>\n </rdf:li>\n </rdf:Seq>\n </jp:f>\n
</rdf:Description>\n</rdf:RDF>\n")
-
.properties(OMap.of(WSERIALIZER_quoteCharOverride, '|',
SERIALIZER_addBeanTypes, true, SERIALIZER_addRootType, true,
XML_addNamespaceUrisToRoot, true))
+ .apply(XmlSerializerBuilder.class, x ->
x.addNamespaceUrisToRoot())
+
.properties(OMap.of(WSERIALIZER_quoteCharOverride, '|',
SERIALIZER_addBeanTypes, true, SERIALIZER_addRootType, true))
.skipTest(x -> x.startsWith("parse") ||
x.startsWith("verify"))
},
});
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/dto/atom/AtomTest.java
b/juneau-utest/src/test/java/org/apache/juneau/dto/atom/AtomTest.java
index 835d3cd..2ff2586 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/dto/atom/AtomTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/dto/atom/AtomTest.java
@@ -187,7 +187,7 @@ public class AtomTest {
+" <updated>2016-12-31T05:02:03Z</updated>\n"
+"</feed>\n";
- s =
XmlSerializer.create().sq().ws().defaultNamespace("atom").enableNamespaces().addNamespaceUrisToRoot().sortProperties().build();
+ s =
XmlSerializer.create().sq().ws().defaultNamespace(Namespace.of("atom")).enableNamespaces().addNamespaceUrisToRoot().sortProperties().build();
r = s.serialize(f);
assertEquals(expected, r);
f2 = p.parse(r, Feed.class);
diff --git a/juneau-utest/src/test/java/org/apache/juneau/xml/XmlTest.java
b/juneau-utest/src/test/java/org/apache/juneau/xml/XmlTest.java
index a6d6725..c52d827 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/xml/XmlTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/xml/XmlTest.java
@@ -138,7 +138,7 @@ public class XmlTest {
OMap m = (OMap) JsonParser.DEFAULT.parse(json1, Object.class);
String r = XmlSerializer.create().ns().sq().ws()
.addNamespaceUrisToRoot()
- .defaultNamespace("http://www.apache.org")
+ .defaultNamespace(Namespace.of("http://www.apache.org"))
.keepNullProperties()
.build()
.serialize(m);
@@ -541,9 +541,9 @@ public class XmlTest {
// Manually set namespaces
s.namespaces(
- Namespace.create("foo","http://foo"),
- Namespace.create("bar","http://bar"),
- Namespace.create("baz","http://baz")
+ Namespace.of("foo","http://foo"),
+ Namespace.of("bar","http://bar"),
+ Namespace.of("baz","http://baz")
);
r = s.build().serialize(t);
assertEquals("<object xmlns='http://www.apache.org/2013/Juneau'
xmlns:foo='http://foo' xmlns:bar='http://bar'
xmlns:baz='http://baz'><foo:f1>1</foo:f1><bar:f2>2</bar:f2><foo:f3>3</foo:f3><baz:f4>4</baz:f4></object>",
r);
@@ -593,9 +593,9 @@ public class XmlTest {
// Manually set namespaces
s.namespaces(
- Namespace.create("foo","http://foo"),
- Namespace.create("bar","http://bar"),
- Namespace.create("baz","http://baz")
+ Namespace.of("foo","http://foo"),
+ Namespace.of("bar","http://bar"),
+ Namespace.of("baz","http://baz")
);
r = s.build().serialize(t);
assertEquals("<foo:T2 xmlns='http://www.apache.org/2013/Juneau'
xmlns:foo='http://foo' xmlns:bar='http://bar'
xmlns:baz='http://baz'><foo:f1>1</foo:f1><bar:f2>2</bar:f2><foo:f3>3</foo:f3><baz:f4>4</baz:f4></foo:T2>",
r);
@@ -646,9 +646,9 @@ public class XmlTest {
// Manually set namespaces
s.disableAutoDetectNamespaces();
s.namespaces(
- Namespace.create("p1","http://p1"),
- Namespace.create("bar","http://bar"),
- Namespace.create("baz","http://baz")
+ Namespace.of("p1","http://p1"),
+ Namespace.of("bar","http://bar"),
+ Namespace.of("baz","http://baz")
);
r = s.build().serialize(t);
assertEquals("<object xmlns='http://www.apache.org/2013/Juneau'
xmlns:p1='http://p1' xmlns:bar='http://bar'
xmlns:baz='http://baz'><p1:f1>1</p1:f1><bar:f2>2</bar:f2><p1:f3>3</p1:f3><baz:f4>4</baz:f4></object>",
r);
@@ -696,10 +696,10 @@ public class XmlTest {
// Manually set namespaces
s.namespaces(
- Namespace.create("foo","http://foo"),
- Namespace.create("bar","http://bar"),
- Namespace.create("baz","http://baz"),
- Namespace.create("p1","http://p1")
+ Namespace.of("foo","http://foo"),
+ Namespace.of("bar","http://bar"),
+ Namespace.of("baz","http://baz"),
+ Namespace.of("p1","http://p1")
);
r = s.build().serialize(t);
assertEquals("<p1:T4 xmlns='http://www.apache.org/2013/Juneau'
xmlns:foo='http://foo' xmlns:bar='http://bar' xmlns:baz='http://baz'
xmlns:p1='http://p1'><p1:f1>1</p1:f1><bar:f2>2</bar:f2><p1:f3>3</p1:f3><baz:f4>4</baz:f4></p1:T4>",
r);
@@ -748,9 +748,9 @@ public class XmlTest {
// Manually set namespaces
s.namespaces(
- Namespace.create("foo","http://foo"),
- Namespace.create("bar","http://bar"),
- Namespace.create("baz","http://baz")
+ Namespace.of("foo","http://foo"),
+ Namespace.of("bar","http://bar"),
+ Namespace.of("baz","http://baz")
);
r = s.build().serialize(t);
assertEquals("<foo:T5 xmlns='http://www.apache.org/2013/Juneau'
xmlns:foo='http://foo' xmlns:bar='http://bar'
xmlns:baz='http://baz'><foo:f1>1</foo:f1><bar:f2>2</bar:f2><foo:f3>3</foo:f3><baz:f4>4</baz:f4></foo:T5>",
r);
@@ -800,9 +800,9 @@ public class XmlTest {
// Manually set namespaces
s.namespaces(
- Namespace.create("foo","http://foo"),
- Namespace.create("bar","http://bar"),
- Namespace.create("baz","http://baz")
+ Namespace.of("foo","http://foo"),
+ Namespace.of("bar","http://bar"),
+ Namespace.of("baz","http://baz")
);
r = s.build().serialize(t);
assertEquals("<object xmlns='http://www.apache.org/2013/Juneau'
xmlns:foo='http://foo' xmlns:bar='http://bar'
xmlns:baz='http://baz'><foo:f1>1</foo:f1><bar:f2>2</bar:f2><foo:f3>3</foo:f3><baz:f4>4</baz:f4></object>",
r);
@@ -852,10 +852,10 @@ public class XmlTest {
// Manually set namespaces
s.namespaces(
- Namespace.create("foo","http://foo"),
- Namespace.create("bar","http://bar"),
- Namespace.create("baz","http://baz"),
- Namespace.create("p1","http://p1")
+ Namespace.of("foo","http://foo"),
+ Namespace.of("bar","http://bar"),
+ Namespace.of("baz","http://baz"),
+ Namespace.of("p1","http://p1")
);
r = s.build().serialize(t);
assertEquals("<object xmlns='http://www.apache.org/2013/Juneau'
xmlns:foo='http://foo' xmlns:bar='http://bar' xmlns:baz='http://baz'
xmlns:p1='http://p1'><p1:g1>1</p1:g1><bar:g2>2</bar:g2><p1:g3>3</p1:g3><baz:g4>4</baz:g4></object>",
r);
@@ -901,9 +901,9 @@ public class XmlTest {
// Manually set namespaces
s.namespaces(
- Namespace.create("foo","http://foo"),
- Namespace.create("bar","http://bar"),
- Namespace.create("baz","http://baz")
+ Namespace.of("foo","http://foo"),
+ Namespace.of("bar","http://bar"),
+ Namespace.of("baz","http://baz")
);
r = s.build().serialize(t);
assertEquals("<object xmlns='http://www.apache.org/2013/Juneau'
xmlns:foo='http://foo' xmlns:bar='http://bar'
xmlns:baz='http://baz'><p2:f1>1</p2:f1><p1:f2>2</p1:f2><c1:f3>3</c1:f3><f1:f4>4</f1:f4></object>",
r);
@@ -952,9 +952,9 @@ public class XmlTest {
// Manually set namespaces
s.namespaces(
- Namespace.create("foo","http://foo"),
- Namespace.create("bar","http://bar"),
- Namespace.create("baz","http://baz")
+ Namespace.of("foo","http://foo"),
+ Namespace.of("bar","http://bar"),
+ Namespace.of("baz","http://baz")
);
r = s.build().serialize(t);
assertEquals("<object xmlns='http://www.apache.org/2013/Juneau'
xmlns:foo='http://foo' xmlns:bar='http://bar'
xmlns:baz='http://baz'><p1:f1>1</p1:f1></object>", r);