1 /* 2 * Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved. 3 */ 4 /* 5 * Licensed to the Apache Software Foundation (ASF) under one or more 6 * contributor license agreements. See the NOTICE file distributed with 7 * this work for additional information regarding copyright ownership. 8 * The ASF licenses this file to You under the Apache License, Version 2.0 9 * (the "License"); you may not use this file except in compliance with 10 * the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, software 15 * distributed under the License is distributed on an "AS IS" BASIS, 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 * See the License for the specific language governing permissions and 18 * limitations under the License. 19 */ 20 21 22 package com.sun.org.apache.xml.internal.serialize; 23 24 import com.sun.org.apache.xerces.internal.utils.ObjectFactory; 25 import java.io.OutputStream; 26 import java.io.UnsupportedEncodingException; 27 import java.io.Writer; 28 import java.util.Collections; 29 import java.util.HashMap; 30 import java.util.Map; 31 import java.util.StringTokenizer; 32 import jdk.xml.internal.SecuritySupport; 33 34 /** 35 * 36 * 37 * @author <a href="mailto:Scott_Boag/CAM/Lotus@lotus.com">Scott Boag</a> 38 * @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a> 39 * 40 * @deprecated As of JDK 9, Xerces 2.9.0, Xerces DOM L3 Serializer implementation 41 * is replaced by that of Xalan. Main class 42 * {@link com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl} is replaced 43 * by {@link com.sun.org.apache.xml.internal.serializer.dom3.LSSerializerImpl}. 44 * 45 * @LastModified: Oct 2017 46 */ 47 @Deprecated 48 public abstract class SerializerFactory 49 { 50 51 52 public static final String FactoriesProperty = "com.sun.org.apache.xml.internal.serialize.factories"; 53 54 55 private static final Map<String, SerializerFactory> _factories = Collections.synchronizedMap(new HashMap<>()); 56 57 58 static 59 { 60 SerializerFactory factory; 61 String list; 62 StringTokenizer token; 63 String className; 64 65 // The default factories are always registered first, 66 // any factory specified in the properties file and supporting 67 // the same method will override the default factory. 68 factory = new SerializerFactoryImpl( Method.XML ); 69 registerSerializerFactory( factory ); 70 factory = new SerializerFactoryImpl( Method.HTML ); 71 registerSerializerFactory( factory ); 72 factory = new SerializerFactoryImpl( Method.XHTML ); 73 registerSerializerFactory( factory ); 74 factory = new SerializerFactoryImpl( Method.TEXT ); 75 registerSerializerFactory( factory ); 76 77 list = SecuritySupport.getSystemProperty( FactoriesProperty ); 78 if ( list != null ) { 79 token = new StringTokenizer( list, " ;,:" ); 80 while ( token.hasMoreTokens() ) { 81 className = token.nextToken(); 82 try { 83 factory = (SerializerFactory) ObjectFactory.newInstance( className, true); 84 if ( _factories.containsKey( factory.getSupportedMethod() ) ) 85 _factories.put( factory.getSupportedMethod(), factory ); 86 } catch ( Exception except ) { } 87 } 88 } 89 } 90 91 92 /** 93 * Register a serializer factory, keyed by the given 94 * method string. 95 */ 96 public static void registerSerializerFactory( SerializerFactory factory ) 97 { 98 String method; 99 100 synchronized ( _factories ) { 101 method = factory.getSupportedMethod(); 102 _factories.put( method, factory ); 103 } 104 } 105 106 107 /** 108 * Register a serializer factory, keyed by the given 109 * method string. 110 */ 111 public static SerializerFactory getSerializerFactory( String method ) 112 { 113 return _factories.get( method ); 114 } 115 116 117 /** 118 * Returns the method supported by this factory and used to register 119 * the factory. This call is required so factories can be added from 120 * a properties file by knowing only the class name. This method is 121 * protected, it is only required by this class but must be implemented 122 * in derived classes. 123 */ 124 protected abstract String getSupportedMethod(); 125 126 127 /** 128 * Create a new serializer based on the {@link OutputFormat}. 129 * If this method is used to create the serializer, the {@link 130 * Serializer#setOutputByteStream} or {@link Serializer#setOutputCharStream} 131 * methods must be called before serializing a document. 132 */ 133 public abstract Serializer makeSerializer(OutputFormat format); 134 135 136 /** 137 * Create a new serializer, based on the {@link OutputFormat} and 138 * using the writer as the output character stream. If this 139 * method is used, the encoding property will be ignored. 140 */ 141 public abstract Serializer makeSerializer( Writer writer, 142 OutputFormat format ); 143 144 145 /** 146 * Create a new serializer, based on the {@link OutputFormat} and 147 * using the output byte stream and the encoding specified in the 148 * output format. 149 * 150 * @throws UnsupportedEncodingException The specified encoding is 151 * not supported 152 */ 153 public abstract Serializer makeSerializer( OutputStream output, 154 OutputFormat format ) 155 throws UnsupportedEncodingException; 156 157 158 } --- EOF ---