|
|||||||||||||||||||
Source file | Conditionals | Statements | Methods | TOTAL | |||||||||||||||
STAXEventWriter.java | 75% | 34% | 38,1% | 36,2% |
|
1 | /* | |
2 | * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. | |
3 | * | |
4 | * This software is open source. | |
5 | * See the bottom of this file for the licence. | |
6 | */ | |
7 | ||
8 | package org.dom4j.io; | |
9 | ||
10 | import java.io.File; | |
11 | import java.io.FileWriter; | |
12 | import java.io.IOException; | |
13 | import java.io.OutputStream; | |
14 | import java.io.StringWriter; | |
15 | import java.io.Writer; | |
16 | import java.util.Iterator; | |
17 | ||
18 | import javax.xml.namespace.QName; | |
19 | import javax.xml.stream.XMLEventFactory; | |
20 | import javax.xml.stream.XMLOutputFactory; | |
21 | import javax.xml.stream.XMLStreamException; | |
22 | import javax.xml.stream.events.Characters; | |
23 | import javax.xml.stream.events.DTD; | |
24 | import javax.xml.stream.events.EndDocument; | |
25 | import javax.xml.stream.events.EndElement; | |
26 | import javax.xml.stream.events.EntityReference; | |
27 | import javax.xml.stream.events.ProcessingInstruction; | |
28 | import javax.xml.stream.events.StartDocument; | |
29 | import javax.xml.stream.events.StartElement; | |
30 | import javax.xml.stream.util.XMLEventConsumer; | |
31 | ||
32 | import org.dom4j.Attribute; | |
33 | import org.dom4j.Branch; | |
34 | import org.dom4j.CDATA; | |
35 | import org.dom4j.Comment; | |
36 | import org.dom4j.Document; | |
37 | import org.dom4j.DocumentType; | |
38 | import org.dom4j.Element; | |
39 | import org.dom4j.Entity; | |
40 | import org.dom4j.Namespace; | |
41 | import org.dom4j.Node; | |
42 | import org.dom4j.Text; | |
43 | ||
44 | /** | |
45 | * Writes DOM4J {@link Node}s to a StAX event stream. In addition the | |
46 | * <code>createXXX</code> methods are provided to directly create STAX events | |
47 | * from DOM4J nodes. | |
48 | * | |
49 | * @author Christian Niles | |
50 | */ | |
51 | public class STAXEventWriter { | |
52 | /** The event stream to which events are written. */ | |
53 | private XMLEventConsumer consumer; | |
54 | ||
55 | /** The event factory used to construct events. */ | |
56 | private XMLEventFactory factory = XMLEventFactory.newInstance(); | |
57 | ||
58 | private XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); | |
59 | ||
60 | 0 | public STAXEventWriter() { |
61 | } | |
62 | ||
63 | /** | |
64 | * Constructs a <code>STAXEventWriter</code> that writes events to the | |
65 | * provided file. | |
66 | * | |
67 | * @param file | |
68 | * The file to which events will be written. | |
69 | * | |
70 | * @throws XMLStreamException | |
71 | * If an error occurs creating an event writer from the file. | |
72 | * @throws IOException | |
73 | * If an error occurs openin the file for writing. | |
74 | */ | |
75 | 0 | public STAXEventWriter(File file) throws XMLStreamException, IOException { |
76 | 0 | consumer = outputFactory.createXMLEventWriter(new FileWriter(file)); |
77 | } | |
78 | ||
79 | /** | |
80 | * Constructs a <code>STAXEventWriter</code> that writes events to the | |
81 | * provided character stream. | |
82 | * | |
83 | * @param writer | |
84 | * The character stream to which events will be written. | |
85 | * | |
86 | * @throws XMLStreamException | |
87 | * If an error occurs constructing an event writer from the | |
88 | * character stream. | |
89 | */ | |
90 | 1 | public STAXEventWriter(Writer writer) throws XMLStreamException { |
91 | 1 | consumer = outputFactory.createXMLEventWriter(writer); |
92 | } | |
93 | ||
94 | /** | |
95 | * Constructs a <code>STAXEventWriter</code> that writes events to the | |
96 | * provided stream. | |
97 | * | |
98 | * @param stream | |
99 | * The output stream to which events will be written. | |
100 | * | |
101 | * @throws XMLStreamException | |
102 | * If an error occurs constructing an event writer from the | |
103 | * stream. | |
104 | */ | |
105 | 0 | public STAXEventWriter(OutputStream stream) throws XMLStreamException { |
106 | 0 | consumer = outputFactory.createXMLEventWriter(stream); |
107 | } | |
108 | ||
109 | /** | |
110 | * Constructs a <code>STAXEventWriter</code> that writes events to the | |
111 | * provided event stream. | |
112 | * | |
113 | * @param consumer | |
114 | * The event stream to which events will be written. | |
115 | */ | |
116 | 0 | public STAXEventWriter(XMLEventConsumer consumer) { |
117 | 0 | this.consumer = consumer; |
118 | } | |
119 | ||
120 | /** | |
121 | * Returns a reference to the underlying event consumer to which events are | |
122 | * written. | |
123 | * | |
124 | * @return The underlying event consumer to which events are written. | |
125 | */ | |
126 | 0 | public XMLEventConsumer getConsumer() { |
127 | 0 | return consumer; |
128 | } | |
129 | ||
130 | /** | |
131 | * Sets the underlying event consumer to which events are written. | |
132 | * | |
133 | * @param consumer | |
134 | * The event consumer to which events should be written. | |
135 | */ | |
136 | 0 | public void setConsumer(XMLEventConsumer consumer) { |
137 | 0 | this.consumer = consumer; |
138 | } | |
139 | ||
140 | /** | |
141 | * Returns a reference to the event factory used to construct STAX events. | |
142 | * | |
143 | * @return The event factory used to construct STAX events. | |
144 | */ | |
145 | 0 | public XMLEventFactory getEventFactory() { |
146 | 0 | return factory; |
147 | } | |
148 | ||
149 | /** | |
150 | * Sets the event factory used to construct STAX events. | |
151 | * | |
152 | * @param eventFactory | |
153 | * The new event factory. | |
154 | */ | |
155 | 0 | public void setEventFactory(XMLEventFactory eventFactory) { |
156 | 0 | this.factory = eventFactory; |
157 | } | |
158 | ||
159 | /** | |
160 | * Writes a DOM4J {@link Node}to the stream. This method is simply a | |
161 | * gateway to the overloaded methods such as {@link#writeElement(Element)}. | |
162 | * | |
163 | * @param n | |
164 | * The DOM4J {@link Node}to write to the stream. | |
165 | * | |
166 | * @throws XMLStreamException | |
167 | * If an error occurs writing to the stream. | |
168 | */ | |
169 | 24 | public void writeNode(Node n) throws XMLStreamException { |
170 | 24 | switch (n.getNodeType()) { |
171 | 8 | case Node.ELEMENT_NODE: |
172 | 8 | writeElement((Element) n); |
173 | ||
174 | 8 | break; |
175 | ||
176 | 16 | case Node.TEXT_NODE: |
177 | 16 | writeText((Text) n); |
178 | ||
179 | 16 | break; |
180 | ||
181 | 0 | case Node.ATTRIBUTE_NODE: |
182 | 0 | writeAttribute((Attribute) n); |
183 | ||
184 | 0 | break; |
185 | ||
186 | 0 | case Node.NAMESPACE_NODE: |
187 | 0 | writeNamespace((Namespace) n); |
188 | ||
189 | 0 | break; |
190 | ||
191 | 0 | case Node.COMMENT_NODE: |
192 | 0 | writeComment((Comment) n); |
193 | ||
194 | 0 | break; |
195 | ||
196 | 0 | case Node.CDATA_SECTION_NODE: |
197 | 0 | writeCDATA((CDATA) n); |
198 | ||
199 | 0 | break; |
200 | ||
201 | 0 | case Node.PROCESSING_INSTRUCTION_NODE: |
202 | 0 | writeProcessingInstruction((org.dom4j.ProcessingInstruction) n); |
203 | ||
204 | 0 | break; |
205 | ||
206 | 0 | case Node.ENTITY_REFERENCE_NODE: |
207 | 0 | writeEntity((Entity) n); |
208 | ||
209 | 0 | break; |
210 | ||
211 | 0 | case Node.DOCUMENT_NODE: |
212 | 0 | writeDocument((Document) n); |
213 | ||
214 | 0 | break; |
215 | ||
216 | 0 | case Node.DOCUMENT_TYPE_NODE: |
217 | 0 | writeDocumentType((DocumentType) n); |
218 | ||
219 | 0 | break; |
220 | ||
221 | 0 | default: |
222 | 0 | throw new XMLStreamException("Unsupported DOM4J Node: " + n); |
223 | } | |
224 | } | |
225 | ||
226 | /** | |
227 | * Writes each child node within the provided {@link Branch}instance. This | |
228 | * method simply iterates through the {@link Branch}'s nodes and calls | |
229 | * {@link #writeNode(Node)}. | |
230 | * | |
231 | * @param branch | |
232 | * The node whose children will be written to the stream. | |
233 | * | |
234 | * @throws XMLStreamException | |
235 | * If an error occurs writing to the stream. | |
236 | */ | |
237 | 9 | public void writeChildNodes(Branch branch) throws XMLStreamException { |
238 | 9 | for (int i = 0, s = branch.nodeCount(); i < s; i++) { |
239 | 24 | Node n = branch.node(i); |
240 | 24 | writeNode(n); |
241 | } | |
242 | } | |
243 | ||
244 | /** | |
245 | * Writes a DOM4J {@link Element}node and its children to the stream. | |
246 | * | |
247 | * @param elem | |
248 | * The {@link Element}node to write to the stream. | |
249 | * | |
250 | * @throws XMLStreamException | |
251 | * If an error occurs writing to the stream. | |
252 | */ | |
253 | 8 | public void writeElement(Element elem) throws XMLStreamException { |
254 | 8 | consumer.add(createStartElement(elem)); |
255 | 8 | writeChildNodes(elem); |
256 | 8 | consumer.add(createEndElement(elem)); |
257 | } | |
258 | ||
259 | /** | |
260 | * Constructs a STAX {@link StartElement}event from a DOM4J {@link | |
261 | * Element}. | |
262 | * | |
263 | * @param elem | |
264 | * The {@link Element}from which to construct the event. | |
265 | * | |
266 | * @return The newly constructed {@link StartElement}event. | |
267 | */ | |
268 | 8 | public StartElement createStartElement(Element elem) { |
269 | // create name | |
270 | 8 | QName tagName = createQName(elem.getQName()); |
271 | ||
272 | // create attribute & namespace iterators | |
273 | 8 | Iterator attrIter = new AttributeIterator(elem.attributeIterator()); |
274 | 8 | Iterator nsIter = new NamespaceIterator(elem.declaredNamespaces() |
275 | .iterator()); | |
276 | ||
277 | // create start event | |
278 | 8 | return factory.createStartElement(tagName, attrIter, nsIter); |
279 | } | |
280 | ||
281 | /** | |
282 | * Constructs a STAX {@link EndElement}event from a DOM4J {@link Element}. | |
283 | * | |
284 | * @param elem | |
285 | * The {@link Element}from which to construct the event. | |
286 | * | |
287 | * @return The newly constructed {@link EndElement}event. | |
288 | */ | |
289 | 8 | public EndElement createEndElement(Element elem) { |
290 | 8 | QName tagName = createQName(elem.getQName()); |
291 | 8 | Iterator nsIter = new NamespaceIterator(elem.declaredNamespaces() |
292 | .iterator()); | |
293 | ||
294 | 8 | return factory.createEndElement(tagName, nsIter); |
295 | } | |
296 | ||
297 | /** | |
298 | * Writes a DOM4J {@link Attribute}to the stream. | |
299 | * | |
300 | * @param attr | |
301 | * The {@link Attribute}to write to the stream. | |
302 | * | |
303 | * @throws XMLStreamException | |
304 | * If an error occurs writing to the stream. | |
305 | */ | |
306 | 0 | public void writeAttribute(Attribute attr) throws XMLStreamException { |
307 | 0 | consumer.add(createAttribute(attr)); |
308 | } | |
309 | ||
310 | /** | |
311 | * Constructs a STAX {@link javax.xml.stream.events.Attribute}event from a | |
312 | * DOM4J {@link Attribute}. | |
313 | * | |
314 | * @param attr | |
315 | * The {@link Attribute}from which to construct the event. | |
316 | * | |
317 | * @return The newly constructed {@link javax.xml.stream.events.Attribute} | |
318 | * event. | |
319 | */ | |
320 | 0 | public javax.xml.stream.events.Attribute createAttribute(Attribute attr) { |
321 | 0 | QName attrName = createQName(attr.getQName()); |
322 | 0 | String value = attr.getValue(); |
323 | ||
324 | 0 | return factory.createAttribute(attrName, value); |
325 | } | |
326 | ||
327 | /** | |
328 | * Writes a DOM4J {@link Namespace}to the stream. | |
329 | * | |
330 | * @param ns | |
331 | * The {@link Namespace}to write to the stream. | |
332 | * | |
333 | * @throws XMLStreamException | |
334 | * If an error occurs writing to the stream. | |
335 | */ | |
336 | 0 | public void writeNamespace(Namespace ns) throws XMLStreamException { |
337 | 0 | consumer.add(createNamespace(ns)); |
338 | } | |
339 | ||
340 | /** | |
341 | * Constructs a STAX {@link javax.xml.stream.events.Namespace}event from a | |
342 | * DOM4J {@link Namespace}. | |
343 | * | |
344 | * @param ns | |
345 | * The {@link Namespace}from which to construct the event. | |
346 | * | |
347 | * @return The constructed {@link javax.xml.stream.events.Namespace}event. | |
348 | */ | |
349 | 0 | public javax.xml.stream.events.Namespace createNamespace(Namespace ns) { |
350 | 0 | String prefix = ns.getPrefix(); |
351 | 0 | String uri = ns.getURI(); |
352 | ||
353 | 0 | return factory.createNamespace(prefix, uri); |
354 | } | |
355 | ||
356 | /** | |
357 | * Writes a DOM4J {@link Text}to the stream. | |
358 | * | |
359 | * @param text | |
360 | * The {@link Text}to write to the stream. | |
361 | * | |
362 | * @throws XMLStreamException | |
363 | * If an error occurs writing to the stream. | |
364 | */ | |
365 | 16 | public void writeText(Text text) throws XMLStreamException { |
366 | 16 | consumer.add(createCharacters(text)); |
367 | } | |
368 | ||
369 | /** | |
370 | * Constructs a STAX {@link Characters}event from a DOM4J {@link Text}. | |
371 | * | |
372 | * @param text | |
373 | * The {@link Text}from which to construct the event. | |
374 | * | |
375 | * @return The constructed {@link Characters}event. | |
376 | */ | |
377 | 16 | public Characters createCharacters(Text text) { |
378 | 16 | return factory.createCharacters(text.getText()); |
379 | } | |
380 | ||
381 | /** | |
382 | * Writes a DOM4J {@link CDATA}to the event stream. | |
383 | * | |
384 | * @param cdata | |
385 | * The {@link CDATA}to write to the stream. | |
386 | * | |
387 | * @throws XMLStreamException | |
388 | * If an error occurs writing to the stream. | |
389 | */ | |
390 | 0 | public void writeCDATA(CDATA cdata) throws XMLStreamException { |
391 | 0 | consumer.add(createCharacters(cdata)); |
392 | } | |
393 | ||
394 | /** | |
395 | * Constructs a STAX {@link Characters}event from a DOM4J {@link CDATA}. | |
396 | * | |
397 | * @param cdata | |
398 | * The {@link CDATA}from which to construct the event. | |
399 | * | |
400 | * @return The newly constructed {@link Characters}event. | |
401 | */ | |
402 | 0 | public Characters createCharacters(CDATA cdata) { |
403 | 0 | return factory.createCData(cdata.getText()); |
404 | } | |
405 | ||
406 | /** | |
407 | * Writes a DOM4J {@link Comment}to the stream. | |
408 | * | |
409 | * @param comment | |
410 | * The {@link Comment}to write to the stream. | |
411 | * | |
412 | * @throws XMLStreamException | |
413 | * If an error occurs writing to the stream. | |
414 | */ | |
415 | 0 | public void writeComment(Comment comment) throws XMLStreamException { |
416 | 0 | consumer.add(createComment(comment)); |
417 | } | |
418 | ||
419 | /** | |
420 | * Constructs a STAX {@link javax.xml.stream.events.Comment}event from a | |
421 | * DOM4J {@link Comment}. | |
422 | * | |
423 | * @param comment | |
424 | * The {@link Comment}from which to construct the event. | |
425 | * | |
426 | * @return The constructed {@link javax.xml.stream.events.Comment}event. | |
427 | */ | |
428 | 0 | public javax.xml.stream.events.Comment createComment(Comment comment) { |
429 | 0 | return factory.createComment(comment.getText()); |
430 | } | |
431 | ||
432 | /** | |
433 | * Writes a DOM4J {@link ProcessingInstruction}to the stream. | |
434 | * | |
435 | * @param pi | |
436 | * The {@link ProcessingInstruction}to write to the stream. | |
437 | * | |
438 | * @throws XMLStreamException | |
439 | * If an error occurs writing to the stream. | |
440 | */ | |
441 | 0 | public void writeProcessingInstruction(org.dom4j.ProcessingInstruction pi) |
442 | throws XMLStreamException { | |
443 | 0 | consumer.add(createProcessingInstruction(pi)); |
444 | } | |
445 | ||
446 | /** | |
447 | * Constructs a STAX {@link javax.xml.stream.events.ProcessingInstruction} | |
448 | * event from a DOM4J {@link ProcessingInstruction}. | |
449 | * | |
450 | * @param pi | |
451 | * The {@link ProcessingInstruction}from which to construct the | |
452 | * event. | |
453 | * | |
454 | * @return The constructed {@link | |
455 | * javax.xml.stream.events.ProcessingInstruction} event. | |
456 | */ | |
457 | 0 | public ProcessingInstruction createProcessingInstruction( |
458 | org.dom4j.ProcessingInstruction pi) { | |
459 | 0 | String target = pi.getTarget(); |
460 | 0 | String data = pi.getText(); |
461 | ||
462 | 0 | return factory.createProcessingInstruction(target, data); |
463 | } | |
464 | ||
465 | /** | |
466 | * Writes a DOM4J {@link Entity}to the stream. | |
467 | * | |
468 | * @param entity | |
469 | * The {@link Entity}to write to the stream. | |
470 | * | |
471 | * @throws XMLStreamException | |
472 | * If an error occurs writing to the stream. | |
473 | */ | |
474 | 0 | public void writeEntity(Entity entity) throws XMLStreamException { |
475 | 0 | consumer.add(createEntityReference(entity)); |
476 | } | |
477 | ||
478 | /** | |
479 | * Constructs a STAX {@link EntityReference}event from a DOM4J {@link | |
480 | * Entity}. | |
481 | * | |
482 | * @param entity | |
483 | * The {@link Entity}from which to construct the event. | |
484 | * | |
485 | * @return The constructed {@link EntityReference}event. | |
486 | */ | |
487 | 0 | private EntityReference createEntityReference(Entity entity) { |
488 | 0 | return factory.createEntityReference(entity.getName(), null); |
489 | } | |
490 | ||
491 | /** | |
492 | * Writes a DOM4J {@link DocumentType}to the stream. | |
493 | * | |
494 | * @param docType | |
495 | * The {@link DocumentType}to write to the stream. | |
496 | * | |
497 | * @throws XMLStreamException | |
498 | * If an error occurs writing to the stream. | |
499 | */ | |
500 | 0 | public void writeDocumentType(DocumentType docType) |
501 | throws XMLStreamException { | |
502 | 0 | consumer.add(createDTD(docType)); |
503 | } | |
504 | ||
505 | /** | |
506 | * Constructs a STAX {@link DTD}event from a DOM4J {@link DocumentType}. | |
507 | * | |
508 | * @param docType | |
509 | * The {@link DocumentType}from which to construct the event. | |
510 | * | |
511 | * @return The constructed {@link DTD}event. | |
512 | * | |
513 | * @throws RuntimeException | |
514 | * DOCUMENT ME! | |
515 | */ | |
516 | 0 | public DTD createDTD(DocumentType docType) { |
517 | 0 | StringWriter decl = new StringWriter(); |
518 | ||
519 | 0 | try { |
520 | 0 | docType.write(decl); |
521 | } catch (IOException e) { | |
522 | 0 | throw new RuntimeException("Error writing DTD", e); |
523 | } | |
524 | ||
525 | 0 | return factory.createDTD(decl.toString()); |
526 | } | |
527 | ||
528 | /** | |
529 | * Writes a DOM4J {@link Document}node, and all its contents, to the | |
530 | * stream. | |
531 | * | |
532 | * @param doc | |
533 | * The {@link Document}to write to the stream. | |
534 | * | |
535 | * @throws XMLStreamException | |
536 | * If an error occurs writing to the stream. | |
537 | */ | |
538 | 1 | public void writeDocument(Document doc) throws XMLStreamException { |
539 | 1 | consumer.add(createStartDocument(doc)); |
540 | ||
541 | 1 | writeChildNodes(doc); |
542 | ||
543 | 1 | consumer.add(createEndDocument(doc)); |
544 | } | |
545 | ||
546 | /** | |
547 | * Constructs a STAX {@link StartDocument}event from a DOM4J {@link | |
548 | * Document}. | |
549 | * | |
550 | * @param doc | |
551 | * The {@link Document}from which to construct the event. | |
552 | * | |
553 | * @return The constructed {@link StartDocument}event. | |
554 | */ | |
555 | 1 | public StartDocument createStartDocument(Document doc) { |
556 | 1 | String encoding = doc.getXMLEncoding(); |
557 | ||
558 | 1 | if (encoding != null) { |
559 | 1 | return factory.createStartDocument(encoding); |
560 | } else { | |
561 | 0 | return factory.createStartDocument(); |
562 | } | |
563 | } | |
564 | ||
565 | /** | |
566 | * Constructs a STAX {@link EndDocument}event from a DOM4J {@link | |
567 | * Document}. | |
568 | * | |
569 | * @param doc | |
570 | * The {@link Document}from which to construct the event. | |
571 | * | |
572 | * @return The constructed {@link EndDocument}event. | |
573 | */ | |
574 | 1 | public EndDocument createEndDocument(Document doc) { |
575 | 1 | return factory.createEndDocument(); |
576 | } | |
577 | ||
578 | /** | |
579 | * Constructs a STAX {@link QName}from a DOM4J {@link org.dom4j.QName}. | |
580 | * | |
581 | * @param qname | |
582 | * The {@link org.dom4j.QName}from which to construct the STAX | |
583 | * {@link QName}. | |
584 | * | |
585 | * @return The constructed {@link QName}. | |
586 | */ | |
587 | 16 | public QName createQName(org.dom4j.QName qname) { |
588 | 16 | return new QName(qname.getNamespaceURI(), qname.getName(), qname |
589 | .getNamespacePrefix()); | |
590 | } | |
591 | ||
592 | /** | |
593 | * Internal {@link Iterator}implementation used to pass DOM4J {@link | |
594 | * Attribute}s to the stream. | |
595 | */ | |
596 | private class AttributeIterator implements Iterator { | |
597 | /** The underlying DOm4J attribute iterator. */ | |
598 | private Iterator iter; | |
599 | ||
600 | 8 | public AttributeIterator(Iterator iter) { |
601 | 8 | this.iter = iter; |
602 | } | |
603 | ||
604 | 8 | public boolean hasNext() { |
605 | 8 | return iter.hasNext(); |
606 | } | |
607 | ||
608 | 0 | public Object next() { |
609 | 0 | Attribute attr = (Attribute) iter.next(); |
610 | 0 | QName attrName = createQName(attr.getQName()); |
611 | 0 | String value = attr.getValue(); |
612 | ||
613 | 0 | return factory.createAttribute(attrName, value); |
614 | } | |
615 | ||
616 | 0 | public void remove() { |
617 | 0 | throw new UnsupportedOperationException(); |
618 | } | |
619 | } | |
620 | ||
621 | /** | |
622 | * Internal {@link Iterator}implementation used to pass DOM4J {@link | |
623 | * Namespace}s to the stream. | |
624 | */ | |
625 | private class NamespaceIterator implements Iterator { | |
626 | private Iterator iter; | |
627 | ||
628 | 16 | public NamespaceIterator(Iterator iter) { |
629 | 16 | this.iter = iter; |
630 | } | |
631 | ||
632 | 16 | public boolean hasNext() { |
633 | 16 | return iter.hasNext(); |
634 | } | |
635 | ||
636 | 0 | public Object next() { |
637 | 0 | Namespace ns = (Namespace) iter.next(); |
638 | 0 | String prefix = ns.getPrefix(); |
639 | 0 | String nsURI = ns.getURI(); |
640 | ||
641 | 0 | return factory.createNamespace(prefix, nsURI); |
642 | } | |
643 | ||
644 | 0 | public void remove() { |
645 | 0 | throw new UnsupportedOperationException(); |
646 | } | |
647 | } | |
648 | } | |
649 | ||
650 | /* | |
651 | * Redistribution and use of this software and associated documentation | |
652 | * ("Software"), with or without modification, are permitted provided that the | |
653 | * following conditions are met: | |
654 | * | |
655 | * 1. Redistributions of source code must retain copyright statements and | |
656 | * notices. Redistributions must also contain a copy of this document. | |
657 | * | |
658 | * 2. Redistributions in binary form must reproduce the above copyright notice, | |
659 | * this list of conditions and the following disclaimer in the documentation | |
660 | * and/or other materials provided with the distribution. | |
661 | * | |
662 | * 3. The name "DOM4J" must not be used to endorse or promote products derived | |
663 | * from this Software without prior written permission of MetaStuff, Ltd. For | |
664 | * written permission, please contact dom4j-info@metastuff.com. | |
665 | * | |
666 | * 4. Products derived from this Software may not be called "DOM4J" nor may | |
667 | * "DOM4J" appear in their names without prior written permission of MetaStuff, | |
668 | * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd. | |
669 | * | |
670 | * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org | |
671 | * | |
672 | * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND | |
673 | * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
674 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
675 | * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE | |
676 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
677 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
678 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
679 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
680 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
681 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
682 | * POSSIBILITY OF SUCH DAMAGE. | |
683 | * | |
684 | * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. | |
685 | */ |
|