1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 /* 19 * $Id$ 20 */ 21 22 package org.apache.xml.serializer; 23 24 import java.io.IOException; 25 26 import org.w3c.dom.DOMErrorHandler; 27 import org.w3c.dom.Node; 28 import org.w3c.dom.ls.LSSerializerFilter; 29 30 /** 31 * This interface is not intended to be used 32 * by an end user, but rather by an XML parser that is implementing the DOM 33 * Level 3 Load and Save APIs. 34 * <p> 35 * 36 * See the DOM Level 3 Load and Save interface at <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html#LS-LSSerializer">LSSeializer</a>. 37 * 38 * For a list of configuration parameters for DOM Level 3 see <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMConfiguration">DOMConfiguration</a>. 39 * For additional configuration parameters available with the DOM Level 3 Load and Save API LSSerializer see 40 * <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html#LS-LSSerializer-config">LSerializer config</a>. 41 * <p> 42 * The following example uses a DOM3Serializer indirectly, through an an XML 43 * parser that uses this class as part of its implementation of the DOM Level 3 44 * Load and Save APIs, and is the prefered way to serialize with DOM Level 3 APIs. 45 * <p> 46 * Example: 47 * <pre> 48 * public class TestDOM3 { 49 * 50 * public static void main(String args[]) throws Exception { 51 * // Get document to serialize 52 * TestDOM3 test = new TestDOM3(); 53 * 54 * // Serialize using standard DOM Level 3 Load/Save APIs 55 * System.out.println(test.testDOM3LS()); 56 * } 57 * 58 * public org.w3c.dom.Document getDocument() throws Exception { 59 * // Create a simple DOM Document. 60 * javax.xml.parsers.DocumentBuilderFactory factory = 61 * javax.xml.parsers.DocumentBuilderFactory.newInstance(); 62 * javax.xml.parsers.DocumentBuilder builder = factory.newDocumentBuilder(); 63 * byte[] bytes = "<parent><child/></parent>".getBytes(); 64 * java.io.InputStream is = new java.io.ByteArrayInputStream(bytes); 65 * org.w3c.dom.Document doc = builder.parse(is); 66 * return doc; 67 * } 68 * 69 * // 70 * // This method uses standard DOM Level 3 Load Save APIs: 71 * // org.w3c.dom.bootstrap.DOMImplementationRegistry 72 * // org.w3c.dom.ls.DOMImplementationLS 73 * // org.w3c.dom.ls.DOMImplementationLS 74 * // org.w3c.dom.ls.LSSerializer 75 * // org.w3c.dom.DOMConfiguration 76 * // 77 * // The only thing non-standard in this method is the value set for the 78 * // name of the class implementing the DOM Level 3 Load Save APIs, 79 * // which in this case is: 80 * // org.apache.xerces.dom.DOMImplementationSourceImpl 81 * // 82 * 83 * public String testDOM3LS() throws Exception { 84 * 85 * // Get a simple DOM Document that will be serialized. 86 * org.w3c.dom.Document docToSerialize = getDocument(); 87 * 88 * // Get a factory (DOMImplementationLS) for creating a Load and Save object. 89 * org.w3c.dom.ls.DOMImplementationLS impl = 90 * (org.w3c.dom.ls.DOMImplementationLS) 91 * org.w3c.dom.bootstrap.DOMImplementationRegistry.newInstance().getDOMImplementation("LS"); 92 * 93 * // Use the factory to create an object (LSSerializer) used to 94 * // write out or save the document. 95 * org.w3c.dom.ls.LSSerializer writer = impl.createLSSerializer(); 96 * org.w3c.dom.DOMConfiguration config = writer.getDomConfig(); 97 * config.setParameter("format-pretty-print", Boolean.TRUE); 98 * 99 * // Use the LSSerializer to write out or serialize the document to a String. 100 * String serializedXML = writer.writeToString(docToSerialize); 101 * return serializedXML; 102 * } 103 * 104 * } // end of class TestDOM3 105 * </pre> 106 * 107 * @see <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMConfiguration">DOMConfiguration</a> 108 * @see <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html#LS-LSSerializer-config">LSSerializer</a> 109 * @see org.apache.xml.serializer.Serializer 110 * @see org.apache.xml.serializer.DOMSerializer 111 * 112 * @xsl.usage advanced 113 * 114 */ 115 public interface DOM3Serializer { 116 /** 117 * Serializes the Level 3 DOM node. Throws an exception only if an I/O 118 * exception occured while serializing. 119 * 120 * This interface is a public API. 121 * 122 * @param node the Level 3 DOM node to serialize 123 * @throws IOException if an I/O exception occured while serializing 124 */ 125 public void serializeDOM3(Node node) throws IOException; 126 127 /** 128 * Sets a DOMErrorHandler on the DOM Level 3 Serializer. 129 * 130 * This interface is a public API. 131 * 132 * @param handler the Level 3 DOMErrorHandler 133 */ 134 public void setErrorHandler(DOMErrorHandler handler); 135 136 /** 137 * Returns a DOMErrorHandler set on the DOM Level 3 Serializer. 138 * 139 * This interface is a public API. 140 * 141 * @return A Level 3 DOMErrorHandler 142 */ 143 public DOMErrorHandler getErrorHandler(); 144 145 /** 146 * Sets a LSSerializerFilter on the DOM Level 3 Serializer to filter nodes 147 * during serialization. 148 * 149 * This interface is a public API. 150 * 151 * @param filter the Level 3 LSSerializerFilter 152 */ 153 public void setNodeFilter(LSSerializerFilter filter); 154 155 /** 156 * Returns a LSSerializerFilter set on the DOM Level 3 Serializer to filter nodes 157 * during serialization. 158 * 159 * This interface is a public API. 160 * 161 * @return The Level 3 LSSerializerFilter 162 */ 163 public LSSerializerFilter getNodeFilter(); 164 165 /** 166 * Sets the end-of-line sequence of characters to be used during serialization 167 * @param newLine The end-of-line sequence of characters to be used during serialization 168 */ 169 public void setNewLine(char[] newLine); 170 } 171