soap-lc 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +1 -0
- data/COPYING +340 -0
- data/README +50 -0
- data/lib/soap/lc.rb +43 -0
- data/lib/soap/lc/error.rb +19 -0
- data/lib/soap/lc/request.rb +155 -0
- data/lib/soap/lc/response.rb +31 -0
- data/lib/soap/lc/wsdl.rb +42 -0
- data/lib/soap/lc/wsdl/binding.rb +160 -0
- data/lib/soap/lc/wsdl/message.rb +44 -0
- data/lib/soap/lc/wsdl/parser.rb +109 -0
- data/lib/soap/lc/wsdl/portType.rb +86 -0
- data/lib/soap/lc/wsdl/service.rb +56 -0
- data/lib/soap/lc/xsd.rb +518 -0
- data/setup.rb +1585 -0
- metadata +95 -0
@@ -0,0 +1,155 @@
|
|
1
|
+
require 'soap/lc/response'
|
2
|
+
|
3
|
+
module SOAP
|
4
|
+
class Request
|
5
|
+
def initialize( wsdl ) #:nodoc:
|
6
|
+
@wsdl = wsdl
|
7
|
+
@request = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
# Call a method for the current Request and get a SOAP::Response
|
11
|
+
#
|
12
|
+
# Example:
|
13
|
+
# wsdl = SOAP::LC.new( ).wsdl( "http://..." )
|
14
|
+
# request = wsdl.request( )
|
15
|
+
# response = request.myMethod( :param1 => "hello" )
|
16
|
+
# # => #<SOAP::Response:0xNNNNNN>
|
17
|
+
def method_missing( id, *args )
|
18
|
+
call( id.id2name, args[0] )
|
19
|
+
end
|
20
|
+
|
21
|
+
# Call a method for the current Request and get a SOAP::Response
|
22
|
+
#
|
23
|
+
# Example:
|
24
|
+
# wsdl = SOAP::LC.new( ).wsdl( "http://..." )
|
25
|
+
# request = wsdl.request( )
|
26
|
+
# response = request.call( "myMethod", :param1 => "hello" )
|
27
|
+
# # => #<SOAP::Response:0xNNNNNN>
|
28
|
+
def call( methodName, args )
|
29
|
+
args = (args || {}).keys_to_sym!
|
30
|
+
|
31
|
+
# Get Binding
|
32
|
+
binding = @wsdl.bindings.getBindingForOperationName( methodName )
|
33
|
+
raise SOAP::LCNoMethodError, "Undefined method `#{methodName}'" if binding.nil?
|
34
|
+
|
35
|
+
# Get Binding Operation
|
36
|
+
binding_operation = binding.operations[methodName]
|
37
|
+
|
38
|
+
# Get PortType
|
39
|
+
portType = @wsdl.portTypes[binding.type.nns]
|
40
|
+
portType_operation = portType.operations[methodName]
|
41
|
+
|
42
|
+
# Get message for input operation
|
43
|
+
input_message = @wsdl.messages[portType_operation[:input][:message].nns]
|
44
|
+
|
45
|
+
# Create method
|
46
|
+
soap_method = "<#{methodName} xmlns=\"#{@wsdl.targetNamespace}\">\n"
|
47
|
+
input_message.parts.each do |_, attrs|
|
48
|
+
|
49
|
+
case attrs[:mode]
|
50
|
+
when :type
|
51
|
+
if SOAP::XSD::ANY_SIMPLE_TYPE.include?( attrs[attrs[:mode]].nns )
|
52
|
+
# Part refer to a builtin SimpleType
|
53
|
+
soap_method << SOAP::XSD.displayBuiltinType( attrs[:name], args, 1, 1 )
|
54
|
+
else
|
55
|
+
# Part refer to an XSD simpleType or complexType defined in types
|
56
|
+
element = @wsdl.types[attrs[attrs[:mode]].nns][:value]
|
57
|
+
case element[:type]
|
58
|
+
when :simpleType
|
59
|
+
soap_method << "<#{attrs[:name]}>\n#{element.display( @wsdl.types, args )}\n</#{attrs[:name]}>\n" # MAYBE ##########
|
60
|
+
when :complexType
|
61
|
+
soap_method << "<#{attrs[:name]}>\n#{element.display( @wsdl.types, args )}\n</#{attrs[:name]}>\n" # MAYBE ##########
|
62
|
+
else
|
63
|
+
raise SOAP::LCWSDLError, "Malformated part #{attrs[:name]}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
when :element
|
67
|
+
# Part refer to an XSD element
|
68
|
+
element = @wsdl.types[attrs[attrs[:mode]].nns][:value]
|
69
|
+
case element[:type]
|
70
|
+
when :simpleType
|
71
|
+
soap_method << element[element[:type]].display( @wsdl.types, args )
|
72
|
+
when :complexType
|
73
|
+
soap_method << element[element[:type]].display( @wsdl.types, args )
|
74
|
+
else
|
75
|
+
raise SOAL::LCWSDLError, "Malformated element `#{attrs[attrs[:mode]]}'"
|
76
|
+
end
|
77
|
+
|
78
|
+
## TODO ---------- USE element[:key]
|
79
|
+
else
|
80
|
+
raise SOAP::LCWSDLError, "Malformated part #{attrs[:name]}"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
soap_method += "</#{methodName}>\n"
|
84
|
+
|
85
|
+
# Create SOAP Envelope
|
86
|
+
envelope = soap_envelop do
|
87
|
+
soap_header + soap_body( soap_method )
|
88
|
+
end
|
89
|
+
|
90
|
+
# Create headers
|
91
|
+
headers = {
|
92
|
+
'Content-Type' => 'application/soap+xml; charset=utf-8',
|
93
|
+
'Content-Length' => "#{envelope.length}"
|
94
|
+
}
|
95
|
+
# Add SOAPAction to headers (if exist)
|
96
|
+
action = begin
|
97
|
+
binding_operation[:soapAction]
|
98
|
+
rescue
|
99
|
+
nil
|
100
|
+
end
|
101
|
+
headers['SOAPAction'] = action unless action.nil? or action.length == 0
|
102
|
+
|
103
|
+
# Search URI
|
104
|
+
service_port = @wsdl.services.getServicePortForBindingName( binding.name )
|
105
|
+
address = service_port[:address]
|
106
|
+
|
107
|
+
# Complete request
|
108
|
+
@request = {
|
109
|
+
:headers => headers,
|
110
|
+
:envelope => envelope,
|
111
|
+
:uri => address,
|
112
|
+
:response => @wsdl.messages[portType_operation[:output][:message].nns].name
|
113
|
+
}
|
114
|
+
|
115
|
+
return self
|
116
|
+
end
|
117
|
+
|
118
|
+
# Get the SOAP Body for the request
|
119
|
+
def soap_body( soap_method )
|
120
|
+
"<SOAP-ENV:Body>\n" + soap_method + "</SOAP-ENV:Body>\n"
|
121
|
+
end
|
122
|
+
|
123
|
+
# Send request to the server and get a response (SOAP::Response)
|
124
|
+
def response( )
|
125
|
+
return( SOAP::Response.new( @request ) )
|
126
|
+
end
|
127
|
+
alias_method :result, :response
|
128
|
+
|
129
|
+
# Get the SOAP Envelope for the request
|
130
|
+
def envelope( )
|
131
|
+
@request[:envelope] || nil
|
132
|
+
end
|
133
|
+
|
134
|
+
# Get request headers
|
135
|
+
def headers( )
|
136
|
+
@request[:headers] || nil
|
137
|
+
end
|
138
|
+
|
139
|
+
private
|
140
|
+
def soap_envelop( &b )
|
141
|
+
"<SOAP-ENV:Envelope
|
142
|
+
xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"
|
143
|
+
xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\"
|
144
|
+
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
|
145
|
+
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
|
146
|
+
SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n" +
|
147
|
+
yield() +
|
148
|
+
'</SOAP-ENV:Envelope>'
|
149
|
+
end
|
150
|
+
|
151
|
+
def soap_header()
|
152
|
+
"<SOAP-ENV:Header/>\n"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'active_support'
|
3
|
+
|
4
|
+
module SOAP
|
5
|
+
class Response
|
6
|
+
# XML response
|
7
|
+
attr_reader :to_xml
|
8
|
+
# Hash response
|
9
|
+
attr_reader :to_h
|
10
|
+
|
11
|
+
def initialize( request ) #:nodoc:
|
12
|
+
url = URI.parse( request[:uri] )
|
13
|
+
@soap_response = Net::HTTP.new( url.host, url.port ).start { |http|
|
14
|
+
http.post( url.request_uri, request[:envelope], request[:headers] )
|
15
|
+
}
|
16
|
+
|
17
|
+
@to_xml = @soap_response.body
|
18
|
+
@to_h = Hash.from_xml( @soap_response.body )["Envelope"]["Body"][request[:response]]
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return SOAP error
|
22
|
+
def error
|
23
|
+
@soap_response.error!
|
24
|
+
end
|
25
|
+
|
26
|
+
def method_missing( id, *args ) #:nodoc:
|
27
|
+
puts id.id2name
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
data/lib/soap/lc/wsdl.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'soap/lc/wsdl/parser'
|
2
|
+
require 'soap/lc/request'
|
3
|
+
|
4
|
+
module SOAP
|
5
|
+
class WSDL
|
6
|
+
attr_reader :parse
|
7
|
+
|
8
|
+
def initialize( uri ) #:nodoc:
|
9
|
+
@parse = SOAP::WSDL::Parser.new( uri )
|
10
|
+
end
|
11
|
+
|
12
|
+
# Call a method for the current WSDL and get the corresponding SOAP::Request
|
13
|
+
#
|
14
|
+
# Example:
|
15
|
+
# wsdl = SOAP::LC.new( ).wsdl( "http://..." )
|
16
|
+
# request = wsdl.myMethod( :param1 => "hello" )
|
17
|
+
# # => #<SOAP::Request:0xNNNNNN>
|
18
|
+
def method_missing( id, *args )
|
19
|
+
return request.call( id.id2name, args[0] )
|
20
|
+
end
|
21
|
+
|
22
|
+
# Call a method for the current WSDL and get the corresponding SOAP::Request
|
23
|
+
#
|
24
|
+
# Example:
|
25
|
+
# wsdl = SOAP::LC.new( ).wsdl( "http://..." )
|
26
|
+
# request = wsdl.call( "myMethod", { :param1 => "hello" } )
|
27
|
+
# # => #<SOAP::Request:0xNNNNNN>
|
28
|
+
def call( name, args )
|
29
|
+
return request.call( name, args )
|
30
|
+
end
|
31
|
+
|
32
|
+
# Get a SOAP::Request object for the current WSDL
|
33
|
+
#
|
34
|
+
# Example:
|
35
|
+
# wsdl = SOAP::LC.new( ).wsdl( "http://..." )
|
36
|
+
# request = wsdl.request( )
|
37
|
+
# # => #<SOAP::Request:0xNNNNNN>
|
38
|
+
def request( )
|
39
|
+
return SOAP::Request.new( @parse )
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
module SOAP
|
2
|
+
class WSDL
|
3
|
+
class Bindings < Hash
|
4
|
+
def getBindingForOperationName( name )
|
5
|
+
self.each do |binding_name, binding|
|
6
|
+
return binding if binding.operations.keys.include?(name)
|
7
|
+
end
|
8
|
+
return nil
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Binding
|
13
|
+
attr_reader :operations
|
14
|
+
attr_reader :name
|
15
|
+
attr_reader :type
|
16
|
+
attr_reader :style
|
17
|
+
attr_reader :transport
|
18
|
+
|
19
|
+
def initialize( element )
|
20
|
+
@operations = Hash.new
|
21
|
+
@name = element.attributes['name']
|
22
|
+
@type = element.attributes['type'] # because of Object#type
|
23
|
+
@style = nil
|
24
|
+
@transport = nil
|
25
|
+
|
26
|
+
# Process all binding and operation
|
27
|
+
element.find_all {|e| e.class == REXML::Element }.each { |operation|
|
28
|
+
case operation.name
|
29
|
+
when "binding"
|
30
|
+
# Get binding attributs
|
31
|
+
operation.attributes.each { |name, value|
|
32
|
+
case name
|
33
|
+
when 'style'
|
34
|
+
@style = value
|
35
|
+
when 'transport'
|
36
|
+
@transport = value
|
37
|
+
else
|
38
|
+
warn "Ignoring attribut `#{name}' for wsdlsoap:binding in binding `#{element.attributes['name']}'"
|
39
|
+
end
|
40
|
+
}
|
41
|
+
when "operation"
|
42
|
+
# Store operations
|
43
|
+
@operations[operation.attributes['name']] = Hash.new()
|
44
|
+
|
45
|
+
# Get operation attributs
|
46
|
+
operation.attributes.each { |name, value|
|
47
|
+
case name
|
48
|
+
when 'name'
|
49
|
+
@operations[operation.attributes['name']][:name] = value
|
50
|
+
else
|
51
|
+
warn "Ignoring attribut `#{name}' for operation `#{operation.attributes['name']}' in binding `#{element.attributes['name']}'"
|
52
|
+
end
|
53
|
+
}
|
54
|
+
|
55
|
+
# Store operation input, output, fault and operation
|
56
|
+
operation.find_all {|e| e.class == REXML::Element }.each { |action|
|
57
|
+
case action.name
|
58
|
+
when "operation"
|
59
|
+
# Get operation attributs
|
60
|
+
action.attributes.each { |name, value|
|
61
|
+
case name
|
62
|
+
when 'soapAction'
|
63
|
+
@operations[operation.attributes['name']][:soapAction] = value
|
64
|
+
else
|
65
|
+
warn "Ignoring attribut `#{name}' for wsdlsoap:operation in operation `#{operation.attributes['name']}' in binding `#{element.attributes['name']}'"
|
66
|
+
end
|
67
|
+
}
|
68
|
+
when "input"
|
69
|
+
@operations[operation.attributes['name']][:input] = Hash.new
|
70
|
+
|
71
|
+
# Store input attributs
|
72
|
+
action.attributes.each { |name, value|
|
73
|
+
case name
|
74
|
+
when 'name'
|
75
|
+
@operations[operation.attributes['name']][:input][:name] = value
|
76
|
+
else
|
77
|
+
warn "Ignoring attribut `#{name}' in #{action.name} `#{action.attributes['name']}' in operation `#{operation.attributes['name']}' for binding `#{element.attributes['name']}'"
|
78
|
+
end
|
79
|
+
}
|
80
|
+
|
81
|
+
# Store body
|
82
|
+
action.find_all {|e| e.class == REXML::Element }.each { |body|
|
83
|
+
case body.name
|
84
|
+
when "body"
|
85
|
+
@operations[operation.attributes['name']][:input][:body] = Hash.new
|
86
|
+
|
87
|
+
# Store body attributes
|
88
|
+
body.attributes.each { |name, value|
|
89
|
+
@operations[operation.attributes['name']][:input][:body][name.to_sym] = value
|
90
|
+
}
|
91
|
+
else
|
92
|
+
warn "Ignoring element `#{body.name}' in #{action.name} `#{action.attributes['name']}' in operation `#{operation.attributes['name']}' for binding `#{element.attributes['name']}'"
|
93
|
+
end
|
94
|
+
}
|
95
|
+
when "output"
|
96
|
+
@operations[operation.attributes['name']][:output] = Hash.new
|
97
|
+
|
98
|
+
# Store input attributs
|
99
|
+
action.attributes.each { |name, value|
|
100
|
+
case name
|
101
|
+
when 'name'
|
102
|
+
@operations[operation.attributes['name']][:output][:name] = value
|
103
|
+
else
|
104
|
+
warn "Ignoring attribut `#{name}' in #{action.name} `#{action.attributes['name']}' in operation `#{operation.attributes['name']}' for binding `#{element.attributes['name']}'"
|
105
|
+
end
|
106
|
+
}
|
107
|
+
|
108
|
+
# Store body
|
109
|
+
action.find_all {|e| e.class == REXML::Element }.each { |body|
|
110
|
+
case body.name
|
111
|
+
when "body"
|
112
|
+
@operations[operation.attributes['name']][:output][:body] = Hash.new
|
113
|
+
|
114
|
+
# Store body attributes
|
115
|
+
body.attributes.each { |name, value|
|
116
|
+
@operations[operation.attributes['name']][:output][:body][name.to_sym] = value
|
117
|
+
}
|
118
|
+
else
|
119
|
+
warn "Ignoring element `#{body.name}' in #{action.name} `#{action.attributes['name']}' in operation `#{operation.attributes['name']}' for binding `#{element.attributes['name']}'"
|
120
|
+
end
|
121
|
+
}
|
122
|
+
when "fault"
|
123
|
+
@operations[operation.attributes['name']][:fault] = Hash.new
|
124
|
+
|
125
|
+
# Store input attributs
|
126
|
+
action.attributes.each { |name, value|
|
127
|
+
case name
|
128
|
+
when 'name'
|
129
|
+
@operations[operation.attributes['name']][:fault][:name] = value
|
130
|
+
else
|
131
|
+
warn "Ignoring attribut `#{name}' in #{action.name} `#{action.attributes['name']}' in operation `#{operation.attributes['name']}' for binding `#{element.attributes['name']}'"
|
132
|
+
end
|
133
|
+
}
|
134
|
+
|
135
|
+
# Store body
|
136
|
+
action.find_all {|e| e.class == REXML::Element }.each { |body|
|
137
|
+
case body.name
|
138
|
+
when "body"
|
139
|
+
@operations[operation.attributes['name']][:fault][:body] = Hash.new
|
140
|
+
|
141
|
+
# Store body attributes
|
142
|
+
body.attributes.each { |name, value|
|
143
|
+
@operations[operation.attributes['name']][:fault][:body][name.to_sym] = value
|
144
|
+
}
|
145
|
+
else
|
146
|
+
warn "Ignoring element `#{body.name}' in #{action.name} `#{action.attributes['name']}' in operation `#{operation.attributes['name']}' for binding `#{element.attributes['name']}'"
|
147
|
+
end
|
148
|
+
}
|
149
|
+
else
|
150
|
+
warn "Ignoring element `#{action.name}' in operation `#{operation.attributes['name']}' for binding `#{element.attributes['name']}'"
|
151
|
+
end
|
152
|
+
}
|
153
|
+
else
|
154
|
+
warn "Ignoring element `#{operation.name}' in binding `#{element.attributes['name']}'"
|
155
|
+
end
|
156
|
+
}
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'soap/lc/error'
|
2
|
+
|
3
|
+
module SOAP
|
4
|
+
class WSDL
|
5
|
+
class Messages < Hash
|
6
|
+
end
|
7
|
+
|
8
|
+
class Message
|
9
|
+
attr_reader :parts
|
10
|
+
attr_reader :name
|
11
|
+
|
12
|
+
def initialize( element )
|
13
|
+
@parts = Hash.new
|
14
|
+
@name = element.attributes['name']
|
15
|
+
|
16
|
+
# Process all parts
|
17
|
+
element.find_all {|e| e.class == REXML::Element }.each { |part|
|
18
|
+
case part.name
|
19
|
+
when "part"
|
20
|
+
@parts[part.attributes['name']] = Hash.new
|
21
|
+
|
22
|
+
# Store part attributs
|
23
|
+
part.attributes.each { |name, value|
|
24
|
+
case name
|
25
|
+
when 'name'
|
26
|
+
@parts[part.attributes['name']][:name] = value
|
27
|
+
when 'element'
|
28
|
+
@parts[part.attributes['name']][:element] = value
|
29
|
+
@parts[part.attributes['name']][:mode] = :element
|
30
|
+
when 'type'
|
31
|
+
@parts[part.attributes['name']][:type] = value
|
32
|
+
@parts[part.attributes['name']][:mode] = :type
|
33
|
+
else
|
34
|
+
warn "Ignoring attribut `#{name}' in part `#{part.attributes['name']}' for message `#{element.attributes['name']}'"
|
35
|
+
end
|
36
|
+
}
|
37
|
+
else
|
38
|
+
warn "Ignoring element `#{part.name}' in message `#{element.attributes['name']}'"
|
39
|
+
end
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'rexml/document'
|
3
|
+
|
4
|
+
require 'soap/lc/error'
|
5
|
+
require 'soap/lc/wsdl/message'
|
6
|
+
require 'soap/lc/wsdl/portType'
|
7
|
+
require 'soap/lc/wsdl/binding'
|
8
|
+
require 'soap/lc/wsdl/service'
|
9
|
+
require 'soap/lc/xsd'
|
10
|
+
|
11
|
+
module SOAP
|
12
|
+
class WSDL
|
13
|
+
class Parser
|
14
|
+
attr_reader :types
|
15
|
+
attr_reader :messages
|
16
|
+
attr_reader :portTypes
|
17
|
+
attr_reader :bindings
|
18
|
+
attr_reader :services
|
19
|
+
|
20
|
+
attr_reader :prefixes
|
21
|
+
attr_reader :targetNamespace
|
22
|
+
|
23
|
+
attr_reader :document
|
24
|
+
|
25
|
+
def initialize( uri )
|
26
|
+
@types = SOAP::XSD.new()
|
27
|
+
@messages = SOAP::WSDL::Messages.new
|
28
|
+
@portTypes = SOAP::WSDL::PortTypes.new
|
29
|
+
@bindings = SOAP::WSDL::Bindings.new
|
30
|
+
@services = SOAP::WSDL::Services.new
|
31
|
+
|
32
|
+
@prefixes = Hash.new
|
33
|
+
@targetNamespace = ""
|
34
|
+
|
35
|
+
# Get WSDL
|
36
|
+
source = nil
|
37
|
+
begin
|
38
|
+
open( uri ) do |f|
|
39
|
+
source = f.read
|
40
|
+
end
|
41
|
+
rescue Errno::ECONNREFUSED, Errno::ENOENT, OpenURI::HTTPError => e
|
42
|
+
raise SOAP::LCError, "Can't open '#{uri}' : #{e.message}"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Parse WSDL content
|
46
|
+
@document = REXML::Document.new( source )
|
47
|
+
|
48
|
+
processAttributes @document.root.attributes
|
49
|
+
processContent @document.root.children
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def processAttributes( attributes )
|
54
|
+
@targetNamespace = attributes["targetNamespace"]
|
55
|
+
attributes.values.each{ |attribute|
|
56
|
+
if attribute.prefix == "xmlns" then
|
57
|
+
@prefixes[attribute.name] = attribute.value
|
58
|
+
end
|
59
|
+
}
|
60
|
+
if(default_namespace = attributes["xmlns"]) then
|
61
|
+
@prefixes["__default__"] = default_namespace
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def processContent( elements )
|
66
|
+
elements.find_all {|e| e.class == REXML::Element }.each { |element|
|
67
|
+
case element.name
|
68
|
+
when "types"
|
69
|
+
processTypes( element )
|
70
|
+
when "message"
|
71
|
+
processMessage( element )
|
72
|
+
when "portType"
|
73
|
+
processPortType( element )
|
74
|
+
when "binding"
|
75
|
+
processBinding( element )
|
76
|
+
when "service"
|
77
|
+
processService( element )
|
78
|
+
else
|
79
|
+
warn "Ignoring #{element}"
|
80
|
+
end
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
def processTypes( element )
|
85
|
+
@types.add_schema( element )
|
86
|
+
end
|
87
|
+
|
88
|
+
def processMessage( element )
|
89
|
+
name = element.attributes['name']
|
90
|
+
@messages[name] = SOAP::WSDL::Message.new( element )
|
91
|
+
end
|
92
|
+
|
93
|
+
def processPortType( element )
|
94
|
+
name = element.attributes['name']
|
95
|
+
@portTypes[name] = SOAP::WSDL::PortType.new( element )
|
96
|
+
end
|
97
|
+
|
98
|
+
def processBinding( element )
|
99
|
+
name = element.attributes['name']
|
100
|
+
@bindings[name] = SOAP::WSDL::Binding.new( element )
|
101
|
+
end
|
102
|
+
|
103
|
+
def processService( element )
|
104
|
+
name = element.attributes['name']
|
105
|
+
@services[name] = SOAP::WSDL::Service.new( element )
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|