diff -r fd16c54261b3 -r 7f561c08de6b jaxp/src/share/classes/javax/xml/stream/XMLOutputFactory.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jaxp/src/share/classes/javax/xml/stream/XMLOutputFactory.java Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,244 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * Copyright (c) 2003 by BEA Systems, Inc. All Rights Reserved. + */ + +package javax.xml.stream; + +import javax.xml.transform.Result; + +/** + * Defines an abstract implementation of a factory for + * getting XMLEventWriters and XMLStreamWriters. + * + * The following table defines the standard properties of this specification. + * Each property varies in the level of support required by each implementation. + * The level of support required is described in the 'Required' column. + * + *
+ * Configuration parameters + * | + *||||
---|---|---|---|---|
Property Name | + *Behavior | + *Return type | + *Default Value | + *Required | + *
javax.xml.stream.isRepairingNamespaces | defaults prefixes on the output side | Boolean | False | Yes |
The following paragraphs describe the namespace and prefix repair algorithm:
+ * + *The property can be set with the following code line:
+ * setProperty("javax.xml.stream.isRepairingNamespaces",new Boolean(true|false));
This property specifies that the writer default namespace prefix declarations. + * The default value is false.
+ * + *If a writer isRepairingNamespaces it will create a namespace declaration + * on the current StartElement for + * any attribute that does not + * currently have a namespace declaration in scope. If the StartElement + * has a uri but no prefix specified a prefix will be assigned, if the prefix + * has not been declared in a parent of the current StartElement it will be declared + * on the current StartElement. If the defaultNamespace is bound and in scope + * and the default namespace matches the URI of the attribute or StartElement + * QName no prefix will be assigned.
+ * + *If an element or attribute name has a prefix, but is not + * bound to any namespace URI, then the prefix will be removed + * during serialization.
+ * + *If element and/or attribute names in the same start or + * empty-element tag are bound to different namespace URIs and + * are using the same prefix then the element or the first + * occurring attribute retains the original prefix and the + * following attributes have their prefixes replaced with a + * new prefix that is bound to the namespace URIs of those + * attributes.
+ * + *If an element or attribute name uses a prefix that is + * bound to a different URI than that inherited from the + * namespace context of the parent of that element and there + * is no namespace declaration in the context of the current + * element then such a namespace declaration is added.
+ * + *If an element or attribute name is bound to a prefix and + * there is a namespace declaration that binds that prefix + * to a different URI then that namespace declaration is + * either removed if the correct mapping is inherited from + * the parent context of that element, or changed to the + * namespace URI of the element or attribute using that prefix.
+ * + * @author Copyright (c) 2003 by BEA Systems. All Rights Reserved. + * @see XMLInputFactory + * @see XMLEventWriter + * @see XMLStreamWriter + * @since 1.6 + */ +public abstract class XMLOutputFactory { + /** + * Property used to set prefix defaulting on the output side + */ + public static final String IS_REPAIRING_NAMESPACES= + "javax.xml.stream.isRepairingNamespaces"; + + protected XMLOutputFactory(){} + + /** + * Create a new instance of the factory. + * @throws FactoryConfigurationError if an instance of this factory cannot be loaded + */ + public static XMLOutputFactory newInstance() + throws FactoryConfigurationError + { + return (XMLOutputFactory) FactoryFinder.find("javax.xml.stream.XMLOutputFactory", + "com.sun.xml.internal.stream.XMLOutputFactoryImpl"); + } + + /** + * Create a new instance of the factory. + * + * @param factoryId Name of the factory to find, same as + * a property name + * @param classLoader classLoader to use + * @return the factory implementation + * @throws FactoryConfigurationError if an instance of this factory cannot be loaded + */ + public static XMLInputFactory newInstance(String factoryId, + ClassLoader classLoader) + throws FactoryConfigurationError { + try { + //do not fallback if given classloader can't find the class, throw exception + return (XMLInputFactory) FactoryFinder.newInstance(factoryId, classLoader, false); + } catch (FactoryFinder.ConfigurationError e) { + throw new FactoryConfigurationError(e.getException(), + e.getMessage()); + } + } + + /** + * Create a new XMLStreamWriter that writes to a writer + * @param stream the writer to write to + * @throws XMLStreamException + */ + public abstract XMLStreamWriter createXMLStreamWriter(java.io.Writer stream) throws XMLStreamException; + + /** + * Create a new XMLStreamWriter that writes to a stream + * @param stream the stream to write to + * @throws XMLStreamException + */ + public abstract XMLStreamWriter createXMLStreamWriter(java.io.OutputStream stream) throws XMLStreamException; + + /** + * Create a new XMLStreamWriter that writes to a stream + * @param stream the stream to write to + * @param encoding the encoding to use + * @throws XMLStreamException + */ + public abstract XMLStreamWriter createXMLStreamWriter(java.io.OutputStream stream, + String encoding) throws XMLStreamException; + + /** + * Create a new XMLStreamWriter that writes to a JAXP result. This method is optional. + * @param result the result to write to + * @throws UnsupportedOperationException if this method is not + * supported by this XMLOutputFactory + * @throws XMLStreamException + */ + public abstract XMLStreamWriter createXMLStreamWriter(Result result) throws XMLStreamException; + + + /** + * Create a new XMLEventWriter that writes to a JAXP result. This method is optional. + * @param result the result to write to + * @throws UnsupportedOperationException if this method is not + * supported by this XMLOutputFactory + * @throws XMLStreamException + */ + public abstract XMLEventWriter createXMLEventWriter(Result result) throws XMLStreamException; + + /** + * Create a new XMLEventWriter that writes to a stream + * @param stream the stream to write to + * @throws XMLStreamException + */ + public abstract XMLEventWriter createXMLEventWriter(java.io.OutputStream stream) throws XMLStreamException; + + + + /** + * Create a new XMLEventWriter that writes to a stream + * @param stream the stream to write to + * @param encoding the encoding to use + * @throws XMLStreamException + */ + public abstract XMLEventWriter createXMLEventWriter(java.io.OutputStream stream, + String encoding) throws XMLStreamException; + + /** + * Create a new XMLEventWriter that writes to a writer + * @param stream the stream to write to + * @throws XMLStreamException + */ + public abstract XMLEventWriter createXMLEventWriter(java.io.Writer stream) throws XMLStreamException; + + /** + * Allows the user to set specific features/properties on the underlying implementation. + * @param name The name of the property + * @param value The value of the property + * @throws java.lang.IllegalArgumentException if the property is not supported + */ + public abstract void setProperty(java.lang.String name, + Object value) + throws IllegalArgumentException; + + /** + * Get a feature/property on the underlying implementation + * @param name The name of the property + * @return The value of the property + * @throws java.lang.IllegalArgumentException if the property is not supported + */ + public abstract Object getProperty(java.lang.String name) + throws IllegalArgumentException; + + /** + * Query the set of properties that this factory supports. + * + * @param name The name of the property (may not be null) + * @return true if the property is supported and false otherwise + */ + public abstract boolean isPropertySupported(String name); +}