serializerfactory.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 144 行

JAVA
144
字号
/* * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: SerializerFactory.java,v 1.6 2004/02/23 10:29:37 aruny Exp $ */package com.sun.org.apache.xml.internal.serializer;import java.util.Hashtable;import java.util.Properties;import javax.xml.transform.OutputKeys;import com.sun.org.apache.xml.internal.res.XMLErrorResources;import com.sun.org.apache.xml.internal.res.XMLMessages;import org.xml.sax.ContentHandler;/** * Factory for creating serializers. */public abstract class SerializerFactory{  /**   * Associates output methods to default output formats.   */  private static Hashtable m_formats = new Hashtable();  /**   * Returns a serializer for the specified output method.    * If no implementation exists that supports the specified output method   * an exception of some type will be thrown.   * For a list of the default output methods see {@link Method}.   *   * @param format The output format, minimally the "method" property must be set.   * @return A suitable serializer.   * @throws IllegalArgumentException if method is   * null or an appropriate serializer can't be found   * @throws Exception if the class for the serializer is found but does not   * implement ContentHandler.   * @throws WrappedRuntimeException if an exception is thrown while trying to find serializer   */  public static Serializer getSerializer(Properties format)  {      Serializer ser;      try      {        String method = format.getProperty(OutputKeys.METHOD);        if (method == null)          throw new IllegalArgumentException(            "The output format has a null method name");        String className =            format.getProperty(OutputPropertiesFactory.S_KEY_CONTENT_HANDLER);        if (null == className)        {            // Missing Content Handler property, load default using OutputPropertiesFactory            Properties methodDefaults =                OutputPropertiesFactory.getDefaultMethodProperties(method);            className =             methodDefaults.getProperty(OutputPropertiesFactory.S_KEY_CONTENT_HANDLER);                if (null == className)                throw new IllegalArgumentException(                    "The output format must have a '"                    + OutputPropertiesFactory.S_KEY_CONTENT_HANDLER + "' property!");        }        ClassLoader loader = ObjectFactory.findClassLoader();        Class cls = ObjectFactory.findProviderClass(className, loader, true);        // _serializers.put(method, cls);        Object obj = cls.newInstance();        if (obj instanceof SerializationHandler)        {              // this is one of the supplied serializers            ser = (Serializer) cls.newInstance();            ser.setOutputFormat(format);        }        else        {              /*               *  This  must be a user defined Serializer.               *  It had better implement ContentHandler.               */               if (obj instanceof ContentHandler)               {                  /*                   * The user defined serializer defines ContentHandler,                   * but we need to wrap it with ToXMLSAXHandler which                   * will collect SAX-like events and emit true                   * SAX ContentHandler events to the users handler.                   */                  className = SerializerConstants.DEFAULT_SAX_SERIALIZER;                  cls = ObjectFactory.findProviderClass(className, loader, true);                  SerializationHandler sh =                      (SerializationHandler) cls.newInstance();                  sh.setContentHandler( (ContentHandler) obj);                  sh.setOutputFormat(format);                  ser = sh;               }               else               {                  // user defined serializer does not implement                  // ContentHandler, ... very bad                   throw new Exception(                       XMLMessages.createXMLMessage(                           XMLErrorResources.ER_SERIALIZER_NOT_CONTENTHANDLER,                               new Object[] { className}));               }        }      }      catch (Exception e)      {        throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(e);      }      // If we make it to here ser is not null.      return ser;  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?