lib/xml/util/xmlcanonicalizer.rb in canonix-0.1.1 vs lib/xml/util/xmlcanonicalizer.rb in canonix-0.1.2
- old
+ new
@@ -84,11 +84,11 @@
@uri = uri
end
end
class XmlCanonicalizer
- attr_accessor :prefix_list, :logger
+ attr_accessor :prefix_list, :logger, :inclusive_namespaces
BEFORE_DOC_ELEMENT = 0
INSIDE_DOC_ELEMENT = 1
AFTER_DOC_ELEMENT = 2
@@ -106,12 +106,10 @@
@state = BEFORE_DOC_ELEMENT
@xnl = Array.new()
@prevVisibleNamespacesStart = 0
@prevVisibleNamespacesEnd = 0
@visibleNamespaces = Array.new()
- @inclusive_namespaces = Array.new()
- @prefix_list = nil
end
def add_inclusive_namespaces(prefix_list, element, visible_namespaces)
namespaces = element.attributes()
namespaces.each_attribute{|ns|
@@ -130,11 +128,10 @@
write_document_node(document)
@res
end
def canonicalize_element(element, logging = true)
- @inclusive_namespaces = add_inclusive_namespaces(@prefix_list, element, @inclusive_namespaces) if (@prefix_list)
@preserve_document = element.document()
tmp_parent = element.parent()
body_string = remove_whitespace(element.to_s().gsub("\n","").gsub("\t","").gsub("\r",""))
document = Document.new(body_string)
tmp_parent.delete_element(element)
@@ -174,11 +171,11 @@
write_text_node(node, visible)
return
end
if (node.node_type() == :element)
write_element_node(node, visible) if (!node.rendered?())
- node.rendered=(true)
+ node.rendered=(true)
end
if (node.node_type() == :processing_instruction)
end
if (node.node_type() == :comment)
end
@@ -193,12 +190,12 @@
@res = @res + "<" + node.expanded_name() if (visible)
write_namespace_axis(node, visible)
write_attribute_axis(node)
@res = @res + ">" if (visible)
node.each_child{|child|
- write_node(child)
- }
+ write_node(child)
+ }
@res = @res + "</" +node.expanded_name() + ">" if (visible)
@state = AFTER_DOC_ELEMENT if (visible && state == BEFORE_DOC_ELEMENT)
@prevVisibleNamespacesStart = savedPrevVisibleNamespacesStart
@prevVisibleNamespacesEnd = savedPrevVisibleNamespacesEnd
@visibleNamespaces.slice!(savedVisibleNamespacesSize, @visibleNamespaces.size() - savedVisibleNamespacesSize) if (@visibleNamespaces.size() > savedVisibleNamespacesSize)
@@ -226,21 +223,18 @@
has_empty_namespace = true if (prefix == nil)
}
if (visible && !has_empty_namespace && !is_namespace_rendered(nil, nil))
@res = @res + ' xmlns=""'
end
- #TODO: ns of inclusive_list
-#=begin
- if ((@prefix_list) && (node.to_s() == node.parent().to_s()))
- #list.push(node.prefix())
- @inclusive_namespaces.each{|ns|
- prefix = ns.prefix().split(":")[1]
- list.push(prefix) if (!list.include?(prefix) && (!node.attributes.prefixes.include?(prefix)))
+
+ #: ns of inclusive_list
+ if self.inclusive_namespaces && !self.inclusive_namespaces.empty?
+ self.inclusive_namespaces.each{|prefix|
+ list.push(prefix) if (!list.include?(prefix) && (node.attributes.prefixes.include?(prefix)))
}
- @prefix_list = nil
end
-#=end
+
list.sort!()
list.each{|prefix|
next if (prefix == "")
ns = node.namespace(prefix)
ns = @preserve_element.namespace(prefix) if (ns == nil)
@@ -410,17 +404,17 @@
element = XPath.first(document, "/soap:Envelope/soap:Header/wsse:Security/Signature/SignedInfo")
result = c.canonicalize_element(element)
puts("-----")
puts(result)
puts("-----")
- puts(result.size())
+ puts(result.size())
puts("-----")
puts(CryptHash.new().digest_b64(result))
end
else
result = c.canonicalize(document)
end
-
+
file = File.new(ARGV[1], "wb")
file.write(result)
file.close()
-end
+end
\ No newline at end of file