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