nokogiri 1.11.0.rc3-java → 1.11.4-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/Gemfile +3 -0
- data/LICENSE-DEPENDENCIES.md +1015 -947
- data/LICENSE.md +1 -1
- data/README.md +168 -91
- 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 -1622
- 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 +89 -101
- data/ext/java/nokogiri/XmlSaxParserContext.java +328 -310
- data/ext/java/nokogiri/XmlSaxPushParser.java +227 -220
- data/ext/java/nokogiri/XmlSchema.java +335 -242
- data/ext/java/nokogiri/XmlSyntaxError.java +113 -119
- data/ext/java/nokogiri/XmlText.java +55 -76
- data/ext/java/nokogiri/XmlXpathContext.java +242 -210
- 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 -190
- 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 +79 -89
- 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 +119 -78
- data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +34 -54
- 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 +37 -358
- data/ext/nokogiri/extconf.rb +581 -374
- data/ext/nokogiri/html_document.c +78 -82
- 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 +69 -66
- data/ext/nokogiri/html_sax_push_parser.c +42 -34
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +192 -93
- data/ext/nokogiri/test_global_handlers.c +40 -0
- 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 +371 -320
- 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 +52 -28
- data/ext/nokogiri/xml_sax_parser.c +118 -118
- data/ext/nokogiri/xml_sax_parser_context.c +103 -86
- data/ext/nokogiri/xml_sax_push_parser.c +36 -27
- data/ext/nokogiri/xml_schema.c +95 -47
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +13 -17
- data/ext/nokogiri/xml_xpath_context.c +206 -123
- data/ext/nokogiri/xslt_stylesheet.c +158 -161
- data/lib/nokogiri.rb +3 -7
- data/lib/nokogiri/css/parser.rb +3 -3
- data/lib/nokogiri/css/parser.y +2 -2
- data/lib/nokogiri/css/xpath_visitor.rb +70 -42
- data/lib/nokogiri/extension.rb +26 -0
- data/lib/nokogiri/html/document.rb +12 -26
- data/lib/nokogiri/html/document_fragment.rb +15 -15
- data/lib/nokogiri/nokogiri.jar +0 -0
- data/lib/nokogiri/version.rb +2 -149
- data/lib/nokogiri/version/constant.rb +5 -0
- data/lib/nokogiri/version/info.rb +205 -0
- data/lib/nokogiri/xml/document.rb +91 -35
- data/lib/nokogiri/xml/document_fragment.rb +4 -6
- data/lib/nokogiri/xml/node.rb +89 -69
- data/lib/nokogiri/xml/parse_options.rb +6 -0
- data/lib/nokogiri/xml/reader.rb +2 -9
- data/lib/nokogiri/xml/relax_ng.rb +6 -2
- data/lib/nokogiri/xml/schema.rb +12 -4
- data/lib/nokogiri/xml/searchable.rb +3 -1
- data/lib/nokogiri/xml/xpath.rb +1 -3
- data/lib/nokogiri/xml/xpath/syntax_error.rb +1 -1
- metadata +86 -177
- data/ext/nokogiri/html_document.h +0 -10
- data/ext/nokogiri/html_element_description.h +0 -10
- data/ext/nokogiri/html_entity_lookup.h +0 -8
- data/ext/nokogiri/html_sax_parser_context.h +0 -11
- data/ext/nokogiri/html_sax_push_parser.h +0 -9
- data/ext/nokogiri/nokogiri.h +0 -134
- data/ext/nokogiri/xml_attr.h +0 -9
- data/ext/nokogiri/xml_attribute_decl.h +0 -9
- data/ext/nokogiri/xml_cdata.h +0 -9
- data/ext/nokogiri/xml_comment.h +0 -9
- data/ext/nokogiri/xml_document.h +0 -23
- data/ext/nokogiri/xml_document_fragment.h +0 -10
- data/ext/nokogiri/xml_dtd.h +0 -10
- data/ext/nokogiri/xml_element_content.h +0 -10
- data/ext/nokogiri/xml_element_decl.h +0 -9
- data/ext/nokogiri/xml_encoding_handler.h +0 -8
- data/ext/nokogiri/xml_entity_decl.h +0 -10
- data/ext/nokogiri/xml_entity_reference.h +0 -9
- data/ext/nokogiri/xml_io.c +0 -63
- data/ext/nokogiri/xml_io.h +0 -11
- data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
- data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
- data/ext/nokogiri/xml_namespace.h +0 -14
- data/ext/nokogiri/xml_node.h +0 -13
- data/ext/nokogiri/xml_node_set.h +0 -12
- data/ext/nokogiri/xml_processing_instruction.h +0 -9
- data/ext/nokogiri/xml_reader.h +0 -10
- data/ext/nokogiri/xml_relax_ng.h +0 -9
- data/ext/nokogiri/xml_sax_parser.h +0 -39
- data/ext/nokogiri/xml_sax_parser_context.h +0 -10
- data/ext/nokogiri/xml_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_schema.h +0 -9
- data/ext/nokogiri/xml_syntax_error.h +0 -13
- data/ext/nokogiri/xml_text.h +0 -9
- data/ext/nokogiri/xml_xpath_context.h +0 -10
- data/ext/nokogiri/xslt_stylesheet.h +0 -14
@@ -45,251 +45,264 @@ import org.w3c.dom.Node;
|
|
45
45
|
* @see <a href="http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/ Exclusive#">
|
46
46
|
* XML Canonicalization, Version 1.0</a>
|
47
47
|
*/
|
48
|
-
public abstract class Canonicalizer20010315Excl extends CanonicalizerBase
|
48
|
+
public abstract class Canonicalizer20010315Excl extends CanonicalizerBase
|
49
|
+
{
|
49
50
|
|
50
|
-
|
51
|
-
|
51
|
+
private static final String XML_LANG_URI = Constants.XML_LANG_SPACE_SpecNS;
|
52
|
+
private static final String XMLNS_URI = Constants.NamespaceSpecNS;
|
52
53
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
54
|
+
/**
|
55
|
+
* This Set contains the names (Strings like "xmlns" or "xmlns:foo") of
|
56
|
+
* the inclusive namespaces.
|
57
|
+
*/
|
58
|
+
private SortedSet<String> inclusiveNSSet;
|
58
59
|
|
59
|
-
|
60
|
+
private final SortedSet<Attr> result = new TreeSet<Attr>(COMPARE);
|
60
61
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
62
|
+
/**
|
63
|
+
* Constructor Canonicalizer20010315Excl
|
64
|
+
*
|
65
|
+
* @param includeComments
|
66
|
+
*/
|
67
|
+
public
|
68
|
+
Canonicalizer20010315Excl(boolean includeComments)
|
69
|
+
{
|
70
|
+
super(includeComments);
|
71
|
+
}
|
69
72
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
73
|
+
/**
|
74
|
+
* Method engineCanonicalizeSubTree
|
75
|
+
* @inheritDoc
|
76
|
+
* @param rootNode
|
77
|
+
*
|
78
|
+
* @throws CanonicalizationException
|
79
|
+
*/
|
80
|
+
@Override
|
81
|
+
public byte[]
|
82
|
+
engineCanonicalizeSubTree(Node rootNode, CanonicalFilter filter)
|
83
|
+
throws CanonicalizationException
|
84
|
+
{
|
85
|
+
return engineCanonicalizeSubTree(rootNode, "", null);
|
86
|
+
}
|
82
87
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
88
|
+
/**
|
89
|
+
* Method engineCanonicalizeSubTree
|
90
|
+
* @inheritDoc
|
91
|
+
* @param rootNode
|
92
|
+
* @param inclusiveNamespaces
|
93
|
+
*
|
94
|
+
* @throws CanonicalizationException
|
95
|
+
*/
|
96
|
+
@Override
|
97
|
+
public byte[]
|
98
|
+
engineCanonicalizeSubTree(
|
99
|
+
Node rootNode, String inclusiveNamespaces, CanonicalFilter filter
|
100
|
+
) throws CanonicalizationException
|
101
|
+
{
|
102
|
+
return engineCanonicalizeSubTree(rootNode, inclusiveNamespaces, null, filter);
|
103
|
+
}
|
97
104
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
105
|
+
/**
|
106
|
+
* Method engineCanonicalizeSubTree
|
107
|
+
* @param rootNode
|
108
|
+
* @param inclusiveNamespaces
|
109
|
+
* @param excl A element to exclude from the c14n process.
|
110
|
+
* @return the rootNode c14n.
|
111
|
+
* @throws CanonicalizationException
|
112
|
+
*/
|
113
|
+
public byte[]
|
114
|
+
engineCanonicalizeSubTree(
|
115
|
+
Node rootNode, String inclusiveNamespaces, Node excl, CanonicalFilter filter
|
116
|
+
) throws CanonicalizationException
|
117
|
+
{
|
118
|
+
inclusiveNSSet = InclusiveNamespaces.prefixStr2Set(inclusiveNamespaces);
|
119
|
+
return super.engineCanonicalizeSubTree(rootNode, excl, filter);
|
120
|
+
}
|
112
121
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
122
|
+
@Override
|
123
|
+
protected Iterator<Attr>
|
124
|
+
handleAttributesSubtree(Element element, NameSpaceSymbTable ns)
|
125
|
+
throws CanonicalizationException
|
126
|
+
{
|
127
|
+
// result will contain the attrs which have to be output
|
128
|
+
final SortedSet<Attr> result = this.result;
|
129
|
+
result.clear();
|
119
130
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
131
|
+
// The prefix visibly utilized (in the attribute or in the name) in
|
132
|
+
// the element
|
133
|
+
SortedSet<String> visiblyUtilized = new TreeSet<String>();
|
134
|
+
if (inclusiveNSSet != null && !inclusiveNSSet.isEmpty()) {
|
135
|
+
visiblyUtilized.addAll(inclusiveNSSet);
|
136
|
+
}
|
126
137
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
138
|
+
if (element.hasAttributes()) {
|
139
|
+
NamedNodeMap attrs = element.getAttributes();
|
140
|
+
int attrsLength = attrs.getLength();
|
141
|
+
for (int i = 0; i < attrsLength; i++) {
|
142
|
+
Attr attribute = (Attr) attrs.item(i);
|
143
|
+
String NName = attribute.getLocalName();
|
144
|
+
String NNodeValue = attribute.getNodeValue();
|
134
145
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
}
|
155
|
-
}
|
156
|
-
}
|
157
|
-
String prefix;
|
158
|
-
if (element.getNamespaceURI() != null
|
159
|
-
&& !(element.getPrefix() == null || element.getPrefix().length() == 0)) {
|
160
|
-
prefix = element.getPrefix();
|
161
|
-
} else {
|
162
|
-
prefix = XMLNS;
|
163
|
-
}
|
164
|
-
visiblyUtilized.add(prefix);
|
165
|
-
|
166
|
-
for (String s : visiblyUtilized) {
|
167
|
-
Attr key = ns.getMapping(s);
|
168
|
-
if (key != null) {
|
169
|
-
result.add(key);
|
170
|
-
}
|
146
|
+
if (!XMLNS_URI.equals(attribute.getNamespaceURI())) {
|
147
|
+
// Not a namespace definition.
|
148
|
+
// The Element is output element, add the prefix (if used) to
|
149
|
+
// visiblyUtilized
|
150
|
+
String prefix = attribute.getPrefix();
|
151
|
+
if (prefix != null && !(prefix.equals(XML) || prefix.equals(XMLNS))) {
|
152
|
+
visiblyUtilized.add(prefix);
|
153
|
+
}
|
154
|
+
// Add to the result.
|
155
|
+
result.add(attribute);
|
156
|
+
} else if (!(XML.equals(NName) && XML_LANG_URI.equals(NNodeValue))
|
157
|
+
&& ns.addMapping(NName, NNodeValue, attribute)
|
158
|
+
&& C14nHelper.namespaceIsRelative(NNodeValue)) {
|
159
|
+
// The default mapping for xml must not be output.
|
160
|
+
// New definition check if it is relative.
|
161
|
+
Object exArgs[] = {element.getTagName(), NName, attribute.getNodeValue()};
|
162
|
+
throw new CanonicalizationException(
|
163
|
+
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
164
|
+
);
|
171
165
|
}
|
172
|
-
|
173
|
-
return result.iterator();
|
166
|
+
}
|
174
167
|
}
|
168
|
+
String prefix;
|
169
|
+
if (element.getNamespaceURI() != null
|
170
|
+
&& !(element.getPrefix() == null || element.getPrefix().length() == 0)) {
|
171
|
+
prefix = element.getPrefix();
|
172
|
+
} else {
|
173
|
+
prefix = XMLNS;
|
174
|
+
}
|
175
|
+
visiblyUtilized.add(prefix);
|
175
176
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
protected final Iterator<Attr> handleAttributes(Element element, NameSpaceSymbTable ns)
|
183
|
-
throws CanonicalizationException {
|
184
|
-
// result will contain the attrs which have to be output
|
185
|
-
final SortedSet<Attr> result = this.result;
|
186
|
-
result.clear();
|
177
|
+
for (String s : visiblyUtilized) {
|
178
|
+
Attr key = ns.getMapping(s);
|
179
|
+
if (key != null) {
|
180
|
+
result.add(key);
|
181
|
+
}
|
182
|
+
}
|
187
183
|
|
188
|
-
|
189
|
-
|
190
|
-
Set<String> visiblyUtilized = null;
|
191
|
-
// It's the output selected.
|
192
|
-
boolean isOutputElement = isVisibleDO(element, ns.getLevel()) == 1;
|
193
|
-
if (isOutputElement) {
|
194
|
-
visiblyUtilized = new TreeSet<String>();
|
195
|
-
if (inclusiveNSSet != null && !inclusiveNSSet.isEmpty()) {
|
196
|
-
visiblyUtilized.addAll(inclusiveNSSet);
|
197
|
-
}
|
198
|
-
}
|
184
|
+
return result.iterator();
|
185
|
+
}
|
199
186
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
187
|
+
/**
|
188
|
+
* @inheritDoc
|
189
|
+
* @param element
|
190
|
+
* @throws CanonicalizationException
|
191
|
+
*/
|
192
|
+
@Override
|
193
|
+
protected final Iterator<Attr>
|
194
|
+
handleAttributes(Element element, NameSpaceSymbTable ns)
|
195
|
+
throws CanonicalizationException
|
196
|
+
{
|
197
|
+
// result will contain the attrs which have to be output
|
198
|
+
final SortedSet<Attr> result = this.result;
|
199
|
+
result.clear();
|
205
200
|
|
206
|
-
|
207
|
-
|
201
|
+
// The prefix visibly utilized (in the attribute or in the name) in
|
202
|
+
// the element
|
203
|
+
Set<String> visiblyUtilized = null;
|
204
|
+
// It's the output selected.
|
205
|
+
boolean isOutputElement = isVisibleDO(element, ns.getLevel()) == 1;
|
206
|
+
if (isOutputElement) {
|
207
|
+
visiblyUtilized = new TreeSet<String>();
|
208
|
+
if (inclusiveNSSet != null && !inclusiveNSSet.isEmpty()) {
|
209
|
+
visiblyUtilized.addAll(inclusiveNSSet);
|
210
|
+
}
|
211
|
+
}
|
208
212
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
if (prefix != null && !(prefix.equals(XML) || prefix.equals(XMLNS))) {
|
215
|
-
visiblyUtilized.add(prefix);
|
216
|
-
}
|
217
|
-
// Add to the result.
|
218
|
-
result.add(attribute);
|
219
|
-
}
|
220
|
-
} else if (isOutputElement && !isVisible(attribute) && !XMLNS.equals(NName)) {
|
221
|
-
ns.removeMappingIfNotRender(NName);
|
222
|
-
} else {
|
223
|
-
if (!isOutputElement && isVisible(attribute)
|
224
|
-
&& inclusiveNSSet.contains(NName)
|
225
|
-
&& !ns.removeMappingIfRender(NName)) {
|
226
|
-
Node n = ns.addMappingAndRender(NName, NNodeValue, attribute);
|
227
|
-
if (n != null) {
|
228
|
-
result.add((Attr)n);
|
229
|
-
if (C14nHelper.namespaceIsRelative(attribute)) {
|
230
|
-
Object exArgs[] = { element.getTagName(), NName, attribute.getNodeValue() };
|
231
|
-
throw new CanonicalizationException(
|
232
|
-
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
233
|
-
);
|
234
|
-
}
|
235
|
-
}
|
236
|
-
}
|
213
|
+
if (element.hasAttributes()) {
|
214
|
+
NamedNodeMap attrs = element.getAttributes();
|
215
|
+
int attrsLength = attrs.getLength();
|
216
|
+
for (int i = 0; i < attrsLength; i++) {
|
217
|
+
Attr attribute = (Attr) attrs.item(i);
|
237
218
|
|
238
|
-
|
239
|
-
|
240
|
-
// New definition check if it is relative
|
241
|
-
Object exArgs[] = { element.getTagName(), NName, attribute.getNodeValue() };
|
242
|
-
throw new CanonicalizationException(
|
243
|
-
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
244
|
-
);
|
245
|
-
}
|
246
|
-
}
|
247
|
-
}
|
248
|
-
}
|
219
|
+
String NName = attribute.getLocalName();
|
220
|
+
String NNodeValue = attribute.getNodeValue();
|
249
221
|
|
250
|
-
if (
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
222
|
+
if (!XMLNS_URI.equals(attribute.getNamespaceURI())) {
|
223
|
+
if (isVisible(attribute) && isOutputElement) {
|
224
|
+
// The Element is output element, add the prefix (if used)
|
225
|
+
// to visibyUtilized
|
226
|
+
String prefix = attribute.getPrefix();
|
227
|
+
if (prefix != null && !(prefix.equals(XML) || prefix.equals(XMLNS))) {
|
228
|
+
visiblyUtilized.add(prefix);
|
257
229
|
}
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
230
|
+
// Add to the result.
|
231
|
+
result.add(attribute);
|
232
|
+
}
|
233
|
+
} else if (isOutputElement && !isVisible(attribute) && !XMLNS.equals(NName)) {
|
234
|
+
ns.removeMappingIfNotRender(NName);
|
235
|
+
} else {
|
236
|
+
if (!isOutputElement && isVisible(attribute)
|
237
|
+
&& inclusiveNSSet.contains(NName)
|
238
|
+
&& !ns.removeMappingIfRender(NName)) {
|
239
|
+
Node n = ns.addMappingAndRender(NName, NNodeValue, attribute);
|
240
|
+
if (n != null) {
|
241
|
+
result.add((Attr)n);
|
242
|
+
if (C14nHelper.namespaceIsRelative(attribute)) {
|
243
|
+
Object exArgs[] = { element.getTagName(), NName, attribute.getNodeValue() };
|
244
|
+
throw new CanonicalizationException(
|
245
|
+
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
246
|
+
);
|
247
|
+
}
|
265
248
|
}
|
266
|
-
|
249
|
+
}
|
267
250
|
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
251
|
+
if (ns.addMapping(NName, NNodeValue, attribute)
|
252
|
+
&& C14nHelper.namespaceIsRelative(NNodeValue)) {
|
253
|
+
// New definition check if it is relative
|
254
|
+
Object exArgs[] = { element.getTagName(), NName, attribute.getNodeValue() };
|
255
|
+
throw new CanonicalizationException(
|
256
|
+
"c14n.Canonicalizer.RelativeNamespace", exArgs
|
257
|
+
);
|
258
|
+
}
|
274
259
|
}
|
275
|
-
|
276
|
-
return result.iterator();
|
260
|
+
}
|
277
261
|
}
|
278
262
|
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
263
|
+
if (isOutputElement) {
|
264
|
+
// The element is visible, handle the xmlns definition
|
265
|
+
Attr xmlns = element.getAttributeNodeNS(XMLNS_URI, XMLNS);
|
266
|
+
if (xmlns != null && !isVisible(xmlns)) {
|
267
|
+
// There is a definition but the xmlns is not selected by the
|
268
|
+
// xpath. then xmlns=""
|
269
|
+
ns.addMapping(XMLNS, "", nullNode);
|
270
|
+
}
|
271
|
+
|
272
|
+
String prefix;
|
273
|
+
if (element.getNamespaceURI() != null
|
274
|
+
&& !(element.getPrefix() == null || element.getPrefix().length() == 0)) {
|
275
|
+
prefix = element.getPrefix();
|
276
|
+
} else {
|
277
|
+
prefix = XMLNS;
|
278
|
+
}
|
279
|
+
visiblyUtilized.add(prefix);
|
280
|
+
|
281
|
+
for (String s : visiblyUtilized) {
|
282
|
+
Attr key = ns.getMapping(s);
|
283
|
+
if (key != null) {
|
284
|
+
result.add(key);
|
291
285
|
}
|
292
|
-
|
286
|
+
}
|
293
287
|
}
|
294
|
-
|
288
|
+
|
289
|
+
return result.iterator();
|
290
|
+
}
|
291
|
+
|
292
|
+
/*
|
293
|
+
protected void circumventBugIfNeeded(XMLSignatureInput input)
|
294
|
+
throws CanonicalizationException, ParserConfigurationException,
|
295
|
+
IOException, SAXException {
|
296
|
+
if (!input.isNeedsToBeExpanded() || inclusiveNSSet.isEmpty() || inclusiveNSSet.isEmpty()) {
|
297
|
+
return;
|
298
|
+
}
|
299
|
+
Document doc = null;
|
300
|
+
if (input.getSubNode() != null) {
|
301
|
+
doc = XMLUtils.getOwnerDocument(input.getSubNode());
|
302
|
+
} else {
|
303
|
+
doc = XMLUtils.getOwnerDocument(input.getNodeSet());
|
304
|
+
}
|
305
|
+
XMLUtils.circumventBug2650(doc);
|
306
|
+
}
|
307
|
+
*/
|
295
308
|
}
|