Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jaxp/src/javax/xml/transform/stream/StreamSource.java
32288 views
1
/*
2
* Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package javax.xml.transform.stream;
27
28
import java.io.File;
29
import java.io.InputStream;
30
import java.io.Reader;
31
32
import javax.xml.transform.Source;
33
34
/**
35
* <p>Acts as an holder for a transformation Source in the form
36
* of a stream of XML markup.</p>
37
*
38
* <p><em>Note:</em> Due to their internal use of either a {@link Reader} or {@link InputStream} instance,
39
* <code>StreamSource</code> instances may only be used once.</p>
40
*
41
* @author <a href="[email protected]">Jeff Suttor</a>
42
*/
43
public class StreamSource implements Source {
44
45
/** If {@link javax.xml.transform.TransformerFactory#getFeature}
46
* returns true when passed this value as an argument,
47
* the Transformer supports Source input of this type.
48
*/
49
public static final String FEATURE =
50
"http://javax.xml.transform.stream.StreamSource/feature";
51
52
/**
53
* <p>Zero-argument default constructor. If this constructor is used, and
54
* no Stream source is set using
55
* {@link #setInputStream(java.io.InputStream inputStream)} or
56
* {@link #setReader(java.io.Reader reader)}, then the
57
* <code>Transformer</code> will
58
* create an empty source {@link java.io.InputStream} using
59
* {@link java.io.InputStream#InputStream() new InputStream()}.</p>
60
*
61
* @see javax.xml.transform.Transformer#transform(Source xmlSource, Result outputTarget)
62
*/
63
public StreamSource() { }
64
65
/**
66
* Construct a StreamSource from a byte stream. Normally,
67
* a stream should be used rather than a reader, so
68
* the XML parser can resolve character encoding specified
69
* by the XML declaration.
70
*
71
* <p>If this constructor is used to process a stylesheet, normally
72
* setSystemId should also be called, so that relative URI references
73
* can be resolved.</p>
74
*
75
* @param inputStream A valid InputStream reference to an XML stream.
76
*/
77
public StreamSource(InputStream inputStream) {
78
setInputStream(inputStream);
79
}
80
81
/**
82
* Construct a StreamSource from a byte stream. Normally,
83
* a stream should be used rather than a reader, so that
84
* the XML parser can resolve character encoding specified
85
* by the XML declaration.
86
*
87
* <p>This constructor allows the systemID to be set in addition
88
* to the input stream, which allows relative URIs
89
* to be processed.</p>
90
*
91
* @param inputStream A valid InputStream reference to an XML stream.
92
* @param systemId Must be a String that conforms to the URI syntax.
93
*/
94
public StreamSource(InputStream inputStream, String systemId) {
95
setInputStream(inputStream);
96
setSystemId(systemId);
97
}
98
99
/**
100
* Construct a StreamSource from a character reader. Normally,
101
* a stream should be used rather than a reader, so that
102
* the XML parser can resolve character encoding specified
103
* by the XML declaration. However, in many cases the encoding
104
* of the input stream is already resolved, as in the case of
105
* reading XML from a StringReader.
106
*
107
* @param reader A valid Reader reference to an XML character stream.
108
*/
109
public StreamSource(Reader reader) {
110
setReader(reader);
111
}
112
113
/**
114
* Construct a StreamSource from a character reader. Normally,
115
* a stream should be used rather than a reader, so that
116
* the XML parser may resolve character encoding specified
117
* by the XML declaration. However, in many cases the encoding
118
* of the input stream is already resolved, as in the case of
119
* reading XML from a StringReader.
120
*
121
* @param reader A valid Reader reference to an XML character stream.
122
* @param systemId Must be a String that conforms to the URI syntax.
123
*/
124
public StreamSource(Reader reader, String systemId) {
125
setReader(reader);
126
setSystemId(systemId);
127
}
128
129
/**
130
* Construct a StreamSource from a URL.
131
*
132
* @param systemId Must be a String that conforms to the URI syntax.
133
*/
134
public StreamSource(String systemId) {
135
this.systemId = systemId;
136
}
137
138
/**
139
* Construct a StreamSource from a File.
140
*
141
* @param f Must a non-null File reference.
142
*/
143
public StreamSource(File f) {
144
//convert file to appropriate URI, f.toURI().toASCIIString()
145
//converts the URI to string as per rule specified in
146
//RFC 2396,
147
setSystemId(f.toURI().toASCIIString());
148
}
149
150
/**
151
* Set the byte stream to be used as input. Normally,
152
* a stream should be used rather than a reader, so that
153
* the XML parser can resolve character encoding specified
154
* by the XML declaration.
155
*
156
* <p>If this Source object is used to process a stylesheet, normally
157
* setSystemId should also be called, so that relative URL references
158
* can be resolved.</p>
159
*
160
* @param inputStream A valid InputStream reference to an XML stream.
161
*/
162
public void setInputStream(InputStream inputStream) {
163
this.inputStream = inputStream;
164
}
165
166
/**
167
* Get the byte stream that was set with setByteStream.
168
*
169
* @return The byte stream that was set with setByteStream, or null
170
* if setByteStream or the ByteStream constructor was not called.
171
*/
172
public InputStream getInputStream() {
173
return inputStream;
174
}
175
176
/**
177
* Set the input to be a character reader. Normally,
178
* a stream should be used rather than a reader, so that
179
* the XML parser can resolve character encoding specified
180
* by the XML declaration. However, in many cases the encoding
181
* of the input stream is already resolved, as in the case of
182
* reading XML from a StringReader.
183
*
184
* @param reader A valid Reader reference to an XML CharacterStream.
185
*/
186
public void setReader(Reader reader) {
187
this.reader = reader;
188
}
189
190
/**
191
* Get the character stream that was set with setReader.
192
*
193
* @return The character stream that was set with setReader, or null
194
* if setReader or the Reader constructor was not called.
195
*/
196
public Reader getReader() {
197
return reader;
198
}
199
200
/**
201
* Set the public identifier for this Source.
202
*
203
* <p>The public identifier is always optional: if the application
204
* writer includes one, it will be provided as part of the
205
* location information.</p>
206
*
207
* @param publicId The public identifier as a string.
208
*/
209
public void setPublicId(String publicId) {
210
this.publicId = publicId;
211
}
212
213
/**
214
* Get the public identifier that was set with setPublicId.
215
*
216
* @return The public identifier that was set with setPublicId, or null
217
* if setPublicId was not called.
218
*/
219
public String getPublicId() {
220
return publicId;
221
}
222
223
/**
224
* Set the system identifier for this Source.
225
*
226
* <p>The system identifier is optional if there is a byte stream
227
* or a character stream, but it is still useful to provide one,
228
* since the application can use it to resolve relative URIs
229
* and can include it in error messages and warnings (the parser
230
* will attempt to open a connection to the URI only if
231
* there is no byte stream or character stream specified).</p>
232
*
233
* @param systemId The system identifier as a URL string.
234
*/
235
public void setSystemId(String systemId) {
236
this.systemId = systemId;
237
}
238
239
/**
240
* Get the system identifier that was set with setSystemId.
241
*
242
* @return The system identifier that was set with setSystemId, or null
243
* if setSystemId was not called.
244
*/
245
public String getSystemId() {
246
return systemId;
247
}
248
249
/**
250
* Set the system ID from a File reference.
251
*
252
* @param f Must a non-null File reference.
253
*/
254
public void setSystemId(File f) {
255
//convert file to appropriate URI, f.toURI().toASCIIString()
256
//converts the URI to string as per rule specified in
257
//RFC 2396,
258
this.systemId = f.toURI().toASCIIString();
259
}
260
261
//////////////////////////////////////////////////////////////////////
262
// Internal state.
263
//////////////////////////////////////////////////////////////////////
264
265
/**
266
* The public identifier for this input source, or null.
267
*/
268
private String publicId;
269
270
/**
271
* The system identifier as a URL string, or null.
272
*/
273
private String systemId;
274
275
/**
276
* The byte stream for this Source, or null.
277
*/
278
private InputStream inputStream;
279
280
/**
281
* The character stream for this Source, or null.
282
*/
283
private Reader reader;
284
}
285
286