/
StAXInputFactory.java
271 lines (226 loc) · 9.81 KB
/
StAXInputFactory.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2004, 2023 Oracle and/or its affiliates. All rights reserved.
*
* Oracle licenses this file to You 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
*
* https://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.
*/
package com.sun.xml.fastinfoset.stax.factory;
import com.sun.xml.fastinfoset.stax.*;
import com.sun.xml.fastinfoset.stax.events.StAXEventReader;
import com.sun.xml.fastinfoset.stax.events.StAXFilteredEvent;
import com.sun.xml.fastinfoset.stax.util.StAXFilteredParser;
import com.sun.xml.fastinfoset.tools.XML_SAX_FI;
import java.io.InputStream;
import java.io.Reader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import javax.xml.stream.EventFilter;
import javax.xml.stream.StreamFilter;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLReporter;
import javax.xml.stream.XMLResolver;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.util.XMLEventAllocator ;
import javax.xml.transform.Source;
import com.sun.xml.fastinfoset.CommonResourceBundle;
public class StAXInputFactory extends XMLInputFactory {
//List of supported properties and default values.
private StAXManager _manager = new StAXManager(StAXManager.CONTEXT_READER) ;
public StAXInputFactory() {
}
public static XMLInputFactory newInstance() {
return XMLInputFactory.newInstance();
}
/**
* Create a new XMLStreamReader from a reader
* @param xmlfile the XML data to read from
*/
@Override
public XMLStreamReader createXMLStreamReader(Reader xmlfile) throws XMLStreamException {
return getXMLStreamReader(xmlfile);
}
@Override
public XMLStreamReader createXMLStreamReader(InputStream s) throws XMLStreamException {
return new StAXDocumentParser(s, _manager);
}
@Override
public XMLStreamReader createXMLStreamReader(String systemId, Reader xmlfile) throws XMLStreamException {
return getXMLStreamReader(xmlfile);
}
@Override
public XMLStreamReader createXMLStreamReader(Source source) throws XMLStreamException {
return null;
}
@Override
public XMLStreamReader createXMLStreamReader(String systemId, InputStream inputstream) throws XMLStreamException {
return createXMLStreamReader(inputstream);
}
@Override
public XMLStreamReader createXMLStreamReader(InputStream inputstream, String encoding) throws XMLStreamException {
return createXMLStreamReader(inputstream);
}
XMLStreamReader getXMLStreamReader(String systemId, InputStream inputstream, String encoding)
throws XMLStreamException{
return createXMLStreamReader(inputstream);
}
/**
* @param xmlfile source XML file
* @return new instance of XML Reader
* @throws XMLStreamException on error
*/
XMLStreamReader getXMLStreamReader(Reader xmlfile)
throws XMLStreamException{
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
BufferedOutputStream bufferedStream = new BufferedOutputStream(byteStream);
StAXDocumentParser sr = null;
try {
XML_SAX_FI convertor = new XML_SAX_FI();
convertor.convert(xmlfile, bufferedStream);
ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteStream.toByteArray());
InputStream document = new BufferedInputStream(byteInputStream);
sr = new StAXDocumentParser();
sr.setInputStream(document);
sr.setManager(_manager);
return sr;
//return new StAXDocumentParser(document, _manager);
} catch (Exception e) {
return null;
}
}
/**
* @return XMLEventReader
*/
@Override
public XMLEventReader createXMLEventReader(InputStream inputstream) throws XMLStreamException {
return new StAXEventReader(createXMLStreamReader(inputstream));
}
@Override
public XMLEventReader createXMLEventReader(Reader reader) throws XMLStreamException {
return new StAXEventReader(createXMLStreamReader(reader));
}
@Override
public XMLEventReader createXMLEventReader(Source source) throws XMLStreamException {
return new StAXEventReader(createXMLStreamReader(source));
}
@Override
public XMLEventReader createXMLEventReader(String systemId, InputStream inputstream) throws XMLStreamException {
return new StAXEventReader(createXMLStreamReader(systemId, inputstream));
}
@Override
public XMLEventReader createXMLEventReader(java.io.InputStream stream, String encoding) throws XMLStreamException {
return new StAXEventReader(createXMLStreamReader(stream, encoding));
}
@Override
public XMLEventReader createXMLEventReader(String systemId, Reader reader) throws XMLStreamException {
return new StAXEventReader(createXMLStreamReader(systemId, reader));
}
/** Create a new XMLEventReader from an XMLStreamReader. After being used
* to construct the XMLEventReader instance returned from this method
* the XMLStreamReader must not be used.
* @param streamReader the XMLStreamReader to read from (may not be modified)
* @return a new XMLEventReader
*/
@Override
public XMLEventReader createXMLEventReader(XMLStreamReader streamReader) throws XMLStreamException {
return new StAXEventReader(streamReader);
}
@Override
public XMLEventAllocator getEventAllocator() {
return (XMLEventAllocator)getProperty(XMLInputFactory.ALLOCATOR);
}
@Override
public XMLReporter getXMLReporter() {
return (XMLReporter)_manager.getProperty(XMLInputFactory.REPORTER);
}
@Override
public XMLResolver getXMLResolver() {
Object object = _manager.getProperty(XMLInputFactory.RESOLVER);
return (XMLResolver)object;
//return (XMLResolver)_manager.getProperty(XMLInputFactory.RESOLVER);
}
@Override
public void setXMLReporter(XMLReporter xmlreporter) {
_manager.setProperty(XMLInputFactory.REPORTER, xmlreporter);
}
@Override
public void setXMLResolver(XMLResolver xmlresolver) {
_manager.setProperty(XMLInputFactory.RESOLVER, xmlresolver);
}
/** Create a filtered event reader that wraps the filter around the event reader
* @param reader the event reader to wrap
* @param filter the filter to apply to the event reader
*/
@Override
public XMLEventReader createFilteredReader(XMLEventReader reader, EventFilter filter) throws XMLStreamException {
return new StAXFilteredEvent(reader, filter);
}
/** Create a filtered reader that wraps the filter around the reader
* @param reader the reader to filter
* @param filter the filter to apply to the reader
*/
@Override
public XMLStreamReader createFilteredReader(XMLStreamReader reader, StreamFilter filter) throws XMLStreamException {
if( reader != null && filter != null )
return new StAXFilteredParser(reader,filter);
return null;
}
/** Get the value of a feature/property from the underlying implementation
* @param name The name of the property (may not be null)
* @return The value of the property
* @throws IllegalArgumentException if the property is not supported
*/
@Override
public Object getProperty(String name) throws IllegalArgumentException {
if(name == null){
throw new IllegalArgumentException(CommonResourceBundle.getInstance().getString("message.nullPropertyName"));
}
if(_manager.containsProperty(name))
return _manager.getProperty(name);
throw new IllegalArgumentException(CommonResourceBundle.getInstance().getString("message.propertyNotSupported", new Object[]{name}));
}
/** Query the set of Properties that this factory supports.
*
* @param name The name of the property (may not be null)
* @return true if the property is supported and false otherwise
*/
@Override
public boolean isPropertySupported(String name) {
if(name == null)
return false ;
else
return _manager.containsProperty(name);
}
/** Set a user defined event allocator for events
* @param allocator the user defined allocator
*/
@Override
public void setEventAllocator(XMLEventAllocator allocator) {
_manager.setProperty(XMLInputFactory.ALLOCATOR, allocator);
}
/** Allows the user to set specific feature/property on the underlying implementation. The underlying implementation
* is not required to support every setting of every property in the specification and may use IllegalArgumentException
* to signal that an unsupported property may not be set with the specified value.
* @param name The name of the property (may not be null)
* @param value The value of the property
* @throws IllegalArgumentException if the property is not supported
*/
@Override
public void setProperty(String name, Object value) throws IllegalArgumentException {
_manager.setProperty(name,value);
}
}