1 /* 2 * The Apache Software License, Version 1.1 3 * 4 * 5 * Copyright (c) 1999 The Apache Software Foundation. All rights 6 * reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in 17 * the documentation and/or other materials provided with the 18 * distribution. 19 * 20 * 3. The end-user documentation included with the redistribution, 21 * if any, must include the following acknowledgment: 22 * "This product includes software developed by the 23 * Apache Software Foundation (http://www.apache.org/)." 24 * Alternately, this acknowledgment may appear in the software itself, 25 * if and wherever such third-party acknowledgments normally appear. 26 * 27 * 4. The names "Xerces" and "Apache Software Foundation" must 28 * not be used to endorse or promote products derived from this 29 * software without prior written permission. For written 30 * permission, please contact apache@apache.org. 31 * 32 * 5. Products derived from this software may not be called "Apache", 33 * nor may "Apache" appear in their name, without prior written 34 * permission of the Apache Software Foundation. 35 * 36 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 37 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 38 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 39 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 42 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 43 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 44 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 45 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 46 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 47 * SUCH DAMAGE. 48 * ==================================================================== 49 * 50 * This software consists of voluntary contributions made by many 51 * individuals on behalf of the Apache Software Foundation and was 52 * originally based on software copyright (c) 1999, International 53 * Business Machines, Inc., http://www.apache.org. For more 54 * information on the Apache Software Foundation, please see 55 * <http://www.apache.org/>. 56 */ 57 58 59 package org.enhydra.apache.xml.serialize; 60 61 62 import java.io.IOException; 63 import java.io.OutputStream; 64 import java.io.Writer; 65 66 import org.w3c.dom.Document; 67 import org.w3c.dom.Element; 68 import org.xml.sax.ContentHandler; 69 import org.xml.sax.DocumentHandler; 70 import org.xml.sax.ext.DeclHandler; 71 import org.xml.sax.ext.LexicalHandler; 72 73 74 /** 75 * Interface for a DOM serializer implementation, factory for DOM and SAX 76 * serializers, and static methods for serializing DOM documents. 77 * <p> 78 * To serialize a document using SAX events, create a compatible serializer 79 * using {@link #makeSAXSerializer} and pass it around as a {@link 80 * DocumentHandler}. If an I/O error occurs while serializing, it will 81 * be thrown by {@link DocumentHandler#endDocument}. The SAX serializer 82 * may also be used as {@link org.xml.sax.DTDHandler}, {@link DeclHandler} and 83 * {@link LexicalHandler}. 84 * <p> 85 * To serialize a DOM document or DOM element, create a compatible 86 * serializer using {@link #makeSerializer} and call it's {@link 87 * #serialize(Document)} or {@link #serialize(Element)} methods. 88 * Both methods would produce a full XML document, to serizlie only 89 * the portion of the document use {@link OutputFormat#setOmitXMLDeclaration} 90 * and specify no document type. 91 * <p> 92 * The convenience method {@link #serialize(Document,Writer,OutputFormat)} 93 * creates a serializer and calls {@link #serizlie(Document)} on that 94 * serialized. 95 * <p> 96 * The {@link OutputFormat} dictates what underlying serialized is used 97 * to serialize the document based on the specified method. If the output 98 * format or method are missing, the default is an XML serializer with 99 * UTF-8 encoding and now indentation. 100 * 101 * 102 * @version $Revision: 1.2 $ $Date: 2005/01/26 08:28:45 $ 103 * @author <a HREF="mailto:arkin@intalio.com">Assaf Arkin</a> 104 * @author <a HREF="mailto:Scott_Boag/CAM/Lotus@lotus.com">Scott Boag</a> 105 * @see DocumentHandler 106 * @see ContentHandler 107 * @see OutputFormat 108 * @see DOMSerializer 109 */ 110 public interface Serializer 111 { 112 113 114 /** 115 * Specifies an output stream to which the document should be 116 * serialized. This method should not be called while the 117 * serializer is in the process of serializing a document. 118 */ 119 public void setOutputByteStream(OutputStream output); 120 121 122 /** 123 * Specifies a writer to which the document should be serialized. 124 * This method should not be called while the serializer is in 125 * the process of serializing a document. 126 */ 127 public void setOutputCharStream( Writer output ); 128 129 130 /** 131 * Specifies an output format for this serializer. It the 132 * serializer has already been associated with an output format, 133 * it will switch to the new format. This method should not be 134 * called while the serializer is in the process of serializing 135 * a document. 136 * 137 * @param format The output format to use 138 */ 139 public void setOutputFormat( OutputFormat format ); 140 141 142 /** 143 * Return a {@link DocumentHandler} interface into this serializer. 144 * If the serializer does not support the {@link DocumentHandler} 145 * interface, it should return null. 146 */ 147 public DocumentHandler asDocumentHandler() 148 throws IOException; 149 150 151 /** 152 * Return a {@link ContentHandler} interface into this serializer. 153 * If the serializer does not support the {@link ContentHandler} 154 * interface, it should return null. 155 */ 156 public ContentHandler asContentHandler() 157 throws IOException; 158 159 160 /** 161 * Return a {@link DOMSerializer} interface into this serializer. 162 * If the serializer does not support the {@link DOMSerializer} 163 * interface, it should return null. 164 */ 165 public DOMSerializer asDOMSerializer() 166 throws IOException; 167 168 169 } 170 171 172 173 174 175