You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2009/12/21 14:17:49 UTC
svn commit: r892810 - in /cocoon/cocoon3/trunk:
cocoon-sax/src/main/java/org/apache/cocoon/sax/component/
cocoon-sax/src/main/java/org/apache/cocoon/sax/util/
cocoon-sax/src/test/java/org/apache/cocoon/sax/component/
cocoon-sitemap/src/main/resources/M...
Author: reinhard
Date: Mon Dec 21 13:17:48 2009
New Revision: 892810
URL: http://svn.apache.org/viewvc?rev=892810&view=rev
Log:
static factory methods for XMLSerializer (xml, xhtml, html4) and use them in Spring
make the XMLSerializer more easily configurable
don't allow passing null properties
unit tests
Added:
cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/XMLSerializerTest.java (with props)
Modified:
cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XMLSerializer.java
cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/util/TransformationUtils.java
cocoon/cocoon3/trunk/cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/cocoon-pipeline-component.xml
Modified: cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XMLSerializer.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XMLSerializer.java?rev=892810&r1=892809&r2=892810&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XMLSerializer.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/component/XMLSerializer.java Mon Dec 21 13:17:48 2009
@@ -22,6 +22,7 @@
import java.util.Map;
import java.util.Properties;
+import javax.xml.transform.OutputKeys;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXTransformerFactory;
@@ -30,7 +31,7 @@
import org.apache.cocoon.pipeline.SetupException;
import org.apache.cocoon.pipeline.caching.CacheKey;
-import org.apache.cocoon.pipeline.caching.SimpleCacheKey;
+import org.apache.cocoon.pipeline.caching.ParameterCacheKey;
import org.apache.cocoon.pipeline.component.CachingPipelineComponent;
import org.apache.cocoon.sax.AbstractSAXSerializer;
@@ -44,13 +45,101 @@
private TransformerHandler transformerHandler;
public XMLSerializer() {
+ this(new Properties());
}
public XMLSerializer(Properties format) {
super();
+
+ if (format == null) {
+ throw new SetupException("No format properites passed as argument.");
+ }
+
+ this.format = format;
+ }
+
+ public CacheKey constructCacheKey() {
+ return new ParameterCacheKey("format", this.format);
+ }
+
+ public XMLSerializer setCDataSectionElements(String cdataSectionElements) {
+ if (cdataSectionElements == null || "".equals(cdataSectionElements)) {
+ throw new SetupException("A ... has to be passed as argument.");
+ }
+
+ this.format.put(OutputKeys.CDATA_SECTION_ELEMENTS, cdataSectionElements);
+ return this;
+ }
+
+ public XMLSerializer setDoctypePublic(String doctypePublic) {
+ if (doctypePublic == null || "".equals(doctypePublic)) {
+ throw new SetupException("A doctype-public has to be passed as argument.");
+ }
+
+ this.format.put(OutputKeys.DOCTYPE_PUBLIC, doctypePublic);
+ return this;
+ }
+
+ public XMLSerializer setDoctypeSystem(String doctypeSystem) {
+ if (doctypeSystem == null || "".equals(doctypeSystem)) {
+ throw new SetupException("A doctype-system has to be passed as argument.");
+ }
+
+ this.format.put(OutputKeys.DOCTYPE_SYSTEM, doctypeSystem);
+ return this;
+ }
+
+ public XMLSerializer setEncoding(String encoding) {
+ if (encoding == null || "".equals(encoding)) {
+ throw new SetupException("A encoding has to be passed as argument.");
+ }
+
+ this.format.put(OutputKeys.ENCODING, encoding);
+ return this;
+ }
+
+ public void setFormat(Properties format) {
this.format = format;
}
+ public XMLSerializer setIndent(boolean indent) {
+ this.format.put(OutputKeys.INDENT, indent ? "yes" : "no");
+ return this;
+ }
+
+ public XMLSerializer setMediaType(String mediaType) {
+ if (mediaType == null || "".equals(mediaType)) {
+ throw new SetupException("A media-type has to be passed as argument.");
+ }
+
+ this.format.put(OutputKeys.MEDIA_TYPE, mediaType);
+ return this;
+ }
+
+ public XMLSerializer setMethod(String method) {
+ if (method == null || "".equals(method)) {
+ throw new SetupException("A method has to be passed as argument.");
+ }
+
+ this.format.put(OutputKeys.METHOD, method);
+ return this;
+ }
+
+ public XMLSerializer setOmitXmlDeclaration(boolean omitXmlDeclration) {
+ this.format.put(OutputKeys.OMIT_XML_DECLARATION, omitXmlDeclration ? "yes" : "no");
+ return this;
+ }
+
+ @Override
+ public void setOutputStream(OutputStream outputStream) {
+ this.transformerHandler.setResult(new StreamResult(outputStream));
+ }
+
+ public XMLSerializer setStandAlone(boolean standalone) {
+ this.format.put(OutputKeys.STANDALONE, standalone ? "yes" : "no");
+ return this;
+ }
+
@Override
public void setup(Map<String, Object> inputParameters) {
try {
@@ -59,27 +148,60 @@
throw new SetupException("Can't setup transformer handler for the serializer.", e);
}
- // set a default format because some transformer implementations run
+ // set a default method because some transformer implementations run
// into NPEs if it is missing
- if (this.format == null) {
- this.format = new Properties();
+ if (!this.format.containsKey("format")) {
this.format.put("method", "xml");
}
+
this.transformerHandler.getTransformer().setOutputProperties(this.format);
this.setContentHandler(this.transformerHandler);
}
- public CacheKey constructCacheKey() {
- return new SimpleCacheKey();
+ public XMLSerializer setVersion(String version) {
+ if (version == null || "".equals(version)) {
+ throw new SetupException("A version has to be passed as argument.");
+ }
+
+ this.format.put(OutputKeys.VERSION, version);
+ return this;
}
- public void setFormat(Properties format) {
- this.format = format;
+ protected Properties getFormat() {
+ return this.format;
}
- @Override
- public void setOutputStream(OutputStream outputStream) {
- this.transformerHandler.setResult(new StreamResult(outputStream));
+ public static XMLSerializer createXHTMLSerializer() {
+ XMLSerializer serializer = new XMLSerializer();
+
+ serializer.setContentType("text/html;charset=utf-8");
+ serializer.setDoctypePublic("-//W3C//DTD XHTML 1.0 Strict//EN");
+ serializer.setDoctypeSystem("http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd");
+ serializer.setEncoding("UTF-8");
+ serializer.setMethod("xml");
+
+ return serializer;
+ }
+
+ public static XMLSerializer createHTML4Serializer() {
+ XMLSerializer serializer = new XMLSerializer();
+
+ serializer.setContentType("text/html;charset=utf-8");
+ serializer.setDoctypePublic("-//W3C//DTD HTML 4.01 Transitional//EN");
+ serializer.setEncoding("UTF-8");
+ serializer.setMethod("html");
+
+ return serializer;
+ }
+
+ public static XMLSerializer createXMLSerializer() {
+ XMLSerializer serializer = new XMLSerializer();
+
+ serializer.setContentType("text/xml");
+ serializer.setEncoding("UTF-8");
+ serializer.setMethod("xml");
+
+ return serializer;
}
}
Modified: cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/util/TransformationUtils.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/util/TransformationUtils.java?rev=892810&r1=892809&r2=892810&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/util/TransformationUtils.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/main/java/org/apache/cocoon/sax/util/TransformationUtils.java Mon Dec 21 13:17:48 2009
@@ -168,6 +168,10 @@
xsltTransformer.setParameters(xsltParameters);
pipeline.addComponent(xsltTransformer);
}
+
+ if (outputProperties == null) {
+ outputProperties = new Properties();
+ }
pipeline.addComponent(new XMLSerializer(outputProperties));
pipeline.setup(outputStream, null);
Added: cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/XMLSerializerTest.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/XMLSerializerTest.java?rev=892810&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/XMLSerializerTest.java (added)
+++ cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/XMLSerializerTest.java Mon Dec 21 13:17:48 2009
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.sax.component;
+
+import static org.junit.Assert.*;
+
+import java.util.Properties;
+
+import javax.xml.transform.OutputKeys;
+
+import org.apache.cocoon.pipeline.SetupException;
+import org.junit.Test;
+
+public class XMLSerializerTest {
+
+ @Test
+ public void outputPropertiesAvailable() {
+ XMLSerializer serializer = new XMLSerializer();
+ assertNotNull(serializer.getFormat());
+ }
+
+ @Test(expected = SetupException.class)
+ public void outputPropertiesAvailable2() {
+ new XMLSerializer(null);
+ }
+
+ @Test
+ public void outputPropertiesSpecificMethods() {
+ XMLSerializer serializer = new XMLSerializer();
+ Properties format = serializer.getFormat();
+ assertNotNull(format);
+ assertEquals(0, format.size());
+
+ serializer.setCDataSectionElements("p");
+ assertEquals(1, format.size());
+ assertEquals("p", format.getProperty(OutputKeys.CDATA_SECTION_ELEMENTS));
+
+ serializer.setMediaType("media");
+ assertEquals(2, format.size());
+ assertEquals("media", format.getProperty(OutputKeys.MEDIA_TYPE));
+
+ serializer.setOmitXmlDeclaration(true);
+ assertEquals(3, format.size());
+ assertEquals("yes", format.getProperty(OutputKeys.OMIT_XML_DECLARATION));
+
+ serializer.setDoctypePublic("foo");
+ assertEquals(4, format.size());
+ assertEquals("foo", format.getProperty(OutputKeys.DOCTYPE_PUBLIC));
+
+ serializer.setDoctypeSystem("bar");
+ assertEquals(5, format.size());
+ assertEquals("bar", format.getProperty(OutputKeys.DOCTYPE_SYSTEM));
+
+ serializer.setIndent(true);
+ assertEquals(6, format.size());
+ assertEquals("yes", format.getProperty(OutputKeys.INDENT));
+
+ serializer.setEncoding("utf-8");
+ assertEquals(7, format.size());
+ assertEquals("utf-8", format.getProperty(OutputKeys.ENCODING));
+
+ serializer.setVersion("1.0");
+ assertEquals(8, format.size());
+ assertEquals("1.0", format.getProperty(OutputKeys.VERSION));
+
+ serializer.setStandAlone(true);
+ assertEquals(9, format.size());
+ assertEquals("yes", format.getProperty(OutputKeys.STANDALONE));
+
+ serializer.setMethod("abc");
+ assertEquals(10, format.size());
+ assertEquals("abc", format.getProperty(OutputKeys.METHOD));
+ }
+}
Propchange: cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/XMLSerializerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/XMLSerializerTest.java
------------------------------------------------------------------------------
svn:keywords = Id
Propchange: cocoon/cocoon3/trunk/cocoon-sax/src/test/java/org/apache/cocoon/sax/component/XMLSerializerTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: cocoon/cocoon3/trunk/cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/cocoon-pipeline-component.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/cocoon-pipeline-component.xml?rev=892810&r1=892809&r2=892810&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/cocoon-pipeline-component.xml (original)
+++ cocoon/cocoon3/trunk/cocoon-sitemap/src/main/resources/META-INF/cocoon/spring/cocoon-pipeline-component.xml Mon Dec 21 13:17:48 2009
@@ -25,38 +25,14 @@
class="org.apache.cocoon.sitemap.spring.PrototypePipelineComponentFactory">
</bean>
- <bean name="serializer:xhtml" class="org.apache.cocoon.sax.component.XMLSerializer" scope="prototype">
- <property name="contentType" value="text/html;charset=utf-8" />
- <property name="format">
- <props>
- <prop key="doctype-public">-//W3C//DTD XHTML 1.0 Strict//EN</prop>
- <prop key="doctype-system">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</prop>
- <prop key="encoding">UTF-8</prop>
- <prop key="method">xml</prop>
- </props>
- </property>
- </bean>
+ <bean name="serializer:xhtml" class="org.apache.cocoon.sax.component.XMLSerializer" scope="prototype"
+ factory-method="createXHTMLSerializer" />
- <bean name="serializer:xml" class="org.apache.cocoon.sax.component.XMLSerializer" scope="prototype">
- <property name="contentType" value="text/xml" />
- <property name="format">
- <props>
- <prop key="encoding">UTF-8</prop>
- <prop key="method">xml</prop>
- </props>
- </property>
- </bean>
+ <bean name="serializer:xml" class="org.apache.cocoon.sax.component.XMLSerializer" scope="prototype"
+ factory-method="createXMLSerializer" />
- <bean name="serializer:html" class="org.apache.cocoon.sax.component.XMLSerializer" scope="prototype">
- <property name="contentType" value="text/html;charset=utf-8" />
- <property name="format">
- <props>
- <prop key="doctype-public">-//W3C//DTD HTML 4.01 Transitional//EN</prop>
- <prop key="encoding">UTF-8</prop>
- <prop key="method">html</prop>
- </props>
- </property>
- </bean>
+ <bean name="serializer:html" class="org.apache.cocoon.sax.component.XMLSerializer" scope="prototype"
+ factory-method="createHTML4Serializer" />
<bean name="generator:url" class="org.apache.cocoon.sax.component.SAXGenerator" scope="prototype" />