nokogiri 1.11.1-java → 1.11.6-java
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of nokogiri might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/LICENSE-DEPENDENCIES.md +12 -12
- data/LICENSE.md +1 -1
- data/README.md +21 -16
- data/dependencies.yml +12 -12
- data/ext/java/nokogiri/EncodingHandler.java +76 -89
- data/ext/java/nokogiri/HtmlDocument.java +135 -144
- data/ext/java/nokogiri/HtmlElementDescription.java +102 -117
- data/ext/java/nokogiri/HtmlEntityLookup.java +33 -60
- data/ext/java/nokogiri/HtmlSaxParserContext.java +218 -222
- data/ext/java/nokogiri/HtmlSaxPushParser.java +162 -169
- data/ext/java/nokogiri/NokogiriService.java +595 -556
- data/ext/java/nokogiri/XmlAttr.java +118 -126
- data/ext/java/nokogiri/XmlAttributeDecl.java +95 -106
- data/ext/java/nokogiri/XmlCdata.java +35 -58
- data/ext/java/nokogiri/XmlComment.java +46 -67
- data/ext/java/nokogiri/XmlDocument.java +645 -572
- data/ext/java/nokogiri/XmlDocumentFragment.java +125 -137
- data/ext/java/nokogiri/XmlDtd.java +448 -414
- data/ext/java/nokogiri/XmlElement.java +23 -48
- data/ext/java/nokogiri/XmlElementContent.java +343 -316
- data/ext/java/nokogiri/XmlElementDecl.java +124 -125
- data/ext/java/nokogiri/XmlEntityDecl.java +119 -127
- data/ext/java/nokogiri/XmlEntityReference.java +49 -72
- data/ext/java/nokogiri/XmlNamespace.java +175 -175
- data/ext/java/nokogiri/XmlNode.java +1843 -1620
- data/ext/java/nokogiri/XmlNodeSet.java +361 -331
- data/ext/java/nokogiri/XmlProcessingInstruction.java +47 -69
- data/ext/java/nokogiri/XmlReader.java +513 -450
- data/ext/java/nokogiri/XmlRelaxng.java +85 -104
- data/ext/java/nokogiri/XmlSaxParserContext.java +328 -315
- data/ext/java/nokogiri/XmlSaxPushParser.java +227 -220
- data/ext/java/nokogiri/XmlSchema.java +328 -295
- data/ext/java/nokogiri/XmlSyntaxError.java +113 -115
- data/ext/java/nokogiri/XmlText.java +55 -76
- data/ext/java/nokogiri/XmlXpathContext.java +240 -238
- data/ext/java/nokogiri/XsltStylesheet.java +280 -269
- data/ext/java/nokogiri/internals/ClosedStreamException.java +5 -2
- data/ext/java/nokogiri/internals/HtmlDomParserContext.java +201 -202
- data/ext/java/nokogiri/internals/IgnoreSchemaErrorsErrorHandler.java +17 -10
- data/ext/java/nokogiri/internals/NokogiriBlockingQueueInputStream.java +43 -16
- data/ext/java/nokogiri/internals/NokogiriDomParser.java +63 -80
- data/ext/java/nokogiri/internals/NokogiriEntityResolver.java +107 -88
- data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +27 -52
- data/ext/java/nokogiri/internals/NokogiriHandler.java +316 -286
- data/ext/java/nokogiri/internals/NokogiriHelpers.java +736 -652
- data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +184 -173
- data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +81 -98
- data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +64 -79
- data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +84 -99
- data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +48 -65
- data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +116 -131
- data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +34 -56
- data/ext/java/nokogiri/internals/NokogiriXPathVariableResolver.java +23 -46
- data/ext/java/nokogiri/internals/NokogiriXsltErrorListener.java +55 -72
- data/ext/java/nokogiri/internals/ParserContext.java +206 -211
- data/ext/java/nokogiri/internals/ReaderNode.java +478 -403
- data/ext/java/nokogiri/internals/SaveContextVisitor.java +822 -739
- data/ext/java/nokogiri/internals/SchemaErrorHandler.java +31 -54
- data/ext/java/nokogiri/internals/XalanDTMManagerPatch.java +129 -123
- data/ext/java/nokogiri/internals/XmlDeclHandler.java +3 -34
- data/ext/java/nokogiri/internals/XmlDomParserContext.java +206 -207
- data/ext/java/nokogiri/internals/XmlSaxParser.java +22 -47
- data/ext/java/nokogiri/internals/c14n/AttrCompare.java +71 -68
- data/ext/java/nokogiri/internals/c14n/C14nHelper.java +137 -118
- data/ext/java/nokogiri/internals/c14n/CanonicalFilter.java +27 -21
- data/ext/java/nokogiri/internals/c14n/CanonicalizationException.java +74 -61
- data/ext/java/nokogiri/internals/c14n/Canonicalizer.java +230 -205
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11.java +572 -547
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11_OmitComments.java +17 -10
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11_WithComments.java +17 -10
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315.java +323 -302
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315Excl.java +232 -219
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclOmitComments.java +22 -15
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclWithComments.java +23 -16
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315OmitComments.java +23 -16
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315WithComments.java +22 -15
- data/ext/java/nokogiri/internals/c14n/CanonicalizerBase.java +575 -545
- data/ext/java/nokogiri/internals/c14n/CanonicalizerPhysical.java +141 -120
- data/ext/java/nokogiri/internals/c14n/CanonicalizerSpi.java +39 -38
- data/ext/java/nokogiri/internals/c14n/Constants.java +13 -10
- data/ext/java/nokogiri/internals/c14n/ElementProxy.java +279 -247
- data/ext/java/nokogiri/internals/c14n/HelperNodeList.java +66 -53
- data/ext/java/nokogiri/internals/c14n/IgnoreAllErrorHandler.java +44 -37
- data/ext/java/nokogiri/internals/c14n/InclusiveNamespaces.java +135 -120
- data/ext/java/nokogiri/internals/c14n/InvalidCanonicalizerException.java +59 -48
- data/ext/java/nokogiri/internals/c14n/NameSpaceSymbTable.java +384 -334
- data/ext/java/nokogiri/internals/c14n/NodeFilter.java +25 -24
- data/ext/java/nokogiri/internals/c14n/UtfHelpper.java +151 -140
- data/ext/java/nokogiri/internals/c14n/XMLUtils.java +456 -423
- data/ext/java/nokogiri/internals/dom2dtm/DOM2DTM.java +1466 -1500
- data/ext/java/nokogiri/internals/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java +626 -574
- data/ext/nokogiri/depend +34 -474
- data/ext/nokogiri/extconf.rb +253 -183
- data/ext/nokogiri/html_document.c +10 -15
- data/ext/nokogiri/html_element_description.c +84 -71
- data/ext/nokogiri/html_entity_lookup.c +21 -16
- data/ext/nokogiri/html_sax_parser_context.c +66 -65
- data/ext/nokogiri/html_sax_push_parser.c +29 -27
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +190 -63
- data/ext/nokogiri/test_global_handlers.c +3 -4
- data/ext/nokogiri/xml_attr.c +15 -15
- data/ext/nokogiri/xml_attribute_decl.c +18 -18
- data/ext/nokogiri/xml_cdata.c +13 -18
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +246 -188
- data/ext/nokogiri/xml_document_fragment.c +13 -15
- data/ext/nokogiri/xml_dtd.c +54 -48
- data/ext/nokogiri/xml_element_content.c +30 -27
- data/ext/nokogiri/xml_element_decl.c +22 -22
- data/ext/nokogiri/xml_encoding_handler.c +17 -11
- data/ext/nokogiri/xml_entity_decl.c +32 -30
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +56 -49
- data/ext/nokogiri/xml_node.c +385 -326
- data/ext/nokogiri/xml_node_set.c +168 -156
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +191 -157
- data/ext/nokogiri/xml_relax_ng.c +29 -23
- data/ext/nokogiri/xml_sax_parser.c +117 -112
- data/ext/nokogiri/xml_sax_parser_context.c +100 -85
- data/ext/nokogiri/xml_sax_push_parser.c +34 -27
- data/ext/nokogiri/xml_schema.c +48 -42
- data/ext/nokogiri/xml_syntax_error.c +21 -23
- data/ext/nokogiri/xml_text.c +13 -17
- data/ext/nokogiri/xml_xpath_context.c +134 -127
- data/ext/nokogiri/xslt_stylesheet.c +157 -157
- data/lib/nokogiri.rb +1 -22
- data/lib/nokogiri/css/parser.rb +1 -1
- data/lib/nokogiri/extension.rb +26 -0
- data/lib/nokogiri/html/document_fragment.rb +15 -15
- data/lib/nokogiri/nokogiri.jar +0 -0
- data/lib/nokogiri/version/constant.rb +1 -1
- data/lib/nokogiri/version/info.rb +32 -8
- data/lib/nokogiri/xml/document.rb +74 -28
- data/lib/nokogiri/xml/node.rb +39 -42
- data/lib/nokogiri/xml/reader.rb +2 -9
- data/lib/nokogiri/xml/xpath.rb +1 -3
- data/lib/nokogiri/xml/xpath/syntax_error.rb +1 -1
- metadata +7 -8
- data/ext/nokogiri/xml_io.c +0 -63
- data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
@@ -1,35 +1,3 @@
|
|
1
|
-
/**
|
2
|
-
* (The MIT License)
|
3
|
-
*
|
4
|
-
* Copyright (c) 2008 - 2011:
|
5
|
-
*
|
6
|
-
* * {Aaron Patterson}[http://tenderlovemaking.com]
|
7
|
-
* * {Mike Dalessio}[http://mike.daless.io]
|
8
|
-
* * {Charles Nutter}[http://blog.headius.com]
|
9
|
-
* * {Sergio Arbeo}[http://www.serabe.com]
|
10
|
-
* * {Patrick Mahoney}[http://polycrystal.org]
|
11
|
-
* * {Yoko Harada}[http://yokolet.blogspot.com]
|
12
|
-
*
|
13
|
-
* Permission is hereby granted, free of charge, to any person obtaining
|
14
|
-
* a copy of this software and associated documentation files (the
|
15
|
-
* 'Software'), to deal in the Software without restriction, including
|
16
|
-
* without limitation the rights to use, copy, modify, merge, publish,
|
17
|
-
* distribute, sublicense, and/or sell copies of the Software, and to
|
18
|
-
* permit persons to whom the Software is furnished to do so, subject to
|
19
|
-
* the following conditions:
|
20
|
-
*
|
21
|
-
* The above copyright notice and this permission notice shall be
|
22
|
-
* included in all copies or substantial portions of the Software.
|
23
|
-
*
|
24
|
-
* THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
25
|
-
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
26
|
-
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
27
|
-
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
28
|
-
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
29
|
-
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
30
|
-
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
31
|
-
*/
|
32
|
-
|
33
1
|
package nokogiri.internals;
|
34
2
|
|
35
3
|
import org.apache.xerces.parsers.SAXParser;
|
@@ -42,24 +10,31 @@ import org.apache.xerces.xni.XNIException;
|
|
42
10
|
*
|
43
11
|
* @author Patrick Mahoney <pat@polycrystal.org>
|
44
12
|
*/
|
45
|
-
public class XmlSaxParser extends SAXParser
|
13
|
+
public class XmlSaxParser extends SAXParser
|
14
|
+
{
|
46
15
|
|
47
|
-
|
16
|
+
protected XmlDeclHandler xmlDeclHandler = null;
|
48
17
|
|
49
|
-
|
50
|
-
|
51
|
-
|
18
|
+
public
|
19
|
+
XmlSaxParser()
|
20
|
+
{
|
21
|
+
super();
|
22
|
+
}
|
52
23
|
|
53
|
-
|
54
|
-
|
55
|
-
|
24
|
+
public void
|
25
|
+
setXmlDeclHandler(XmlDeclHandler xmlDeclHandler)
|
26
|
+
{
|
27
|
+
this.xmlDeclHandler = xmlDeclHandler;
|
28
|
+
}
|
56
29
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
30
|
+
@Override
|
31
|
+
public void
|
32
|
+
xmlDecl(String version, String encoding, String standalone,
|
33
|
+
Augmentations augs) throws XNIException
|
34
|
+
{
|
35
|
+
super.xmlDecl(version, encoding, standalone, augs);
|
36
|
+
if (xmlDeclHandler != null) {
|
37
|
+
xmlDeclHandler.xmlDecl(version, encoding, standalone);
|
64
38
|
}
|
39
|
+
}
|
65
40
|
}
|
@@ -28,7 +28,7 @@ import org.w3c.dom.Attr;
|
|
28
28
|
* Compares two attributes based on the C14n specification.
|
29
29
|
*
|
30
30
|
* <UL>
|
31
|
-
* <LI>Namespace nodes have a lesser document order position than attribute
|
31
|
+
* <LI>Namespace nodes have a lesser document order position than attribute
|
32
32
|
* nodes.
|
33
33
|
* <LI> An element's namespace nodes are sorted lexicographically by
|
34
34
|
* local name (the default namespace node, if one exists, has no
|
@@ -40,80 +40,83 @@ import org.w3c.dom.Attr;
|
|
40
40
|
*
|
41
41
|
* @author Christian Geuer-Pollmann
|
42
42
|
*/
|
43
|
-
public class AttrCompare implements Comparator<Attr>, Serializable
|
43
|
+
public class AttrCompare implements Comparator<Attr>, Serializable
|
44
|
+
{
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
private static final long serialVersionUID = -7113259629930576230L;
|
47
|
+
private static final int ATTR0_BEFORE_ATTR1 = -1;
|
48
|
+
private static final int ATTR1_BEFORE_ATTR0 = 1;
|
49
|
+
private static final String XMLNS = Constants.NamespaceSpecNS;
|
49
50
|
|
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
|
-
boolean isNamespaceAttr1 = XMLNS.equals(namespaceURI1);
|
51
|
+
/**
|
52
|
+
* Compares two attributes based on the C14n specification.
|
53
|
+
*
|
54
|
+
* <UL>
|
55
|
+
* <LI>Namespace nodes have a lesser document order position than
|
56
|
+
* attribute nodes.
|
57
|
+
* <LI> An element's namespace nodes are sorted lexicographically by
|
58
|
+
* local name (the default namespace node, if one exists, has no
|
59
|
+
* local name and is therefore lexicographically least).
|
60
|
+
* <LI> An element's attribute nodes are sorted lexicographically with
|
61
|
+
* namespace URI as the primary key and local name as the secondary
|
62
|
+
* key (an empty namespace URI is lexicographically least).
|
63
|
+
* </UL>
|
64
|
+
*
|
65
|
+
* @param attr0
|
66
|
+
* @param attr1
|
67
|
+
* @return returns a negative integer, zero, or a positive integer as
|
68
|
+
* obj0 is less than, equal to, or greater than obj1
|
69
|
+
*
|
70
|
+
*/
|
71
|
+
public int
|
72
|
+
compare(Attr attr0, Attr attr1)
|
73
|
+
{
|
74
|
+
String namespaceURI0 = attr0.getNamespaceURI();
|
75
|
+
String namespaceURI1 = attr1.getNamespaceURI();
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
// both are namespaces
|
80
|
-
String localname0 = attr0.getLocalName();
|
81
|
-
String localname1 = attr1.getLocalName();
|
77
|
+
boolean isNamespaceAttr0 = XMLNS.equals(namespaceURI0);
|
78
|
+
boolean isNamespaceAttr1 = XMLNS.equals(namespaceURI1);
|
82
79
|
|
83
|
-
|
84
|
-
|
85
|
-
|
80
|
+
if (isNamespaceAttr0) {
|
81
|
+
if (isNamespaceAttr1) {
|
82
|
+
// both are namespaces
|
83
|
+
String localname0 = attr0.getLocalName();
|
84
|
+
String localname1 = attr1.getLocalName();
|
86
85
|
|
87
|
-
|
88
|
-
|
89
|
-
|
86
|
+
if ("xmlns".equals(localname0)) {
|
87
|
+
localname0 = "";
|
88
|
+
}
|
90
89
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
return ATTR0_BEFORE_ATTR1;
|
95
|
-
} else if (isNamespaceAttr1) {
|
96
|
-
// attr1 is a namespace, attr0 is not
|
97
|
-
return ATTR1_BEFORE_ATTR0;
|
98
|
-
}
|
90
|
+
if ("xmlns".equals(localname1)) {
|
91
|
+
localname1 = "";
|
92
|
+
}
|
99
93
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
} else if (namespaceURI1 == null) {
|
109
|
-
return ATTR1_BEFORE_ATTR0;
|
110
|
-
}
|
94
|
+
return localname0.compareTo(localname1);
|
95
|
+
}
|
96
|
+
// attr0 is a namespace, attr1 is not
|
97
|
+
return ATTR0_BEFORE_ATTR1;
|
98
|
+
} else if (isNamespaceAttr1) {
|
99
|
+
// attr1 is a namespace, attr0 is not
|
100
|
+
return ATTR1_BEFORE_ATTR0;
|
101
|
+
}
|
111
102
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
return
|
103
|
+
// none is a namespace
|
104
|
+
if (namespaceURI0 == null) {
|
105
|
+
if (namespaceURI1 == null) {
|
106
|
+
String name0 = attr0.getName();
|
107
|
+
String name1 = attr1.getName();
|
108
|
+
return name0.compareTo(name1);
|
109
|
+
}
|
110
|
+
return ATTR0_BEFORE_ATTR1;
|
111
|
+
} else if (namespaceURI1 == null) {
|
112
|
+
return ATTR1_BEFORE_ATTR0;
|
118
113
|
}
|
114
|
+
|
115
|
+
int a = namespaceURI0.compareTo(namespaceURI1);
|
116
|
+
if (a != 0) {
|
117
|
+
return a;
|
118
|
+
}
|
119
|
+
|
120
|
+
return (attr0.getLocalName()).compareTo(attr1.getLocalName());
|
121
|
+
}
|
119
122
|
}
|
@@ -29,131 +29,150 @@ import org.w3c.dom.NamedNodeMap;
|
|
29
29
|
*
|
30
30
|
* @author Christian Geuer-Pollmann
|
31
31
|
*/
|
32
|
-
public class C14nHelper
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
32
|
+
public class C14nHelper
|
33
|
+
{
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Constructor C14nHelper
|
37
|
+
*
|
38
|
+
*/
|
39
|
+
private
|
40
|
+
C14nHelper()
|
41
|
+
{
|
42
|
+
// don't allow instantiation
|
43
|
+
}
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Method namespaceIsRelative
|
47
|
+
*
|
48
|
+
* @param namespace
|
49
|
+
* @return true if the given namespace is relative.
|
50
|
+
*/
|
51
|
+
public static boolean
|
52
|
+
namespaceIsRelative(Attr namespace)
|
53
|
+
{
|
54
|
+
return !namespaceIsAbsolute(namespace);
|
55
|
+
}
|
56
|
+
|
57
|
+
/**
|
58
|
+
* Method namespaceIsRelative
|
59
|
+
*
|
60
|
+
* @param namespaceValue
|
61
|
+
* @return true if the given namespace is relative.
|
62
|
+
*/
|
63
|
+
public static boolean
|
64
|
+
namespaceIsRelative(String namespaceValue)
|
65
|
+
{
|
66
|
+
return !namespaceIsAbsolute(namespaceValue);
|
67
|
+
}
|
68
|
+
|
69
|
+
/**
|
70
|
+
* Method namespaceIsAbsolute
|
71
|
+
*
|
72
|
+
* @param namespace
|
73
|
+
* @return true if the given namespace is absolute.
|
74
|
+
*/
|
75
|
+
public static boolean
|
76
|
+
namespaceIsAbsolute(Attr namespace)
|
77
|
+
{
|
78
|
+
return namespaceIsAbsolute(namespace.getValue());
|
79
|
+
}
|
80
|
+
|
81
|
+
/**
|
82
|
+
* Method namespaceIsAbsolute
|
83
|
+
*
|
84
|
+
* @param namespaceValue
|
85
|
+
* @return true if the given namespace is absolute.
|
86
|
+
*/
|
87
|
+
public static boolean
|
88
|
+
namespaceIsAbsolute(String namespaceValue)
|
89
|
+
{
|
90
|
+
// assume empty namespaces are absolute
|
91
|
+
if (namespaceValue.length() == 0) {
|
92
|
+
return true;
|
40
93
|
}
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
94
|
+
return namespaceValue.indexOf(':') > 0;
|
95
|
+
}
|
96
|
+
|
97
|
+
/**
|
98
|
+
* This method throws an exception if the Attribute value contains
|
99
|
+
* a relative URI.
|
100
|
+
*
|
101
|
+
* @param attr
|
102
|
+
* @throws CanonicalizationException
|
103
|
+
*/
|
104
|
+
public static void
|
105
|
+
assertNotRelativeNS(Attr attr) throws CanonicalizationException
|
106
|
+
{
|
107
|
+
if (attr == null) {
|
108
|
+
return;
|
50
109
|
}
|
51
110
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
* @param namespaceValue
|
56
|
-
* @return true if the given namespace is relative.
|
57
|
-
*/
|
58
|
-
public static boolean namespaceIsRelative(String namespaceValue) {
|
59
|
-
return !namespaceIsAbsolute(namespaceValue);
|
60
|
-
}
|
111
|
+
String nodeAttrName = attr.getNodeName();
|
112
|
+
boolean definesDefaultNS = nodeAttrName.equals("xmlns");
|
113
|
+
boolean definesNonDefaultNS = nodeAttrName.startsWith("xmlns:");
|
61
114
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
* @return true if the given namespace is absolute.
|
67
|
-
*/
|
68
|
-
public static boolean namespaceIsAbsolute(Attr namespace) {
|
69
|
-
return namespaceIsAbsolute(namespace.getValue());
|
70
|
-
}
|
115
|
+
if ((definesDefaultNS || definesNonDefaultNS) && namespaceIsRelative(attr)) {
|
116
|
+
String parentName = attr.getOwnerElement().getTagName();
|
117
|
+
String attrValue = attr.getValue();
|
118
|
+
Object exArgs[] = { parentName, nodeAttrName, attrValue };
|
71
119
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
* @param namespaceValue
|
76
|
-
* @return true if the given namespace is absolute.
|
77
|
-
*/
|
78
|
-
public static boolean namespaceIsAbsolute(String namespaceValue) {
|
79
|
-
// assume empty namespaces are absolute
|
80
|
-
if (namespaceValue.length() == 0) {
|
81
|
-
return true;
|
82
|
-
}
|
83
|
-
return namespaceValue.indexOf(':') > 0;
|
120
|
+
throw new CanonicalizationException(
|
121
|
+
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
122
|
+
);
|
84
123
|
}
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
String attrValue = attr.getValue();
|
105
|
-
Object exArgs[] = { parentName, nodeAttrName, attrValue };
|
106
|
-
|
107
|
-
throw new CanonicalizationException(
|
108
|
-
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
109
|
-
);
|
110
|
-
}
|
124
|
+
}
|
125
|
+
|
126
|
+
/**
|
127
|
+
* This method throws a CanonicalizationException if the supplied Document
|
128
|
+
* is not able to be traversed using a TreeWalker.
|
129
|
+
*
|
130
|
+
* @param document
|
131
|
+
* @throws CanonicalizationException
|
132
|
+
*/
|
133
|
+
public static void
|
134
|
+
checkTraversability(Document document)
|
135
|
+
throws CanonicalizationException
|
136
|
+
{
|
137
|
+
if (!document.isSupported("Traversal", "2.0")) {
|
138
|
+
Object exArgs[] = {document.getImplementation().getClass().getName() };
|
139
|
+
|
140
|
+
throw new CanonicalizationException(
|
141
|
+
"c14n.Canonicalizer.TraversalNotSupported", exArgs
|
142
|
+
);
|
111
143
|
}
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
*
|
135
|
-
* @param ctxNode
|
136
|
-
* @throws CanonicalizationException
|
137
|
-
* @see C14nHelper#assertNotRelativeNS(Attr)
|
138
|
-
*/
|
139
|
-
public static void checkForRelativeNamespace(Element ctxNode)
|
140
|
-
throws CanonicalizationException {
|
141
|
-
if (ctxNode != null) {
|
142
|
-
NamedNodeMap attributes = ctxNode.getAttributes();
|
143
|
-
|
144
|
-
for (int i = 0; i < attributes.getLength(); i++) {
|
145
|
-
C14nHelper.assertNotRelativeNS((Attr) attributes.item(i));
|
146
|
-
}
|
147
|
-
} else {
|
148
|
-
throw new CanonicalizationException("Called checkForRelativeNamespace() on null");
|
149
|
-
}
|
144
|
+
}
|
145
|
+
|
146
|
+
/**
|
147
|
+
* This method throws a CanonicalizationException if the supplied Element
|
148
|
+
* contains any relative namespaces.
|
149
|
+
*
|
150
|
+
* @param ctxNode
|
151
|
+
* @throws CanonicalizationException
|
152
|
+
* @see C14nHelper#assertNotRelativeNS(Attr)
|
153
|
+
*/
|
154
|
+
public static void
|
155
|
+
checkForRelativeNamespace(Element ctxNode)
|
156
|
+
throws CanonicalizationException
|
157
|
+
{
|
158
|
+
if (ctxNode != null) {
|
159
|
+
NamedNodeMap attributes = ctxNode.getAttributes();
|
160
|
+
|
161
|
+
for (int i = 0; i < attributes.getLength(); i++) {
|
162
|
+
C14nHelper.assertNotRelativeNS((Attr) attributes.item(i));
|
163
|
+
}
|
164
|
+
} else {
|
165
|
+
throw new CanonicalizationException("Called checkForRelativeNamespace() on null");
|
150
166
|
}
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
167
|
+
}
|
168
|
+
|
169
|
+
public static String
|
170
|
+
getErrorMessage(String message, Object... exArgs)
|
171
|
+
{
|
172
|
+
StringBuffer sb = new StringBuffer(message);
|
173
|
+
for (Object arg : exArgs) {
|
174
|
+
sb.append(", ").append(arg.toString());
|
158
175
|
}
|
176
|
+
return new String(sb);
|
177
|
+
}
|
159
178
|
}
|