author | fyuan |
Thu, 08 Sep 2016 12:33:10 +0800 | |
changeset 40829 | ad509d5baa06 |
parent 40223 | 64662417aa2d |
permissions | -rw-r--r-- |
32156
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
1 |
/* |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
2 |
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
4 |
* |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
8 |
* |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
13 |
* accompanied this code). |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
14 |
* |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License version |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
18 |
* |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
21 |
* questions. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
22 |
*/ |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
23 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
24 |
package stream.XMLStreamWriterTest; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
25 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
26 |
import java.io.IOException; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
27 |
import java.io.InputStream; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
28 |
import java.util.Iterator; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
29 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
30 |
import javax.xml.XMLConstants; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
31 |
import javax.xml.namespace.NamespaceContext; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
32 |
import javax.xml.parsers.DocumentBuilder; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
33 |
import javax.xml.parsers.DocumentBuilderFactory; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
34 |
import javax.xml.parsers.FactoryConfigurationError; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
35 |
import javax.xml.parsers.ParserConfigurationException; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
36 |
import javax.xml.stream.XMLStreamException; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
37 |
import javax.xml.stream.XMLStreamWriter; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
38 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
39 |
import org.w3c.dom.Document; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
40 |
import org.w3c.dom.Element; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
41 |
import org.w3c.dom.NamedNodeMap; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
42 |
import org.w3c.dom.Node; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
43 |
import org.w3c.dom.NodeList; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
44 |
import org.xml.sax.SAXException; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
45 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
46 |
public class DOMUtil { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
47 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
48 |
private static DocumentBuilder db; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
49 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
50 |
private static String fixNull(String s) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
51 |
if (s == null) |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
52 |
return ""; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
53 |
else |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
54 |
return s; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
55 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
56 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
57 |
/** |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
58 |
* Creates a new DOM document. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
59 |
*/ |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
60 |
public static Document createDom() { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
61 |
synchronized (DOMUtil.class) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
62 |
if (db == null) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
63 |
try { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
64 |
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
65 |
dbf.setNamespaceAware(true); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
66 |
db = dbf.newDocumentBuilder(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
67 |
} catch (ParserConfigurationException e) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
68 |
throw new FactoryConfigurationError(e); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
69 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
70 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
71 |
return db.newDocument(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
72 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
73 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
74 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
75 |
public static Node createDOMNode(InputStream inputStream) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
76 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
77 |
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
78 |
dbf.setNamespaceAware(true); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
79 |
dbf.setValidating(false); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
80 |
try { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
81 |
DocumentBuilder builder = dbf.newDocumentBuilder(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
82 |
try { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
83 |
return builder.parse(inputStream); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
84 |
} catch (SAXException e) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
85 |
e.printStackTrace(); // To change body of catch statement use |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
86 |
// File | Settings | File Templates. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
87 |
} catch (IOException e) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
88 |
e.printStackTrace(); // To change body of catch statement use |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
89 |
// File | Settings | File Templates. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
90 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
91 |
} catch (ParserConfigurationException pce) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
92 |
IllegalArgumentException iae = new IllegalArgumentException(pce.getMessage()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
93 |
iae.initCause(pce); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
94 |
throw iae; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
95 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
96 |
return null; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
97 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
98 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
99 |
public static void serializeNode(Element node, XMLStreamWriter writer) throws XMLStreamException { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
100 |
String nodePrefix = fixNull(node.getPrefix()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
101 |
String nodeNS = fixNull(node.getNamespaceURI()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
102 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
103 |
// See if nodePrefix:nodeNS is declared in writer's NamespaceContext |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
104 |
// before writing start element |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
105 |
// Writing start element puts nodeNS in NamespaceContext even though |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
106 |
// namespace declaration not written |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
107 |
boolean prefixDecl = isPrefixDeclared(writer, nodeNS, nodePrefix); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
108 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
109 |
writer.writeStartElement(nodePrefix, node.getLocalName(), nodeNS); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
110 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
111 |
if (node.hasAttributes()) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
112 |
NamedNodeMap attrs = node.getAttributes(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
113 |
int numOfAttributes = attrs.getLength(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
114 |
// write namespace declarations first. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
115 |
// if we interleave this with attribue writing, |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
116 |
// Zephyr will try to fix it and we end up getting inconsistent |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
117 |
// namespace bindings. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
118 |
for (int i = 0; i < numOfAttributes; i++) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
119 |
Node attr = attrs.item(i); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
120 |
String nsUri = fixNull(attr.getNamespaceURI()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
121 |
if (nsUri.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
122 |
// handle default ns declarations |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
123 |
String local = attr.getLocalName().equals(XMLConstants.XMLNS_ATTRIBUTE) ? "" : attr.getLocalName(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
124 |
if (local.equals(nodePrefix) && attr.getNodeValue().equals(nodeNS)) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
125 |
prefixDecl = true; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
126 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
127 |
// this is a namespace declaration, not an attribute |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
128 |
writer.setPrefix(attr.getLocalName(), attr.getNodeValue()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
129 |
writer.writeNamespace(attr.getLocalName(), attr.getNodeValue()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
130 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
131 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
132 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
133 |
// node's namespace is not declared as attribute, but declared on |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
134 |
// ancestor |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
135 |
if (!prefixDecl) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
136 |
writer.writeNamespace(nodePrefix, nodeNS); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
137 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
138 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
139 |
// Write all other attributes which are not namespace decl. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
140 |
if (node.hasAttributes()) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
141 |
NamedNodeMap attrs = node.getAttributes(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
142 |
int numOfAttributes = attrs.getLength(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
143 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
144 |
for (int i = 0; i < numOfAttributes; i++) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
145 |
Node attr = attrs.item(i); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
146 |
String attrPrefix = fixNull(attr.getPrefix()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
147 |
String attrNS = fixNull(attr.getNamespaceURI()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
148 |
if (!attrNS.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
149 |
String localName = attr.getLocalName(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
150 |
if (localName == null) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
151 |
// TODO: this is really a bug in the caller for not |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
152 |
// creating proper DOM tree. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
153 |
// will remove this workaround after plugfest |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
154 |
localName = attr.getNodeName(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
155 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
156 |
boolean attrPrefixDecl = isPrefixDeclared(writer, attrNS, attrPrefix); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
157 |
if (!attrPrefix.equals("") && !attrPrefixDecl) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
158 |
// attr has namespace but namespace decl is there in |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
159 |
// ancestor node |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
160 |
// So write the namespace decl before writing the attr |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
161 |
writer.setPrefix(attr.getLocalName(), attr.getNodeValue()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
162 |
writer.writeNamespace(attrPrefix, attrNS); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
163 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
164 |
writer.writeAttribute(attrPrefix, attrNS, localName, attr.getNodeValue()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
165 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
166 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
167 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
168 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
169 |
if (node.hasChildNodes()) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
170 |
NodeList children = node.getChildNodes(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
171 |
for (int i = 0; i < children.getLength(); i++) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
172 |
Node child = children.item(i); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
173 |
switch (child.getNodeType()) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
174 |
case Node.PROCESSING_INSTRUCTION_NODE: |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
175 |
writer.writeProcessingInstruction(child.getNodeValue()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
176 |
case Node.DOCUMENT_TYPE_NODE: |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
177 |
break; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
178 |
case Node.CDATA_SECTION_NODE: |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
179 |
writer.writeCData(child.getNodeValue()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
180 |
break; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
181 |
case Node.COMMENT_NODE: |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
182 |
writer.writeComment(child.getNodeValue()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
183 |
break; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
184 |
case Node.TEXT_NODE: |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
185 |
writer.writeCharacters(child.getNodeValue()); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
186 |
break; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
187 |
case Node.ELEMENT_NODE: |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
188 |
serializeNode((Element) child, writer); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
189 |
break; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
190 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
191 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
192 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
193 |
writer.writeEndElement(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
194 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
195 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
196 |
private static boolean isPrefixDeclared(XMLStreamWriter writer, String nsUri, String prefix) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
197 |
boolean prefixDecl = false; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
198 |
NamespaceContext nscontext = writer.getNamespaceContext(); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
199 |
Iterator prefixItr = nscontext.getPrefixes(nsUri); |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
200 |
while (prefixItr.hasNext()) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
201 |
if (prefix.equals(prefixItr.next())) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
202 |
prefixDecl = true; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
203 |
break; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
204 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
205 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
206 |
return prefixDecl; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
207 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
208 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
209 |
/** |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
210 |
* Gets the first child of the given name, or null. |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
211 |
*/ |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
212 |
public static Element getFirstChild(Element e, String nsUri, String local) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
213 |
for (Node n = e.getFirstChild(); n != null; n = n.getNextSibling()) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
214 |
if (n.getNodeType() == Node.ELEMENT_NODE) { |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
215 |
Element c = (Element) n; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
216 |
if (c.getLocalName().equals(local) && c.getNamespaceURI().equals(nsUri)) |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
217 |
return c; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
218 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
219 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
220 |
return null; |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
221 |
} |
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
222 |
|
8def5917a696
8132660: Change jaxp unit test package name to be different with jaxp api
joehw
parents:
diff
changeset
|
223 |
} |