Class: WsdlMapper::DomParsing::ComplexTypeParser
- Inherits:
-
ParserBase
show all
- Defined in:
- lib/wsdl_mapper/dom_parsing/complex_type_parser.rb
Constant Summary
Constants included
from Xsd
Xsd::ALL, Xsd::ANNOTATION, Xsd::ANY_ATTRIBUTE, Xsd::APPINFO, Xsd::ATTRIBUTE, Xsd::ATTRIBUTE_FORM_DEFAULT, Xsd::CHOICE, Xsd::COMPLEX_CONTENT, Xsd::COMPLEX_TYPE, Xsd::DEFAULT_BOUNDS, Xsd::DOCUMENTATION, Xsd::ELEMENT, Xsd::ELEMENT_FORM_DEFAULT, Xsd::ENUMERATION, Xsd::EXTENSION, Xsd::FRACTION_DIGITS, Xsd::IMPORT, Xsd::MAX_INCLUSIVE, Xsd::MAX_LENGTH, Xsd::MIN_INCLUSIVE, Xsd::MIN_LENGTH, Xsd::NS, Xsd::PATTERN, Xsd::RESTRICTION, Xsd::SCHEMA, Xsd::SEQUENCE, Xsd::SIMPLE_CONTENT, Xsd::SIMPLE_TYPE, Xsd::TOTAL_DIGITS, Xsd::UNIQUE
Parsing::Base::NS_DECL_PREFIX, Parsing::Base::TARGET_NS
Instance Attribute Summary
#log_msgs
Instance Method Summary
collapse
-
#parse(node) ⇒ Object
-
#parse_attribute(node, type) ⇒ Object
-
#parse_complex_content(node, type) ⇒ Object
-
#parse_complex_content_restriction(node, type) ⇒ Object
-
#parse_complex_type_all(node, type) ⇒ Object
-
#parse_complex_type_child(node, type) ⇒ Object
-
#parse_complex_type_choice(node, type) ⇒ Object
-
#parse_complex_type_property(node, type, i, container) ⇒ Object
-
#parse_complex_type_sequence(node, type) ⇒ Object
-
#parse_extension(node, type) ⇒ Object
-
#parse_extension_sequence(node, type) ⇒ Object
-
#parse_property_child(child, prop) ⇒ Object
-
#parse_simple_content(node, type) ⇒ Object
-
#parse_soap_array(node, type) ⇒ Object
-
#parse_soap_array_attribute(node, type) ⇒ Object
get_name, #initialize
#log_msg
Instance Method Details
#parse(node) ⇒ Object
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 12
def parse(node)
name = parse_name_in_attribute 'name', node
type = ComplexType.new name
each_element node do |child|
parse_complex_type_child child, type
end
@base.schema.add_type type
end
|
#parse_attribute(node, type) ⇒ Object
67
68
69
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 67
def parse_attribute(node, type)
@base.parsers[ATTRIBUTE].parse_attribute node, type
end
|
#parse_complex_content(node, type) ⇒ Object
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 89
def parse_complex_content(node, type)
child = first_element node
case get_name child
when EXTENSION
parse_extension child, type
when ANNOTATION
when RESTRICTION
parse_complex_content_restriction child, type
else
log_msg child, :unknown
end
end
|
#parse_complex_content_restriction(node, type) ⇒ Object
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 103
def parse_complex_content_restriction(node, type)
parse_base node, type
case type.base_type_name
when SoapEncodingType['Array'].name
parse_soap_array node, type
else
log_msg node, :unknown
end
end
|
#parse_complex_type_all(node, type) ⇒ Object
71
72
73
74
75
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 71
def parse_complex_type_all(node, type)
each_element node do |child|
parse_complex_type_property child, type, -1, ALL
end
end
|
#parse_complex_type_child(node, type) ⇒ Object
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 24
def parse_complex_type_child(node, type)
case get_name node
when SEQUENCE
parse_complex_type_sequence node, type
when CHOICE
parse_complex_type_choice node, type
when ALL
parse_complex_type_all node, type
when COMPLEX_CONTENT
parse_complex_content node, type
when SIMPLE_CONTENT
parse_simple_content node, type
when ANNOTATION
parse_annotation node, type
when ATTRIBUTE
parse_attribute node, type
when ANY_ATTRIBUTE
else
log_msg node, :unknown
end
end
|
#parse_complex_type_choice(node, type) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 47
def parse_complex_type_choice(node, type)
each_element node do |child|
case get_name child
when SEQUENCE
parse_complex_type_sequence child, type
when ALL
parse_complex_type_all child, type
when ELEMENT
parse_complex_type_property child, type, 0, ALL
else
log_msg child, :unknown
end
end
end
|
#parse_complex_type_property(node, type, i, container) ⇒ Object
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 167
def parse_complex_type_property(node, type, i, container)
name = parse_name_in_attribute 'name', node
type_name = parse_name_in_attribute 'type', node
ref = parse_name_in_attribute 'ref', node
bounds = parse_bounds node, container
options = {
sequence: i,
bounds: bounds,
default: fetch_attribute_value('default', node),
fixed: fetch_attribute_value('fixed', node),
form: fetch_attribute_value('form', node)
}
prop = if ref
Property::Ref.new ref, **options
else
Property.new name, type_name, **options
end
type.add_property prop
each_element node do |child|
parse_property_child child, prop
end
end
|
#parse_complex_type_sequence(node, type) ⇒ Object
156
157
158
159
160
161
162
163
164
165
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 156
def parse_complex_type_sequence(node, type)
i = 0
each_element node do |elm|
next unless name_matches? elm, ELEMENT
parse_complex_type_property elm, type, i, SEQUENCE
i += 1
end
end
|
#parse_extension(node, type) ⇒ Object
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 137
def parse_extension(node, type)
parse_base node, type
each_element node do |child|
case get_name child
when SEQUENCE
parse_extension_sequence child, type
when ATTRIBUTE
parse_attribute child, type
else
log_msg child, :unknown
end
end
end
|
#parse_extension_sequence(node, type) ⇒ Object
152
153
154
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 152
def parse_extension_sequence(node, type)
parse_complex_type_sequence node, type
end
|
#parse_property_child(child, prop) ⇒ Object
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 195
def parse_property_child(child, prop)
case get_name child
when ANNOTATION
parse_annotation child, prop
when COMPLEX_TYPE
prop.type = parse child
prop.type.containing_property = prop
when SIMPLE_TYPE
prop.type = @base.parsers[SIMPLE_TYPE].parse child
prop.type.containing_property = prop
when UNIQUE
else
log_msg child, :unknown
end
end
|
#parse_simple_content(node, type) ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 77
def parse_simple_content(node, type)
type.simple_content = true
each_element node do |child|
case get_name child
when EXTENSION
parse_extension child, type
else
log_msg node, :unknown
end
end
end
|
#parse_soap_array(node, type) ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 114
def parse_soap_array(node, type)
type.soap_array = true
each_element node do |child|
case get_name child
when ATTRIBUTE
parse_soap_array_attribute child, type
else
log_msg child, :unknown
end
end
end
|
#parse_soap_array_attribute(node, type) ⇒ Object
126
127
128
129
130
131
132
133
134
135
|
# File 'lib/wsdl_mapper/dom_parsing/complex_type_parser.rb', line 126
def parse_soap_array_attribute(node, type)
ref = parse_name_in_attribute 'ref', node
if ref != SoapEncodingType['arrayType'].name
raise StandardError.new("Invalid ref attribute for SOAP array node: #{ref}")
end
type_name = parse_name node.attribute_with_ns(WsdlMapper::SvcDescParsing::Wsdl11::ARRAY_TYPE.name, WsdlMapper::SvcDescParsing::Wsdl11::ARRAY_TYPE.ns).value, node
type.soap_array_type_name = Name.get type_name.ns, type_name.name[0..-3]
end
|