001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package org.apache.xml.serialize;
019:
020: import java.io.OutputStream;
021: import java.io.Writer;
022: import java.io.UnsupportedEncodingException;
023: import java.util.Hashtable;
024: import java.util.StringTokenizer;
025:
026: /**
027: * @deprecated This class was deprecated in Xerces 2.9.0. It is recommended
028: * that new applications use the DOM Level 3 LSSerializer or JAXP's Transformation
029: * API for XML (TrAX) for serializing XML and HTML. See the Xerces documentation for more
030: * information.
031: * @version $Revision: 558589 $ $Date: 2007-07-22 22:41:55 -0400 (Sun, 22 Jul 2007) $
032: * @author <a href="mailto:Scott_Boag/CAM/Lotus@lotus.com">Scott Boag</a>
033: * @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
034: */
035: public abstract class SerializerFactory {
036:
037: public static final String FactoriesProperty = "org.apache.xml.serialize.factories";
038:
039: private static Hashtable _factories = new Hashtable();
040:
041: static {
042: SerializerFactory factory;
043: String list;
044: StringTokenizer token;
045: String className;
046:
047: // The default factories are always registered first,
048: // any factory specified in the properties file and supporting
049: // the same method will override the default factory.
050: factory = new SerializerFactoryImpl(Method.XML);
051: registerSerializerFactory(factory);
052: factory = new SerializerFactoryImpl(Method.HTML);
053: registerSerializerFactory(factory);
054: factory = new SerializerFactoryImpl(Method.XHTML);
055: registerSerializerFactory(factory);
056: factory = new SerializerFactoryImpl(Method.TEXT);
057: registerSerializerFactory(factory);
058:
059: list = SecuritySupport.getSystemProperty(FactoriesProperty);
060: if (list != null) {
061: token = new StringTokenizer(list, " ;,:");
062: while (token.hasMoreTokens()) {
063: className = token.nextToken();
064: try {
065: factory = (SerializerFactory) ObjectFactory
066: .newInstance(className,
067: SerializerFactory.class
068: .getClassLoader(), true);
069: if (_factories.containsKey(factory
070: .getSupportedMethod()))
071: _factories.put(factory.getSupportedMethod(),
072: factory);
073: } catch (Exception except) {
074: }
075: }
076: }
077: }
078:
079: /**
080: * Register a serializer factory, keyed by the given
081: * method string.
082: */
083: public static void registerSerializerFactory(
084: SerializerFactory factory) {
085: String method;
086:
087: synchronized (_factories) {
088: method = factory.getSupportedMethod();
089: _factories.put(method, factory);
090: }
091: }
092:
093: /**
094: * Register a serializer factory, keyed by the given
095: * method string.
096: */
097: public static SerializerFactory getSerializerFactory(String method) {
098: return (SerializerFactory) _factories.get(method);
099: }
100:
101: /**
102: * Returns the method supported by this factory and used to register
103: * the factory. This call is required so factories can be added from
104: * a properties file by knowing only the class name. This method is
105: * protected, it is only required by this class but must be implemented
106: * in derived classes.
107: */
108: protected abstract String getSupportedMethod();
109:
110: /**
111: * Create a new serializer based on the {@link OutputFormat}.
112: * If this method is used to create the serializer, the {@link
113: * Serializer#setOutputByteStream} or {@link Serializer#setOutputCharStream}
114: * methods must be called before serializing a document.
115: */
116: public abstract Serializer makeSerializer(OutputFormat format);
117:
118: /**
119: * Create a new serializer, based on the {@link OutputFormat} and
120: * using the writer as the output character stream. If this
121: * method is used, the encoding property will be ignored.
122: */
123: public abstract Serializer makeSerializer(Writer writer,
124: OutputFormat format);
125:
126: /**
127: * Create a new serializer, based on the {@link OutputFormat} and
128: * using the output byte stream and the encoding specified in the
129: * output format.
130: *
131: * @throws UnsupportedEncodingException The specified encoding is
132: * not supported
133: */
134: public abstract Serializer makeSerializer(OutputStream output,
135: OutputFormat format) throws UnsupportedEncodingException;
136:
137: }
|