Allow reuse of SerializerSession objects. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/8879750c Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/8879750c Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/8879750c
Branch: refs/heads/master Commit: 8879750c6b768e61a1a5edcd872c519f56a5bbce Parents: 7c785c3 Author: JamesBognar <[email protected]> Authored: Sun Jul 16 16:36:20 2017 -0400 Committer: JamesBognar <[email protected]> Committed: Fri Jul 21 12:53:59 2017 -0400 ---------------------------------------------------------------------- juneau-build.launch | 23 ++++++ juneau-build.sh | 16 +++++ .../org/apache/juneau/jena/RdfSerializer.java | 8 +-- .../juneau/jena/RdfSerializerSession.java | 8 +-- .../org/apache/juneau/xml/XmlContentTest.java | 21 +++--- .../org/apache/juneau/csv/CsvSerializer.java | 16 ++--- .../apache/juneau/csv/CsvSerializerSession.java | 5 +- .../apache/juneau/html/HtmlDocSerializer.java | 16 +++-- .../juneau/html/HtmlDocSerializerSession.java | 16 +---- .../juneau/html/HtmlDocTemplateBasic.java | 4 +- .../juneau/html/HtmlSchemaDocSerializer.java | 8 +-- .../org/apache/juneau/html/HtmlSerializer.java | 8 +-- .../juneau/html/HtmlSerializerSession.java | 21 +++--- .../juneau/html/HtmlStrippedDocSerializer.java | 6 +- .../org/apache/juneau/jso/JsoSerializer.java | 4 +- .../juneau/json/JsonSchemaSerializer.java | 8 +-- .../org/apache/juneau/json/JsonSerializer.java | 9 ++- .../juneau/json/JsonSerializerSession.java | 21 +++--- .../juneau/msgpack/MsgPackSerializer.java | 8 +-- .../msgpack/MsgPackSerializerSession.java | 23 +++--- .../juneau/plaintext/PlainTextSerializer.java | 4 +- .../serializer/OutputStreamSerializer.java | 8 ++- .../apache/juneau/serializer/Serializer.java | 61 +++++----------- .../juneau/serializer/SerializerOutput.java | 36 ++++++++-- .../juneau/serializer/SerializerSession.java | 75 +------------------- .../juneau/serializer/WriterSerializer.java | 10 +-- .../apache/juneau/soap/SoapXmlSerializer.java | 7 +- .../org/apache/juneau/uon/UonSerializer.java | 8 +-- .../apache/juneau/uon/UonSerializerSession.java | 20 +++--- .../urlencoding/UrlEncodingSerializer.java | 13 ++-- .../UrlEncodingSerializerSession.java | 6 +- .../org/apache/juneau/xml/XmlDocSerializer.java | 7 +- .../juneau/xml/XmlSchemaDocSerializer.java | 7 +- .../apache/juneau/xml/XmlSchemaSerializer.java | 19 ++--- .../org/apache/juneau/xml/XmlSerializer.java | 8 +-- .../apache/juneau/xml/XmlSerializerSession.java | 20 +++--- .../juneau/examples/rest/PhotosResource.java | 4 +- .../apache/juneau/rest/jaxrs/BaseProvider.java | 10 +-- .../juneau/rest/test/AcceptCharsetResource.java | 4 +- .../rest/test/CharsetEncodingsResource.java | 4 +- .../rest/test/DefaultContentTypesResource.java | 4 +- .../apache/juneau/rest/test/GroupsResource.java | 4 +- .../juneau/rest/test/InheritanceResource.java | 4 +- .../juneau/rest/test/NlsPropertyResource.java | 4 +- .../juneau/rest/test/OnPostCallResource.java | 4 +- .../juneau/rest/test/PropertiesResource.java | 8 +-- .../juneau/rest/test/SerializersResource.java | 16 ++--- .../juneau/rest/response/DefaultHandler.java | 15 ++-- 48 files changed, 315 insertions(+), 324 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-build.launch ---------------------------------------------------------------------- diff --git a/juneau-build.launch b/juneau-build.launch new file mode 100644 index 0000000..5b02ce6 --- /dev/null +++ b/juneau-build.launch @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- + *************************************************************************************************************************** + * 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. * + *************************************************************************************************************************** +--> +<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType"> +<stringAttribute key="bad_container_name" value="/juneau-root/ju"/> +<listAttribute key="org.eclipse.debug.ui.favoriteGroups"> +<listEntry value="org.eclipse.ui.externaltools.launchGroup"/> +</listAttribute> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/juneau-root/juneau-build.sh}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/juneau-root}"/> +</launchConfiguration> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-build.sh ---------------------------------------------------------------------- diff --git a/juneau-build.sh b/juneau-build.sh new file mode 100755 index 0000000..87d068f --- /dev/null +++ b/juneau-build.sh @@ -0,0 +1,16 @@ +# *************************************************************************************************************************** +# * 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. * +# *************************************************************************************************************************** + +. ~/.profile +set -e +mvn clean install http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java index 82cd176..30c5163 100644 --- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java +++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java @@ -185,7 +185,7 @@ public class RdfSerializer extends WriterSerializer { } @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { RdfSerializerSession s = (RdfSerializerSession)session; @@ -210,7 +210,7 @@ public class RdfSerializer extends WriterSerializer { r.addProperty(s.getRootProp(), "true"); } - s.getRdfWriter().write(model, session.getWriter(), "http://unknown/"); + s.getRdfWriter().write(model, out.getWriter(), "http://unknown/"); } private RDFNode serializeAnything(RdfSerializerSession session, Object o, boolean isURI, ClassMeta<?> eType, @@ -449,8 +449,8 @@ public class RdfSerializer extends WriterSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - public RdfSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, + public RdfSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new RdfSerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new RdfSerializerSession(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java index 6595801..d7dabb8 100644 --- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java +++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java @@ -21,7 +21,6 @@ import java.util.*; import org.apache.juneau.*; import org.apache.juneau.http.*; -import org.apache.juneau.json.*; import org.apache.juneau.msgpack.*; import org.apache.juneau.serializer.*; import org.apache.juneau.xml.*; @@ -57,9 +56,6 @@ public final class RdfSerializerSession extends SerializerSession { * @param ctx * The context creating this session object. * The context contains all the configuration settings for this object. - * @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. @@ -75,9 +71,9 @@ public final class RdfSerializerSession extends SerializerSession { * The URI context. * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. */ - protected RdfSerializerSession(RdfSerializerContext ctx, ObjectMap op, Object output, Method javaMethod, + protected RdfSerializerSession(RdfSerializerContext ctx, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - super(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + super(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); ObjectMap jenaSettings = new ObjectMap(); jenaSettings.put("rdfXml.tab", isUseWhitespace() ? 2 : 0); jenaSettings.put("rdfXml.attributeQuoteChar", Character.toString(getQuoteChar())); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlContentTest.java ---------------------------------------------------------------------- diff --git a/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlContentTest.java b/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlContentTest.java index 65e23e7..18f0ed6 100755 --- a/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlContentTest.java +++ b/juneau-core-test/src/test/java/org/apache/juneau/xml/XmlContentTest.java @@ -21,6 +21,7 @@ import java.io.*; import org.apache.juneau.*; import org.apache.juneau.annotation.*; +import org.apache.juneau.serializer.*; import org.apache.juneau.xml.annotation.*; import org.junit.*; @@ -46,16 +47,18 @@ public class XmlContentTest { t.f2 = null; sw = new StringWriter(); - session = s1.createSession(sw, new ObjectMap("{"+SERIALIZER_trimNullProperties+":false}"), null, null, null, null, null); - s1.serialize(session, t); + SerializerOutput out = new SerializerOutput(sw); + session = s1.createSession(new ObjectMap("{"+SERIALIZER_trimNullProperties+":false}"), null, null, null, null, null); + s1.serialize(session, out, t); r = sw.toString(); assertEquals("<A f1='f1'>_x0000_</A>", r); t2 = p.parse(r, A.class); assertEqualObjects(t, t2); sw = new StringWriter(); - session = s2.createSession(sw, new ObjectMap("{"+SERIALIZER_trimNullProperties+":false}"), null, null, null, null, null); - s2.serialize(session, t); + out = new SerializerOutput(sw); + session = s2.createSession(new ObjectMap("{"+SERIALIZER_trimNullProperties+":false}"), null, null, null, null, null); + s2.serialize(session, out, t); r = sw.toString(); assertEquals("<A f1='f1'>_x0000_</A>\n", r); t2 = p.parse(r, A.class); @@ -154,16 +157,18 @@ public class XmlContentTest { t.f2 = null; sw = new StringWriter(); - session = s1.createSession(sw, new ObjectMap("{"+SERIALIZER_trimNullProperties+":false}"), null, null, null, null, null); - s1.serialize(session, t); + SerializerOutput out = new SerializerOutput(sw); + session = s1.createSession(new ObjectMap("{"+SERIALIZER_trimNullProperties+":false}"), null, null, null, null, null); + s1.serialize(session, out, t); r = sw.toString(); assertEquals("<A f1='f1'>_x0000_</A>", r); t2 = p.parse(r, B.class); assertEqualObjects(t, t2); sw = new StringWriter(); - session = s2.createSession(sw, new ObjectMap("{"+SERIALIZER_trimNullProperties+":false}"), null, null, null, null, null); - s2.serialize(session, t); + out = new SerializerOutput(sw); + session = s2.createSession(new ObjectMap("{"+SERIALIZER_trimNullProperties+":false}"), null, null, null, null, null); + s2.serialize(session, out, t); r = sw.toString(); assertEquals("<A f1='f1'>_x0000_</A>\n", r); t2 = p.parse(r, B.class); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/csv/CsvSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/csv/CsvSerializer.java b/juneau-core/src/main/java/org/apache/juneau/csv/CsvSerializer.java index b010719..c9f2afc 100644 --- a/juneau-core/src/main/java/org/apache/juneau/csv/CsvSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/csv/CsvSerializer.java @@ -49,8 +49,8 @@ public final class CsvSerializer extends WriterSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { - Writer out = session.getWriter(); + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { + Writer w = out.getWriter(); ClassMeta cm = session.getClassMetaForObject(o); Collection l = null; if (cm.isArray()) { @@ -66,19 +66,19 @@ public final class CsvSerializer extends WriterSerializer { int i = 0; for (BeanPropertyMeta pm : bm.getPropertyMetas()) { if (i++ > 0) - out.append(','); - append(out, pm.getName()); + w.append(','); + append(w, pm.getName()); } - out.append('\n'); + w.append('\n'); for (Object o2 : l) { i = 0; BeanMap bean = session.toBeanMap(o2); for (BeanPropertyMeta pm : bm.getPropertyMetas()) { if (i++ > 0) - out.append(','); - append(out, pm.get(bean, pm.getName())); + w.append(','); + append(w, pm.get(bean, pm.getName())); } - out.append('\n'); + w.append('\n'); } } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java index c9fd758..6cb3e1b 100644 --- a/juneau-core/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/csv/CsvSerializerSession.java @@ -33,7 +33,6 @@ public final class CsvSerializerSession extends SerializerSession { * @param ctx * The context creating this session object. * The context contains all the configuration settings for this object. - * @param output The output object. * @param op * The override properties. * These override any context properties defined in the context. @@ -48,8 +47,8 @@ public final class CsvSerializerSession extends SerializerSession { * @param uriContext The URI context. * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. */ - protected CsvSerializerSession(CsvSerializerContext ctx, ObjectMap op, Object output, Method javaMethod, + protected CsvSerializerSession(CsvSerializerContext ctx, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - super(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + super(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java index f1be67a..58ac1cd 100644 --- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java @@ -68,16 +68,16 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - public HtmlDocSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, + public HtmlDocSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new HtmlDocSerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new HtmlDocSerializerSession(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { HtmlDocSerializerSession s = (HtmlDocSerializerSession)session; - HtmlWriter w = s.getWriter(); + HtmlWriter w = s.getHtmlWriter(out); HtmlDocTemplate t = s.getTemplate(); w.sTag("html").nl(0); @@ -91,13 +91,15 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer { } /** - * Calls the parent {@link #doSerialize(SerializerSession, Object)} method which invokes just the HTML serializer. + * Calls the parent {@link #doSerialize(SerializerSession, SerializerOutput, Object)} method which invokes just the HTML serializer. * * @param session The serializer session. + * @param out + * Where to send the output from the serializer. * @param o The object being serialized. * @throws Exception */ - public void parentSerialize(SerializerSession session, Object o) throws Exception { - super.doSerialize(session, o); + public void parentSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { + super.doSerialize(session, out, o); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java index 072bbd8..0b8179f 100644 --- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java @@ -20,7 +20,6 @@ import java.util.*; import org.apache.juneau.*; import org.apache.juneau.http.*; import org.apache.juneau.internal.*; -import org.apache.juneau.json.*; import org.apache.juneau.serializer.*; /** @@ -45,9 +44,6 @@ public final class HtmlDocSerializerSession extends HtmlSerializerSession { * @param ctx * The context creating this session object. * The context contains all the configuration settings for this object. - * @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. @@ -63,9 +59,9 @@ public final class HtmlDocSerializerSession extends HtmlSerializerSession { * The URI context. * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. */ - protected HtmlDocSerializerSession(HtmlDocSerializerContext ctx, ObjectMap op, Object output, Method javaMethod, + protected HtmlDocSerializerSession(HtmlDocSerializerContext ctx, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - super(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + super(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); if (op == null || op.isEmpty()) { header = ctx.header; nav = ctx.nav; @@ -220,12 +216,4 @@ public final class HtmlDocSerializerSession extends HtmlSerializerSession { public final String getNoResultsMessage() { return noResultsMessage; } - - @Override /* XmlSerializerSession */ - public HtmlWriter getWriter() throws Exception { - Object output = getOutput(); - if (output instanceof HtmlWriter) - return (HtmlWriter)output; - return new HtmlWriter(super.getWriter(), isUseWhitespace(), getMaxIndent(), isTrimStrings(), getQuoteChar(), getUriResolver()); - } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java index a2101e7..126097b 100644 --- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java +++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java @@ -13,6 +13,7 @@ package org.apache.juneau.html; import org.apache.juneau.internal.*; +import org.apache.juneau.serializer.*; /** * A basic template for the HTML doc serializer. @@ -158,7 +159,8 @@ public class HtmlDocTemplateBasic implements HtmlDocTemplate { w.append(6, m).nl(6); } else { session.indent = 6; - s.parentSerialize(session, o); + w.flush(); + s.parentSerialize(session, new SerializerOutput(w), o); } w.ie(5).eTag("div").nl(5); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java index 0c50698..5d95e3f 100644 --- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java @@ -78,15 +78,15 @@ public final class HtmlSchemaDocSerializer extends HtmlDocSerializer { } @Override /* Serializer */ - public HtmlDocSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new HtmlDocSerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + public HtmlDocSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { + return new HtmlDocSerializerSession(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } @Override /* ISchemaSerializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { HtmlSerializerSession s = (HtmlSerializerSession)session; ObjectMap schema = getSchema(s, session.getClassMetaForObject(o), "root", null); - super.doSerialize(s, schema); + super.doSerialize(s, out, schema); } /* http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java index 0bacd20..47ba3e8 100644 --- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java @@ -797,14 +797,14 @@ public class HtmlSerializer extends XmlSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - public HtmlSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, + public HtmlSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new HtmlSerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new HtmlSerializerSession(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { HtmlSerializerSession s = (HtmlSerializerSession)session; - doSerialize(s, o, s.getWriter()); + doSerialize(s, o, s.getHtmlWriter(out)); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java index 8a4f27f..6de1afc 100644 --- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java @@ -22,7 +22,7 @@ import java.util.regex.*; import org.apache.juneau.*; import org.apache.juneau.http.*; -import org.apache.juneau.json.*; +import org.apache.juneau.serializer.*; import org.apache.juneau.xml.*; /** @@ -54,7 +54,6 @@ public class HtmlSerializerSession extends XmlSerializerSession { * @param ctx * The context creating this session object. * The context contains all the configuration settings for this object. - * @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. @@ -70,9 +69,9 @@ public class HtmlSerializerSession extends XmlSerializerSession { * The URI context. * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. */ - protected HtmlSerializerSession(HtmlSerializerContext ctx, ObjectMap op, Object output, Method javaMethod, + protected HtmlSerializerSession(HtmlSerializerContext ctx, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - super(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + super(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); String labelParameter; if (op == null || op.isEmpty()) { anchorText = Enum.valueOf(AnchorText.class, ctx.uriAnchorText); @@ -92,12 +91,18 @@ public class HtmlSerializerSession extends XmlSerializerSession { labelPattern = Pattern.compile("[\\?\\&]" + Pattern.quote(labelParameter) + "=([^\\&]*)"); } - @Override /* XmlSerializerSession */ - public HtmlWriter getWriter() throws Exception { - Object output = getOutput(); + /** + * Converts the specified output target object to an {@link HtmlWriter}. + * + * @param out The output target object. + * @return The output target object wrapped in an {@link HtmlWriter}. + * @throws Exception + */ + public HtmlWriter getHtmlWriter(SerializerOutput out) throws Exception { + Object output = out.getRawOutput(); if (output instanceof HtmlWriter) return (HtmlWriter)output; - return new HtmlWriter(super.getWriter(), isUseWhitespace(), getMaxIndent(), isTrimStrings(), getQuoteChar(), + return new HtmlWriter(out.getWriter(), isUseWhitespace(), getMaxIndent(), isTrimStrings(), getQuoteChar(), getUriResolver()); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java index 83552c2..938fecf 100644 --- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java @@ -52,14 +52,14 @@ public class HtmlStrippedDocSerializer extends HtmlSerializer { //--------------------------------------------------------------------------- @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { HtmlSerializerSession s = (HtmlSerializerSession)session; - HtmlWriter w = s.getWriter(); + HtmlWriter w = s.getHtmlWriter(out); if (o == null || (o instanceof Collection && ((Collection<?>)o).size() == 0) || (o.getClass().isArray() && Array.getLength(o) == 0)) w.sTag(1, "p").append("No Results").eTag("p").nl(1); else - super.doSerialize(s, o); + super.doSerialize(s, out, o); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializer.java b/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializer.java index 92cde21..6ea9e43 100644 --- a/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializer.java @@ -54,8 +54,8 @@ public class JsoSerializer extends OutputStreamSerializer { //-------------------------------------------------------------------------------- @Override /* OutputStreamSerializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { - ObjectOutputStream oos = new ObjectOutputStream(session.getOutputStream()); + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { + ObjectOutputStream oos = new ObjectOutputStream(out.getOutputStream()); oos.writeObject(o); oos.flush(); oos.close(); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java index f4fda17..9829016 100644 --- a/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java @@ -74,16 +74,16 @@ public final class JsonSchemaSerializer extends JsonSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - public JsonSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, + public JsonSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new JsonSerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new JsonSerializerSession(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } @Override /* JsonSerializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { JsonSerializerSession s = (JsonSerializerSession)session; ObjectMap schema = getSchema(s, session.getClassMetaForObject(o), "root", null); - serializeAnything(s, s.getWriter(), schema, s.getExpectedRootType(o), "root", null); + serializeAnything(s, s.getJsonWriter(out), schema, s.getExpectedRootType(o), "root", null); } /* http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java index 5c6449e..82edd79 100644 --- a/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java @@ -404,20 +404,19 @@ public class JsonSerializer extends WriterSerializer { return schemaSerializer; } - //-------------------------------------------------------------------------------- // Entry point methods //-------------------------------------------------------------------------------- @Override /* Serializer */ - public JsonSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, + public JsonSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new JsonSerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new JsonSerializerSession(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { JsonSerializerSession s = (JsonSerializerSession)session; - serializeAnything(s, s.getWriter(), o, s.getExpectedRootType(o), "root", null); + serializeAnything(s, s.getJsonWriter(out), o, s.getExpectedRootType(o), "root", null); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializerSession.java index a4beae0..2808f59 100644 --- a/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializerSession.java @@ -40,9 +40,6 @@ public final class JsonSerializerSession extends SerializerSession { * @param ctx * The context creating this session object. * The context contains all the configuration settings for this object. - * @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. @@ -58,9 +55,9 @@ public final class JsonSerializerSession extends SerializerSession { * The URI context. * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. */ - protected JsonSerializerSession(JsonSerializerContext ctx, ObjectMap op, Object output, Method javaMethod, + protected JsonSerializerSession(JsonSerializerContext ctx, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - super(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + super(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); if (op == null || op.isEmpty()) { simpleMode = ctx.simpleMode; escapeSolidus = ctx.escapeSolidus; @@ -100,12 +97,18 @@ public final class JsonSerializerSession extends SerializerSession { return addBeanTypeProperties; } - @Override /* ParserSession */ - public JsonWriter getWriter() throws Exception { - Object output = getOutput(); + /** + * Converts the specified output target object to an {@link JsonWriter}. + * + * @param out The output target object. + * @return The output target object wrapped in an {@link JsonWriter}. + * @throws Exception + */ + public JsonWriter getJsonWriter(SerializerOutput out) throws Exception { + Object output = out.getRawOutput(); if (output instanceof JsonWriter) return (JsonWriter)output; - return new JsonWriter(super.getWriter(), isUseWhitespace(), getMaxIndent(), isEscapeSolidus(), getQuoteChar(), + return new JsonWriter(out.getWriter(), isUseWhitespace(), getMaxIndent(), isEscapeSolidus(), getQuoteChar(), isSimpleMode(), isTrimStrings(), getUriResolver()); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java index b301fa0..ad5ed97 100644 --- a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java @@ -218,14 +218,14 @@ public class MsgPackSerializer extends OutputStreamSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - public MsgPackSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, + public MsgPackSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new MsgPackSerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new MsgPackSerializerSession(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { MsgPackSerializerSession s = (MsgPackSerializerSession)session; - serializeAnything(s, s.getOutputStream(), o, s.getExpectedRootType(o), "root", null); + serializeAnything(s, s.getMsgPackOutputStream(out), o, s.getExpectedRootType(o), "root", null); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java index 860989a..f632c84 100644 --- a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java @@ -19,7 +19,6 @@ import java.util.*; import org.apache.juneau.*; import org.apache.juneau.http.*; -import org.apache.juneau.json.*; import org.apache.juneau.serializer.*; /** @@ -39,9 +38,6 @@ public final class MsgPackSerializerSession extends SerializerSession { * @param ctx * The context creating this session object. * The context contains all the configuration settings for this object. - * @param output - * The output object. - * See {@link JsonSerializerSession#getOutputStream()} for valid class types. * @param op * The override properties. * These override any context properties defined in the context. @@ -57,9 +53,9 @@ public final class MsgPackSerializerSession extends SerializerSession { * The URI context. * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. */ - protected MsgPackSerializerSession(MsgPackSerializerContext ctx, ObjectMap op, Object output, Method javaMethod, + protected MsgPackSerializerSession(MsgPackSerializerContext ctx, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - super(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + super(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); if (op == null || op.isEmpty()) { addBeanTypeProperties = ctx.addBeanTypeProperties; } else { @@ -77,11 +73,18 @@ public final class MsgPackSerializerSession extends SerializerSession { return addBeanTypeProperties; } - @Override /*SerializerSession */ - public MsgPackOutputStream getOutputStream() throws Exception { - Object output = getOutput(); + /** + * Converts the specified output target object to an {@link MsgPackOutputStream}. + * + * @param out The output target object. + * @return The output target object wrapped in an {@link MsgPackOutputStream}. + * @throws Exception + */ + @SuppressWarnings("static-method") + public MsgPackOutputStream getMsgPackOutputStream(SerializerOutput out) throws Exception { + Object output = out.getRawOutput(); if (output instanceof MsgPackOutputStream) return (MsgPackOutputStream)output; - return new MsgPackOutputStream(super.getOutputStream()); + return new MsgPackOutputStream(out.getOutputStream()); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java index 2dd95b6..cf0975c 100644 --- a/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java @@ -70,7 +70,7 @@ public class PlainTextSerializer extends WriterSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { - session.getWriter().write(o == null ? "null" : session.convertToType(o, String.class)); + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { + out.getWriter().write(o == null ? "null" : session.convertToType(o, String.class)); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java b/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java index 9b86b70..8c743b6 100644 --- a/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java @@ -27,7 +27,7 @@ import org.apache.juneau.annotation.*; * This class is typically the parent class of all byte-based serializers. * It has 1 abstract method to implement... * <ul> - * <li>{@link #doSerialize(SerializerSession, Object)} + * <li>{@link #doSerialize(SerializerSession, SerializerOutput, Object)} * </ul> * * <h6 class='topic'>@Produces annotation</h6> @@ -69,7 +69,8 @@ public abstract class OutputStreamSerializer extends Serializer { @Override public final byte[] serialize(Object o) throws SerializeException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - serialize(createSession(baos), o); + SerializerOutput out = new SerializerOutput(baos); + serialize(createSession(), out, o); return baos.toByteArray(); } @@ -82,7 +83,8 @@ public abstract class OutputStreamSerializer extends Serializer { */ public final String serializeToHex(Object o) throws SerializeException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - serialize(createSession(baos), o); + SerializerOutput out = new SerializerOutput(baos); + serialize(createSession(), out, o); return toHex(baos.toByteArray()); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java b/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java index 6e1d9d0..bb0e623 100644 --- a/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/serializer/Serializer.java @@ -90,13 +90,15 @@ public abstract class Serializer extends CoreObject { * This method should NOT close the context object. * * @param session - * The serializer session object return by {@link #createSession(Object, ObjectMap, Method, Locale, TimeZone, + * The serializer session object return by {@link #createSession(ObjectMap, Method, Locale, TimeZone, * MediaType, UriContext)}. - * If <jk>null</jk>, session is created using {@link #createSession(Object)}. + * If <jk>null</jk>, session is created using {@link #createSession()}. + * @param out + * Where to send the output from the serializer. * @param o The object to serialize. * @throws Exception If thrown from underlying stream, or if the input contains a syntax error or is malformed. */ - protected abstract void doSerialize(SerializerSession session, Object o) throws Exception; + protected abstract void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception; /** * Shortcut method for serializing objects directly to either a <code>String</code> or <code><jk>byte</jk>[]</code> @@ -119,15 +121,17 @@ public abstract class Serializer extends CoreObject { * Serialize the specified object using the specified session. * * @param session - * The serializer session object return by {@link #createSession(Object, ObjectMap, Method, Locale, TimeZone, + * The serializer session object return by {@link #createSession(ObjectMap, Method, Locale, TimeZone, * MediaType, UriContext)}. - * If <jk>null</jk>, session is created using {@link #createSession(Object)}. + * If <jk>null</jk>, session is created using {@link #createSession()}. + * @param out + * Where to send the output from the serializer. * @param o The object to serialize. * @throws SerializeException If a problem occurred trying to convert the output. */ - public final void serialize(SerializerSession session, Object o) throws SerializeException { + public final void serialize(SerializerSession session, SerializerOutput out, Object o) throws SerializeException { try { - doSerialize(session, o); + doSerialize(session, out, o); } catch (SerializeException e) { throw e; } catch (StackOverflowError e) { @@ -164,8 +168,9 @@ public abstract class Serializer extends CoreObject { * @throws SerializeException If a problem occurred trying to convert the output. */ public final void serialize(Object o, Object output) throws SerializeException { - SerializerSession session = createSession(output); - serialize(session, o); + SerializerSession session = createSession(); + SerializerOutput out = new SerializerOutput(output); + serialize(session, out, o); } /** @@ -175,20 +180,6 @@ public abstract class Serializer extends CoreObject { * It's up to implementers to decide what the session object looks like, although typically it's going to be a * subclass of {@link SerializerSession}. * - * @param output - * The output object. - * <br>Character-based serializers can handle the following output class types: - * <ul> - * <li>{@link Writer} - * <li>{@link OutputStream} - Output will be written as UTF-8 encoded stream. - * <li>{@link File} - Output will be written as system-default encoded stream. - * <li>{@link StringBuilder} - Output will be written to the specified string builder. - * </ul> - * <br>Stream-based serializers can handle the following output class types: - * <ul> - * <li>{@link OutputStream} - * <li>{@link File} - * </ul> * @param op Optional additional properties. * @param javaMethod * Java method that invoked this serializer. @@ -206,9 +197,9 @@ public abstract class Serializer extends CoreObject { * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. * @return The new session. */ - public SerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, + public SerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new SerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new SerializerSession(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } /** @@ -217,24 +208,10 @@ public abstract class Serializer extends CoreObject { * <p> * Equivalent to calling <code>createSession(<jk>null</jk>, <jk>null</jk>)</code>. * - * @param output - * The output object. - * <br>Character-based serializers can handle the following output class types: - * <ul> - * <li>{@link Writer} - * <li>{@link OutputStream} - Output will be written as UTF-8 encoded stream. - * <li>{@link File} - Output will be written as system-default encoded stream. - * <li>{@link StringBuilder} - Output will be written to the specified string builder. - * </ul> - * <br>Stream-based serializers can handle the following output class types: - * <ul> - * <li>{@link OutputStream} - * <li>{@link File} - * </ul> * @return The new session. */ - protected SerializerSession createSession(Object output) { - return createSession(output, null, null, null, null, getPrimaryMediaType(), null); + protected SerializerSession createSession() { + return createSession(null, null, null, null, getPrimaryMediaType(), null); } /** @@ -296,7 +273,7 @@ public abstract class Serializer extends CoreObject { * or client). * * @param properties - * Optional run-time properties (the same that are passed to {@link WriterSerializer#doSerialize(SerializerSession, Object)}. + * Optional run-time properties (the same that are passed to {@link WriterSerializer#doSerialize(SerializerSession, SerializerOutput, Object)}. * Can be <jk>null</jk>. * @return * The HTTP headers to set on HTTP requests. http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerOutput.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerOutput.java b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerOutput.java index f138322..8cc9cc0 100644 --- a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerOutput.java +++ b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerOutput.java @@ -41,16 +41,31 @@ import org.apache.juneau.internal.*; public class SerializerOutput { private final Object output; + private final boolean autoClose; private OutputStream outputStream; private Writer writer, flushOnlyWriter; /** * Constructor. * + * <p> + * Equivalent to calling <code>SerializerOutput(output, <jk>true</jk>);</code>. + * * @param output The object to pipe the serializer output to. */ public SerializerOutput(Object output) { + this(output, true); + } + + /** + * Constructor. + * + * @param output The object to pipe the serializer output to. + * @param autoClose Close the stream or writer at the end of the session. + */ + public SerializerOutput(Object output, boolean autoClose) { this.output = output; + this.autoClose = autoClose; } /** @@ -137,12 +152,21 @@ public class SerializerOutput { */ public void close() { try { - if (outputStream != null) - outputStream.close(); - if (flushOnlyWriter != null) - flushOnlyWriter.flush(); - if (writer != null) - writer.close(); + if (! autoClose) { + if (outputStream != null) + outputStream.flush(); + if (flushOnlyWriter != null) + flushOnlyWriter.flush(); + if (writer != null) + writer.flush(); + } else { + if (outputStream != null) + outputStream.close(); + if (flushOnlyWriter != null) + flushOnlyWriter.flush(); + if (writer != null) + writer.close(); + } } catch (IOException e) { throw new BeanRuntimeException(e); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java index 6da8b9d..ade91df 100644 --- a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java @@ -16,7 +16,6 @@ import static org.apache.juneau.internal.ClassUtils.*; import static org.apache.juneau.internal.StringUtils.*; import static org.apache.juneau.serializer.SerializerContext.*; -import java.io.*; import java.lang.reflect.*; import java.text.*; import java.util.*; @@ -69,7 +68,6 @@ public class SerializerSession extends BeanSession { private final LinkedList<StackElement> stack = new LinkedList<StackElement>(); // Contains the current objects in the current branch of the model. private boolean isBottom; // If 'true', then we're at a leaf in the model (i.e. a String, Number, Boolean, or null). private final Method javaMethod; // Java method that invoked this serializer. - private SerializerOutput output; private BeanPropertyMeta currentProperty; private ClassMeta<?> currentClass; private final SerializerListener listener; @@ -81,19 +79,6 @@ public class SerializerSession extends BeanSession { * @param ctx * The context creating this session object. * The context contains all the configuration settings for this object. - * @param output - * The output object. - * <br>Character-based serializers can handle the following output class types: - * <ul> - * <li>{@link Writer} - * <li>{@link OutputStream} - Output will be written as UTF-8 encoded stream. - * <li>{@link File} - Output will be written as system-default encoded stream. - * </ul> - * <br>Stream-based serializers can handle the following output class types: - * <ul> - * <li>{@link OutputStream} - * <li>{@link File} - * </ul> * @param op * The override properties. * These override any context properties defined in the context. @@ -109,11 +94,10 @@ public class SerializerSession extends BeanSession { * The URI context. * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. */ - public SerializerSession(SerializerContext ctx, ObjectMap op, Object output, Method javaMethod, Locale locale, + public SerializerSession(SerializerContext ctx, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { super(ctx, op, locale, timeZone, mediaType); this.javaMethod = javaMethod; - this.output = new SerializerOutput(output); UriResolution uriResolution; UriRelativity uriRelativity; Class<?> listenerClass; @@ -170,57 +154,6 @@ public class SerializerSession extends BeanSession { } /** - * Wraps the specified output object inside an output stream. - * - * <p> - * Subclasses can override this method to implement their own specialized output streams. - * - * <p> - * This method can be used if the output object is any of the following class types: - * <ul> - * <li>{@link OutputStream} - * <li>{@link File} - * </ul> - * - * @return The output object wrapped in an output stream. - * @throws Exception If object could not be converted to an output stream. - */ - public OutputStream getOutputStream() throws Exception { - return output.getOutputStream(); - } - - - /** - * Wraps the specified output object inside a writer. - * - * <p> - * Subclasses can override this method to implement their own specialized writers. - * - * <p> - * This method can be used if the output object is any of the following class types: - * <ul> - * <li>{@link Writer} - * <li>{@link OutputStream} - Output will be written as UTF-8 encoded stream. - * <li>{@link File} - Output will be written as system-default encoded stream. - * </ul> - * - * @return The output object wrapped in a Writer. - * @throws Exception If object could not be converted to a writer. - */ - public Writer getWriter() throws Exception { - return output.getWriter(); - } - - /** - * Returns the raw output object passed into this session. - * - * @return The raw output object passed into this session. - */ - protected Object getOutput() { - return output.getRawOutput(); - } - - /** * Sets the current bean property being serialized for proper error messages. * * @param currentProperty The current property being serialized. @@ -682,11 +615,7 @@ public class SerializerSession extends BeanSession { @Override public boolean close() { - if (super.close()) { - output.close(); - return true; - } - return false; + return super.close(); } private static class StackElement { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java b/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java index e80cb58..fc782d7 100644 --- a/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java @@ -30,9 +30,9 @@ import org.apache.juneau.utils.*; * It has 2 abstract methods to implement... * <ul class='spaced-list'> * <li> - * {@link #createSession(Object, ObjectMap, Method, Locale, TimeZone, MediaType, UriContext)} + * {@link #createSession(ObjectMap, Method, Locale, TimeZone, MediaType, UriContext)} * <li> - * {@link #doSerialize(SerializerSession, Object)} + * {@link #doSerialize(SerializerSession, SerializerOutput, Object)} * </ul> * * <h6 class='topic'>@Produces annotation</h6> @@ -74,7 +74,8 @@ public abstract class WriterSerializer extends Serializer { @Override public final String serialize(Object o) throws SerializeException { StringWriter w = new StringWriter(); - serialize(createSession(w), o); + SerializerOutput out = new SerializerOutput(w); + serialize(createSession(), out, o); return w.toString(); } @@ -90,7 +91,8 @@ public abstract class WriterSerializer extends Serializer { public final String toString(Object o) { try { StringWriter w = new StringWriter(); - serialize(createSession(w), o); + SerializerOutput out = new SerializerOutput(w); + serialize(createSession(), out, o); return w.toString(); } catch (Exception e) { throw new RuntimeException(e); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java index 14cb23b..c9053a4 100644 --- a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java @@ -59,9 +59,9 @@ public final class SoapXmlSerializer extends XmlSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { XmlSerializerSession s = (XmlSerializerSession)session; - XmlWriter w = s.getWriter(); + XmlWriter w = s.getXmlWriter(out); w.append("<?xml") .attr("version", "1.0") .attr("encoding", "UTF-8") @@ -71,7 +71,8 @@ public final class SoapXmlSerializer extends XmlSerializer { .appendln(">"); w.sTag(1, "soap", "Body").nl(1); s.indent += 2; - super.doSerialize(s, o); + w.flush(); + super.doSerialize(s, out, o); w.ie(1).eTag("soap", "Body").nl(1); w.eTag("soap", "Envelope").nl(0); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/uon/UonSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/uon/UonSerializer.java b/juneau-core/src/main/java/org/apache/juneau/uon/UonSerializer.java index c910bab..7d5c100 100644 --- a/juneau-core/src/main/java/org/apache/juneau/uon/UonSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/uon/UonSerializer.java @@ -390,14 +390,14 @@ public class UonSerializer extends WriterSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - public UonSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, + public UonSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new UonSerializerSession(ctx, null, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new UonSerializerSession(ctx, null, op, javaMethod, locale, timeZone, mediaType, uriContext); } @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { UonSerializerSession s = (UonSerializerSession)session; - serializeAnything(s, s.getWriter(), o, s.getExpectedRootType(o), "root", null); + serializeAnything(s, s.getUonWriter(out), o, s.getExpectedRootType(o), "root", null); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/uon/UonSerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/uon/UonSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/uon/UonSerializerSession.java index df88809..67c50c5 100644 --- a/juneau-core/src/main/java/org/apache/juneau/uon/UonSerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/uon/UonSerializerSession.java @@ -20,7 +20,6 @@ import java.util.*; import org.apache.juneau.*; import org.apache.juneau.http.*; -import org.apache.juneau.json.*; import org.apache.juneau.serializer.*; /** @@ -43,7 +42,6 @@ public class UonSerializerSession extends SerializerSession { * The context creating this session object. * The context contains all the configuration settings for this object. * @param encode Override the {@link UonSerializerContext#UON_encodeChars} setting. - * @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. @@ -59,9 +57,9 @@ public class UonSerializerSession extends SerializerSession { * The URI context. * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. */ - protected UonSerializerSession(UonSerializerContext ctx, Boolean encode, ObjectMap op, Object output, + protected UonSerializerSession(UonSerializerContext ctx, Boolean encode, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - super(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + super(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); if (op == null || op.isEmpty()) { encodeChars = encode == null ? ctx.encodeChars : encode; addBeanTypeProperties = ctx.addBeanTypeProperties; @@ -101,11 +99,17 @@ public class UonSerializerSession extends SerializerSession { return plainTextParams; } - @Override /* SerializerSession */ - public final UonWriter getWriter() throws Exception { - Object output = getOutput(); + /** + * Converts the specified output target object to an {@link UonWriter}. + * + * @param out The output target object. + * @return The output target object wrapped in an {@link UonWriter}. + * @throws Exception + */ + public final UonWriter getUonWriter(SerializerOutput out) throws Exception { + Object output = out.getRawOutput(); if (output instanceof UonWriter) return (UonWriter)output; - return new UonWriter(this, super.getWriter(), isUseWhitespace(), getMaxIndent(), isEncodeChars(), isTrimStrings(), isPlainTextParams(), getUriResolver()); + return new UonWriter(this, out.getWriter(), isUseWhitespace(), getMaxIndent(), isEncodeChars(), isTrimStrings(), isPlainTextParams(), getUriResolver()); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java index e5c40c4..6ceb906 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java @@ -438,8 +438,9 @@ public class UrlEncodingSerializer extends UonSerializer implements PartSerializ } StringWriter w = new StringWriter(); - UonSerializerSession s = new UrlEncodingSerializerSession(ctx, urlEncode, null, w, null, null, null, MediaType.UON, null); - super.doSerialize(s, o); + SerializerOutput out = new SerializerOutput(w); + UonSerializerSession s = new UrlEncodingSerializerSession(ctx, urlEncode, null, null, null, null, MediaType.UON, null); + super.doSerialize(s, out, o); return w.toString(); } catch (Exception e) { throw new RuntimeException(e); @@ -452,15 +453,15 @@ public class UrlEncodingSerializer extends UonSerializer implements PartSerializ //-------------------------------------------------------------------------------- @Override /* Serializer */ - public UrlEncodingSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, + public UrlEncodingSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new UrlEncodingSerializerSession(ctx, null, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new UrlEncodingSerializerSession(ctx, null, op, javaMethod, locale, timeZone, mediaType, uriContext); } @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { UrlEncodingSerializerSession s = (UrlEncodingSerializerSession)session; - serializeAnything(s, s.getWriter(), o); + serializeAnything(s, s.getUonWriter(out), o); } @Override /* PartSerializer */ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java index e2dd42a..6a0fb21 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java @@ -17,7 +17,6 @@ import java.util.*; import org.apache.juneau.*; import org.apache.juneau.http.*; -import org.apache.juneau.json.*; import org.apache.juneau.uon.*; /** @@ -37,7 +36,6 @@ public class UrlEncodingSerializerSession extends UonSerializerSession { * The context creating this session object. * The context contains all the configuration settings for this object. * @param encode Overrides the {@link UonSerializerContext#UON_encodeChars} setting. - * @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. @@ -53,9 +51,9 @@ public class UrlEncodingSerializerSession extends UonSerializerSession { * The URI context. * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. */ - public UrlEncodingSerializerSession(UrlEncodingSerializerContext ctx, Boolean encode, ObjectMap op, Object output, + public UrlEncodingSerializerSession(UrlEncodingSerializerContext ctx, Boolean encode, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - super(ctx, encode, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + super(ctx, encode, op, javaMethod, locale, timeZone, mediaType, uriContext); if (op == null || op.isEmpty()) { expandedParams = ctx.expandedParams; } else { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java index 36b7376..e7e4548 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java @@ -69,13 +69,14 @@ public class XmlDocSerializer extends XmlSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { XmlSerializerSession s = (XmlSerializerSession)session; - XmlWriter w = s.getWriter(); + XmlWriter w = s.getXmlWriter(out); w.append("<?xml") .attr("version", "1.0") .attr("encoding", "UTF-8") .appendln("?>"); - super.doSerialize(s, o); + w.flush(); + super.doSerialize(s, out, o); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java index 6667123..34cbab0 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java @@ -46,13 +46,14 @@ public class XmlSchemaDocSerializer extends XmlSchemaSerializer { } @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { XmlSerializerSession s = (XmlSerializerSession)session; - XmlWriter w = s.getWriter(); + XmlWriter w = s.getXmlWriter(out); w.append("<?xml") .attr("version", "1.0") .attr("encoding", "UTF-8") .appendln("?>"); - super.doSerialize(s, o); + w.flush(); + super.doSerialize(s, out, o); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java index 21769aa..c1af712 100644 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java @@ -81,7 +81,7 @@ public class XmlSchemaSerializer extends XmlSerializer { } @Override /* XmlSerializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { XmlSerializerSession s = (XmlSerializerSession)session; if (s.isEnableNamespaces() && s.isAutoDetectNamespaces()) @@ -92,23 +92,24 @@ public class XmlSchemaSerializer extends XmlSerializer { Schemas schemas = new Schemas(s, xs, s.getDefaultNamespace(), allNs); schemas.process(s, o); - schemas.serializeTo(session.getWriter()); + schemas.serializeTo(out.getWriter()); } /** - * Returns an XML-Schema validator based on the output returned by {@link #doSerialize(SerializerSession, Object)}; + * Returns an XML-Schema validator based on the output returned by {@link #doSerialize(SerializerSession, SerializerOutput, Object)}; * * @param session - * The serializer session object return by {@link #createSession(Object, ObjectMap, Method, Locale, TimeZone, + * The serializer session object return by {@link #createSession(ObjectMap, Method, Locale, TimeZone, * MediaType, UriContext)}. * Can be <jk>null</jk>. + * @param out The target writer. * @param o The object to serialize. * @return The new validator. * @throws Exception If a problem was detected in the XML-Schema output produced by this serializer. */ - public Validator getValidator(SerializerSession session, Object o) throws Exception { - doSerialize(session, o); - String xmlSchema = session.getWriter().toString(); + public Validator getValidator(SerializerSession session, SerializerOutput out, Object o) throws Exception { + doSerialize(session, out, o); + String xmlSchema = out.getWriter().toString(); // create a SchemaFactory capable of understanding WXS schemas SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); @@ -586,11 +587,11 @@ public class XmlSchemaSerializer extends XmlSerializer { } @Override /* Serializer */ - public XmlSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { + public XmlSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { // This serializer must always have namespaces enabled. if (op == null) op = new ObjectMap(); op.put(XmlSerializerContext.XML_enableNamespaces, true); - return new XmlSerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new XmlSerializerSession(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/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 702107d..b50dfae 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 @@ -842,16 +842,16 @@ public class XmlSerializer extends WriterSerializer { //-------------------------------------------------------------------------------- @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { XmlSerializerSession s = (XmlSerializerSession)session; if (s.isEnableNamespaces() && s.isAutoDetectNamespaces()) findNsfMappings(s, o); - serializeAnything(s, s.getWriter(), o, s.getExpectedRootType(o), null, null, s.isEnableNamespaces() && s.isAddNamespaceUrlsToRoot(), XmlFormat.DEFAULT, false, false, null); + serializeAnything(s, s.getXmlWriter(out), o, s.getExpectedRootType(o), null, null, s.isEnableNamespaces() && s.isAddNamespaceUrlsToRoot(), XmlFormat.DEFAULT, false, false, null); } @Override /* Serializer */ - public XmlSerializerSession createSession(Object output, ObjectMap op, Method javaMethod, Locale locale, + public XmlSerializerSession createSession(ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - return new XmlSerializerSession(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + return new XmlSerializerSession(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/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 3033b17..f711dc1 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 @@ -23,7 +23,6 @@ import java.util.*; import org.apache.juneau.*; import org.apache.juneau.http.*; -import org.apache.juneau.json.*; import org.apache.juneau.serializer.*; /** @@ -54,7 +53,6 @@ public class XmlSerializerSession extends SerializerSession { * @param ctx * The context creating this session object. * The context contains all the configuration settings for this object. - * @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. @@ -70,9 +68,9 @@ public class XmlSerializerSession extends SerializerSession { * The URI context. * Identifies the current request URI used for resolution of URIs to absolute or root-relative form. */ - public XmlSerializerSession(XmlSerializerContext ctx, ObjectMap op, Object output, Method javaMethod, Locale locale, + public XmlSerializerSession(XmlSerializerContext ctx, ObjectMap op, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) { - super(ctx, op, output, javaMethod, locale, timeZone, mediaType, uriContext); + super(ctx, op, javaMethod, locale, timeZone, mediaType, uriContext); if (op == null || op.isEmpty()) { enableNamespaces = ctx.enableNamespaces; autoDetectNamespaces = ctx.autoDetectNamespaces; @@ -203,11 +201,17 @@ public class XmlSerializerSession extends SerializerSession { return false; } - @Override /* SerializerSession */ - public XmlWriter getWriter() throws Exception { - Object output = getOutput(); + /** + * Converts the specified output target object to an {@link XmlWriter}. + * + * @param out The output target object. + * @return The output target object wrapped in an {@link XmlWriter}. + * @throws Exception + */ + public XmlWriter getXmlWriter(SerializerOutput out) throws Exception { + Object output = out.getRawOutput(); if (output instanceof XmlWriter) return (XmlWriter)output; - return new XmlWriter(super.getWriter(), isUseWhitespace(), getMaxIndent(), isTrimStrings(), getQuoteChar(), getUriResolver(), isEnableNamespaces(), getDefaultNamespace()); + return new XmlWriter(out.getWriter(), isUseWhitespace(), getMaxIndent(), isTrimStrings(), getQuoteChar(), getUriResolver(), isEnableNamespaces(), getDefaultNamespace()); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java ---------------------------------------------------------------------- diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java index b7018f3..94cefcc 100644 --- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java +++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java @@ -143,10 +143,10 @@ public class PhotosResource extends Resource { } @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { RenderedImage image = (RenderedImage)o; String mediaType = session.getProperty("mediaType"); - ImageIO.write(image, mediaType.substring(mediaType.indexOf('/')+1), session.getOutputStream()); + ImageIO.write(image, mediaType.substring(mediaType.indexOf('/')+1), out.getOutputStream()); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/BaseProvider.java ---------------------------------------------------------------------- diff --git a/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/BaseProvider.java b/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/BaseProvider.java index ce95bb0..a2137a1 100644 --- a/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/BaseProvider.java +++ b/juneau-rest-jaxrs/src/main/java/org/apache/juneau/rest/jaxrs/BaseProvider.java @@ -118,14 +118,16 @@ public class BaseProvider implements MessageBodyReader<Object>, MessageBodyWrite if (s.isWriterSerializer()) { WriterSerializer s2 = (WriterSerializer)s; OutputStreamWriter w = new OutputStreamWriter(out, UTF8); - SerializerSession session = s.createSession(w, mp, null, locale, timeZone, sm.getMediaType(), null); - s2.serialize(session, o); + SerializerOutput sout = new SerializerOutput(w); + SerializerSession session = s.createSession(mp, null, locale, timeZone, sm.getMediaType(), null); + s2.serialize(session, sout, o); w.flush(); w.close(); } else { OutputStreamSerializer s2 = (OutputStreamSerializer)s; - SerializerSession session = s.createSession(s2, mp, null, locale, timeZone, sm.getMediaType(), null); - s2.serialize(session, o); + SerializerOutput sout = new SerializerOutput(s2); + SerializerSession session = s.createSession(mp, null, locale, timeZone, sm.getMediaType(), null); + s2.serialize(session, sout, o); out.flush(); out.close(); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8879750c/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java index 3f5ef8b..94051a7 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/AcceptCharsetResource.java @@ -76,8 +76,8 @@ public class AcceptCharsetResource extends RestServlet { } @Override /* Serializer */ - protected void doSerialize(SerializerSession session, Object o) throws Exception { - Writer w = new OutputStreamWriter(session.getOutputStream()); + protected void doSerialize(SerializerSession session, SerializerOutput out, Object o) throws Exception { + Writer w = new OutputStreamWriter(out.getOutputStream()); w.append(o.toString()).append('/').append(session.getProperty("characterEncoding")); w.flush(); w.close();
