class WsdlMapper::Deserializers::SaxDocument
Constants
- XSI_NS
- XSI_TYPE
Attributes
object[R]
Public Class Methods
new(base)
click to toggle source
@param [WsdlMapper::Deserializers::Deserializer] base
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 14 def initialize(base) @base = base @namespaces_stack = [] @buffer = '' @wrapper = nil @skipping = nil @current_frame = nil end
Public Instance Methods
cdata_block(text)
click to toggle source
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 95 def cdata_block(text) @buffer << text end
characters(text)
click to toggle source
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 91 def characters(text) @buffer << text end
end_document()
click to toggle source
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 87 def end_document @object = @last_frame.object end
end_element_namespace(name, _prefix = nil, uri = nil)
click to toggle source
@param [String] name @param [String] _prefix @param [String] uri
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 61 def end_element_namespace(name, _prefix = nil, uri = nil) @namespaces_stack.pop if @wrapper == Name.get(uri, name) @wrapper = nil return end if @skipping # Check if the sub-tree-to-skip is at its end # TODO: edge case of nested same-element if @skipping == Name.get(uri, name) @skipping = nil return end # If we are skipping this sub-tree, just return return end @current_frame.text = @buffer @buffer = '' @last_frame = @current_frame @current_frame = @current_frame.parent if @current_frame @current_frame.children << @last_frame end @last_frame.end end
start_element_namespace(name, attrs = [], _prefix = nil, uri = nil, ns = [])
click to toggle source
@param [String] name @param [Array<Nokogiri::XML::Attr>] attrs @param [String] _prefix @param [String] uri @param [Array<Array<String, String>>] ns
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 28 def start_element_namespace(name, attrs = [], _prefix = nil, uri = nil, ns = []) @buffer = '' if @skipping return end uri = inherit_element_namespace uri name = Name.get uri, name namespaces = Namespaces.for Hash[ns] @namespaces_stack << namespaces if @current_frame && @current_frame.mapping.wrapper?(name) @wrapper = name return end begin type_name = get_type_name name, attrs attrs = get_attributes type_name, attrs parent = @current_frame mapping = @base.get_type_mapping type_name @current_frame = Frame.new name, type_name, attrs, parent, namespaces, @base, mapping @current_frame.start rescue WsdlMapper::Deserializers::Errors::UnknownElementError => e if @base.skip_unknown_elements? @skipping = name return else raise e end end end
Protected Instance Methods
get_attributes(type_name, attrs)
click to toggle source
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 147 def get_attributes(type_name, attrs) attrs.map do |attr| uri = inherit_attr_namespace type_name, attr.uri name = Name.get uri, attr.localname [name, attr.value] end end
get_type_attr(attrs)
click to toggle source
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 123 def get_type_attr(attrs) attrs.find do |attr| attr.uri == XSI_TYPE.ns && attr.localname == XSI_TYPE.name end end
get_type_name(element_name, attrs)
click to toggle source
@param [WsdlMapper::Dom::Name] element_name @return [WsdlMapper::Dom::Name]
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 102 def get_type_name(element_name, attrs) if @current_frame type_attr = get_type_attr attrs if type_attr # TODO: test parse_name type_attr.value else @current_frame.mapping.get_type_name_for_prop element_name end else @base.get_element_type element_name end end
inherit_attr_namespace(type_name, ns)
click to toggle source
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 138 def inherit_attr_namespace(type_name, ns) # TODO: test if ns.nil? && !@base.qualified_attributes? && @current_frame type_name.ns else ns end end
inherit_element_namespace(ns)
click to toggle source
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 129 def inherit_element_namespace(ns) # TODO: test if ns.nil? && !@base.qualified_elements? && @current_frame @wrapper ? @wrapper.ns : @current_frame.type_name.ns else ns end end
parse_name(name_str)
click to toggle source
# File lib/wsdl_mapper/deserializers/sax_document.rb, line 116 def parse_name(name_str) name, ns_code = name_str.split(':').reverse ns = @namespaces_stack.reverse_each.map { |namespaces| namespaces[ns_code] }.find { |uri| !uri.nil? } Name.get ns, name end