Class WSDL::Parser
In: lib/wsdl/parser.rb
Parent: Object

Methods

Included Modules

WSDL

Classes and Modules

Class WSDL::Parser::AttributeConstraintError
Class WSDL::Parser::ElementConstraintError
Class WSDL::Parser::FormatDecodeError
Class WSDL::Parser::ParseError
Class WSDL::Parser::ParseFrame
Class WSDL::Parser::UnexpectedElementError
Class WSDL::Parser::UnknownAttributeError
Class WSDL::Parser::UnknownElementError

Public Class methods

[Source]

    # File lib/wsdl/parser.rb, line 52
52:   def initialize(opt = {})
53:     @parser = XSD::XMLParser.create_parser(self, opt)
54:     @parsestack = nil
55:     @lastnode = nil
56:     @ignored = {}
57:     @location = opt[:location]
58:     @originalroot = opt[:originalroot]
59:   end

Public Instance methods

[Source]

    # File lib/wsdl/parser.rb, line 88
88:   def characters(text)
89:     lastframe = @parsestack.last
90:     if lastframe
91:       # Need not to be cloned because character does not have attr.
92:       ns = lastframe.ns
93:       decode_text(ns, text)
94:     else
95:       p text if $DEBUG
96:     end
97:   end

[Source]

    # File lib/wsdl/parser.rb, line 69
69:   def charset
70:     @parser.charset
71:   end

[Source]

     # File lib/wsdl/parser.rb, line 99
 99:   def end_element(name)
100:     lastframe = @parsestack.pop
101:     unless name == lastframe.name
102:       raise UnexpectedElementError.new("closing element name '#{name}' does not match with opening element '#{lastframe.name}'")
103:     end
104:     decode_tag_end(lastframe.ns, lastframe.node)
105:     @lastnode = lastframe.node
106:   end

[Source]

    # File lib/wsdl/parser.rb, line 61
61:   def parse(string_or_readable)
62:     @parsestack = []
63:     @lastnode = nil
64:     @textbuf = ''
65:     @parser.do_parse(string_or_readable)
66:     @lastnode
67:   end

[Source]

    # File lib/wsdl/parser.rb, line 73
73:   def start_element(name, attrs)
74:     lastframe = @parsestack.last
75:     ns = parent = nil
76:     if lastframe
77:       ns = lastframe.ns.clone_ns
78:       parent = lastframe.node
79:     else
80:       ns = XSD::NS.new
81:       parent = nil
82:     end
83:     attrs = XSD::XMLParser.filter_ns(ns, attrs)
84:     node = decode_tag(ns, name, attrs, parent)
85:     @parsestack << ParseFrame.new(ns, name, node)
86:   end

Private Instance methods

[Source]

     # File lib/wsdl/parser.rb, line 110
110:   def decode_tag(ns, name, attrs, parent)
111:     o = nil
112:     elename = ns.parse(name)
113:     if !parent
114:       if elename == DefinitionsName
115:         o = Definitions.parse_element(elename)
116:         o.location = @location
117:       else
118:         raise UnknownElementError.new("unknown element: #{elename}")
119:       end
120:       o.root = @originalroot if @originalroot   # o.root = o otherwise
121:     else
122:       if elename == XMLSchema::AnnotationName
123:         # only the first annotation element is allowed for each xsd element.
124:         o = XMLSchema::Annotation.new
125:       else
126:         o = parent.parse_element(elename)
127:       end
128:       unless o
129:         unless @ignored.key?(elename)
130:           warn("ignored element: #{elename}")
131:           @ignored[elename] = elename
132:         end
133:         o = Documentation.new  # which accepts any element.
134:       end
135:       # node could be a pseudo element.  pseudo element has its own parent.
136:       o.root = parent.root
137:       o.parent = parent if o.parent.nil?
138:     end
139:     attrs.each do |key, value|
140:       attr_ele = ns.parse(key, true)
141:       value_ele = ns.parse(value, true)
142:       value_ele.source = value  # for recovery; value may not be a QName
143:       unless o.parse_attr(attr_ele, value_ele)
144:         unless @ignored.key?(attr_ele)
145:           warn("ignored attr: #{attr_ele}")
146:           @ignored[attr_ele] = attr_ele
147:         end
148:       end
149:     end
150:     o
151:   end

[Source]

     # File lib/wsdl/parser.rb, line 153
153:   def decode_tag_end(ns, node)
154:     node.parse_epilogue
155:   end

[Source]

     # File lib/wsdl/parser.rb, line 157
157:   def decode_text(ns, text)
158:     @textbuf << text
159:   end

[Validate]