1:
37:
38: package ;
39:
40: import ;
41: import ;
42: import ;
43: import ;
44: import ;
45: import ;
46: import ;
47: import ;
48: import ;
49: import ;
50: import ;
51: import ;
52: import ;
53: import ;
54: import ;
55: import ;
56: import ;
57: import ;
58: import ;
59: import ;
60: import ;
61: import ;
62:
63:
66: public abstract class XMLEventFactory
67: {
68:
69: protected XMLEventFactory()
70: {
71: }
72:
73:
77: public static XMLEventFactory newInstance()
78: throws FactoryConfigurationError
79: {
80: return newInstance(null, null);
81: }
82:
83:
98: static XMLEventFactory newInstance(String factoryId, ClassLoader classLoader)
99: throws FactoryConfigurationError
100: {
101: ClassLoader loader = classLoader;
102: if (loader == null)
103: {
104: loader = Thread.currentThread().getContextClassLoader();
105: }
106: if (loader == null)
107: {
108: loader = XMLEventFactory.class.getClassLoader();
109: }
110: String className = null;
111: int count = 0;
112: do
113: {
114: className = getFactoryClassName(loader, count++);
115: if (className != null)
116: {
117: try
118: {
119: Class<?> t = (loader != null) ? loader.loadClass(className) :
120: Class.forName(className);
121: return (XMLEventFactory) t.newInstance();
122: }
123: catch (ClassNotFoundException e)
124: {
125: className = null;
126: }
127: catch (Exception e)
128: {
129: throw new FactoryConfigurationError(e,
130: "error instantiating class " + className);
131: }
132: }
133: }
134: while (className == null && count < 3);
135: return new gnu.xml.stream.XMLEventFactoryImpl();
136: }
137:
138: private static String getFactoryClassName(ClassLoader loader, int attempt)
139: {
140: final String propertyName = "javax.xml.stream.XMLEventFactory";
141: switch (attempt)
142: {
143: case 0:
144: return System.getProperty(propertyName);
145: case 1:
146: try
147: {
148: File file = new File(System.getProperty("java.home"));
149: file = new File(file, "lib");
150: file = new File(file, "stax.properties");
151: InputStream in = new FileInputStream(file);
152: Properties props = new Properties();
153: props.load(in);
154: in.close();
155: return props.getProperty(propertyName);
156: }
157: catch (IOException e)
158: {
159: return null;
160: }
161: case 2:
162: try
163: {
164: String serviceKey = "/META-INF/services/" + propertyName;
165: InputStream in = (loader != null) ?
166: loader.getResourceAsStream(serviceKey) :
167: XMLEventFactory.class.getResourceAsStream(serviceKey);
168: if (in != null)
169: {
170: BufferedReader r =
171: new BufferedReader(new InputStreamReader(in));
172: String ret = r.readLine();
173: r.close();
174: return ret;
175: }
176: }
177: catch (IOException e)
178: {
179: }
180: return null;
181: default:
182: return null;
183: }
184: }
185:
186:
189: public abstract void setLocation(Location location);
190:
191:
194: public abstract Attribute createAttribute(String prefix, String namespaceURI,
195: String localName, String value);
196:
197:
200: public abstract Attribute createAttribute(String localName, String value);
201:
202:
205: public abstract Attribute createAttribute(QName name, String value);
206:
207:
210: public abstract Namespace createNamespace(String namespaceURI);
211:
212:
215: public abstract Namespace createNamespace(String prefix, String namespaceUri);
216:
217:
220: @SuppressWarnings("unchecked")
221: public abstract StartElement createStartElement(QName name,
222: Iterator attributes,
223: Iterator namespaces);
224:
225:
228: public abstract StartElement createStartElement(String prefix,
229: String namespaceUri,
230: String localName);
231:
232:
235: @SuppressWarnings("unchecked")
236: public abstract StartElement createStartElement(String prefix,
237: String namespaceUri,
238: String localName,
239: Iterator attributes,
240: Iterator namespaces);
241:
242:
245: @SuppressWarnings("unchecked")
246: public abstract StartElement createStartElement(String prefix,
247: String namespaceUri,
248: String localName,
249: Iterator attributes,
250: Iterator namespaces,
251: NamespaceContext context);
252:
253:
256: @SuppressWarnings("unchecked")
257: public abstract EndElement createEndElement(QName name,
258: Iterator namespaces);
259:
260:
263: public abstract EndElement createEndElement(String prefix,
264: String namespaceUri,
265: String localName);
266:
267:
270: @SuppressWarnings("unchecked")
271: public abstract EndElement createEndElement(String prefix,
272: String namespaceUri,
273: String localName,
274: Iterator namespaces);
275:
276:
279: public abstract Characters createCharacters(String content);
280:
281:
284: public abstract Characters createCData(String content);
285:
286:
289: public abstract Characters createSpace(String content);
290:
291:
294: public abstract Characters createIgnorableSpace(String content);
295:
296:
299: public abstract StartDocument createStartDocument();
300:
301:
304: public abstract StartDocument createStartDocument(String encoding,
305: String version,
306: boolean standalone);
307:
308:
311: public abstract StartDocument createStartDocument(String encoding,
312: String version);
313:
314:
317: public abstract StartDocument createStartDocument(String encoding);
318:
319:
322: public abstract EndDocument createEndDocument();
323:
324:
327: public abstract EntityReference createEntityReference(String name,
328: EntityDeclaration declaration);
329:
330:
333: public abstract Comment createComment(String text);
334:
335:
338: public abstract ProcessingInstruction createProcessingInstruction(String target,
339: String data);
340:
341:
344: public abstract DTD createDTD(String dtd);
345:
346: }