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