soaspec 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +15 -15
- data/.gitlab-ci.yml +31 -31
- data/.rspec +3 -3
- data/.rubocop.yml +2 -2
- data/CODE_OF_CONDUCT.md +74 -74
- data/ChangeLog +384 -384
- data/Gemfile +6 -6
- data/LICENSE.txt +21 -21
- data/README.md +85 -85
- data/Rakefile +24 -24
- data/Todo.md +6 -6
- data/exe/soaspec +119 -119
- data/exe/soaspec-virtual-server +103 -103
- data/exe/xml_to_yaml_file +60 -60
- data/lib/soaspec.rb +91 -91
- data/lib/soaspec/core_ext/hash.rb +83 -83
- data/lib/soaspec/exchange.rb +234 -234
- data/lib/soaspec/exchange_handlers/exchange_handler.rb +103 -103
- data/lib/soaspec/exchange_handlers/handler_accessors.rb +106 -106
- data/lib/soaspec/exchange_handlers/rest_accessors.rb +92 -92
- data/lib/soaspec/exchange_handlers/rest_handler.rb +311 -311
- data/lib/soaspec/exchange_handlers/rest_methods.rb +44 -44
- data/lib/soaspec/exchange_handlers/soap_handler.rb +236 -236
- data/lib/soaspec/exe_helpers.rb +56 -56
- data/lib/soaspec/generator/.rspec.erb +5 -5
- data/lib/soaspec/generator/.travis.yml.erb +5 -5
- data/lib/soaspec/generator/Gemfile.erb +8 -8
- data/lib/soaspec/generator/README.md.erb +29 -29
- data/lib/soaspec/generator/Rakefile.erb +19 -19
- data/lib/soaspec/generator/config/data/default.yml.erb +1 -1
- data/lib/soaspec/generator/lib/blz_service.rb.erb +26 -26
- data/lib/soaspec/generator/lib/dynamic_class_content.rb.erb +12 -12
- data/lib/soaspec/generator/lib/shared_example.rb.erb +8 -8
- data/lib/soaspec/generator/spec/dynamic_soap_spec.rb.erb +12 -12
- data/lib/soaspec/generator/spec/soap_spec.rb.erb +51 -51
- data/lib/soaspec/generator/spec/spec_helper.rb.erb +20 -20
- data/lib/soaspec/generator/template/soap_template.xml +6 -6
- data/lib/soaspec/interpreter.rb +40 -40
- data/lib/soaspec/matchers.rb +65 -65
- data/lib/soaspec/not_found_errors.rb +13 -13
- data/lib/soaspec/soaspec_shared_examples.rb +24 -24
- data/lib/soaspec/spec_logger.rb +27 -27
- data/lib/soaspec/test_server/bank.wsdl +90 -90
- data/lib/soaspec/test_server/get_bank.rb +160 -160
- data/lib/soaspec/test_server/invoices.rb +27 -27
- data/lib/soaspec/test_server/namespace.xml +14 -14
- data/lib/soaspec/test_server/note.xml +5 -5
- data/lib/soaspec/test_server/puppy_service.rb +20 -20
- data/lib/soaspec/test_server/test_attribute.rb +13 -13
- data/lib/soaspec/version.rb +2 -2
- data/lib/soaspec/wsdl_generator.rb +144 -144
- data/soaspec.gemspec +46 -45
- data/test.wsdl +116 -116
- data/test.xml +10 -10
- data/test_wsdl.rb +43 -43
- metadata +17 -3
@@ -1,13 +1,13 @@
|
|
1
|
-
|
2
|
-
module Soaspec
|
3
|
-
module TestServer
|
4
|
-
# Helps tests attribute methods
|
5
|
-
class TestAttribute
|
6
|
-
class << self
|
7
|
-
def note
|
8
|
-
File.read(File.join(File.dirname(__FILE__), 'note.xml'))
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
1
|
+
|
2
|
+
module Soaspec
|
3
|
+
module TestServer
|
4
|
+
# Helps tests attribute methods
|
5
|
+
class TestAttribute
|
6
|
+
class << self
|
7
|
+
def note
|
8
|
+
File.read(File.join(File.dirname(__FILE__), 'note.xml'))
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/soaspec/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module Soaspec
|
2
|
-
VERSION = '0.1.
|
1
|
+
module Soaspec
|
2
|
+
VERSION = '0.1.2'.freeze
|
3
3
|
end
|
@@ -1,145 +1,145 @@
|
|
1
|
-
|
2
|
-
module Soaspec
|
3
|
-
module WsdlGenerator
|
4
|
-
# Attempt to calculate values of enumeration by looking up type in Schema
|
5
|
-
def try_enum_for(type)
|
6
|
-
raise "'@wsdl_schemas' must be defined" if @wsdl_schemas.nil?
|
7
|
-
custom_type = @wsdl_schemas.xpath("//*[@name='#{type}']")
|
8
|
-
if enumeration? custom_type
|
9
|
-
prefix = custom_type.first.namespace.prefix
|
10
|
-
enumerations = custom_type.xpath("//#{prefix}:enumeration")
|
11
|
-
return 'Custom Type' if enumerations.empty?
|
12
|
-
@enums_values = []
|
13
|
-
enumerations.each { |enum_value| @enums_values << "'#{enum_value['value']}'" }
|
14
|
-
"~randomize [#{@enums_values.join(', ')}]"
|
15
|
-
else
|
16
|
-
'Custom Type'
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# @param [Nokogiri::XML::NodeSet]
|
21
|
-
# @return [Boolean] Whether WSDL type is an enumeration
|
22
|
-
def enumeration?(type)
|
23
|
-
return false unless type.first
|
24
|
-
!type.xpath("*/#{type.first.namespace.prefix}:enumeration").empty?
|
25
|
-
end
|
26
|
-
|
27
|
-
# Return value of string after a namespace
|
28
|
-
# @param [String] string String to parse for part after namespace
|
29
|
-
def value_after_namespace(string)
|
30
|
-
string.split(':').last
|
31
|
-
end
|
32
|
-
|
33
|
-
# Based on WSDL type return a valid value
|
34
|
-
# @param [String] type Type without the WSDL
|
35
|
-
def fill_in_field_from_type(type)
|
36
|
-
case type
|
37
|
-
when 'string'
|
38
|
-
options[:string_default] # 'test string'
|
39
|
-
when 'int'
|
40
|
-
2
|
41
|
-
when 'boolean'
|
42
|
-
true
|
43
|
-
when 'double'
|
44
|
-
'1.5'
|
45
|
-
else
|
46
|
-
try_enum_for type
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# @param [Nokogiri::XML::Element]
|
51
|
-
# @return [Boolean] True if nokogori element is a complex type, that is, has a complexType element underneath itself
|
52
|
-
def complex_type?(element)
|
53
|
-
element.children.any? { |child| child.name == 'complexType' }
|
54
|
-
end
|
55
|
-
|
56
|
-
# @param [String, Symbol] underscore_separated Snakecase value to be converted to camel case
|
57
|
-
def camel_case(underscore_separated)
|
58
|
-
underscore_separated.to_s.split('_').collect(&:capitalize).join
|
59
|
-
end
|
60
|
-
|
61
|
-
# @param [Hash] op_details Hash with details from WSDL for an operation
|
62
|
-
# @return [Nokogiri::XML::NodeSet] List of the root elements in the SOAP body
|
63
|
-
def root_elements_for(op_details)
|
64
|
-
raise "'@wsdl_schemas' must be defined" if @wsdl_schemas.nil?
|
65
|
-
root_element = @wsdl_schemas.at_xpath("//*[@name='#{op_details[:input]}']")
|
66
|
-
raise 'Operation has no input defined' if root_element.nil?
|
67
|
-
schema_namespace = root_element.namespace.prefix
|
68
|
-
root_type = root_element['type']
|
69
|
-
if root_type
|
70
|
-
@wsdl_schemas.xpath("//*[@name='#{root_type.split(':').last}']//#{schema_namespace}:element")
|
71
|
-
else
|
72
|
-
return [] unless complex_type? root_element # Empty Array if there are no root elements
|
73
|
-
complex_type = root_element.children.find { |c| c.name == 'complexType' }
|
74
|
-
sequence = complex_type.children.find { |c| c.name == 'sequence' }
|
75
|
-
sequence.xpath("#{schema_namespace}:element")
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# @param [Nokogiri::XML::Element]
|
80
|
-
def document_type_for(element, depth = 1)
|
81
|
-
# raise "Too far deep for #{element}" unless depth < 6
|
82
|
-
return unless depth < 6
|
83
|
-
if complex_type? element
|
84
|
-
complex_type = element.children.find { |c| c.name == 'complexType' }
|
85
|
-
sequence = complex_type.children.find { |c| c.name == 'sequence' }
|
86
|
-
sequence.children.select { |node| node.class == Nokogiri::XML::Element }.each do |sub_element|
|
87
|
-
document_type_for sub_element, depth += 1
|
88
|
-
end
|
89
|
-
else
|
90
|
-
return "No type seen for #{element}, #{element.class}" unless element['type']
|
91
|
-
name = element['name']
|
92
|
-
type = value_after_namespace(element['type'])
|
93
|
-
@use_camel_case = true if (/[[:upper:]]/.match(name[0]) != nil)
|
94
|
-
spaces = ' ' * depth
|
95
|
-
@content += "#{spaces}#{name.snakecase}: #{fill_in_field_from_type(type)} # #{type} \n"
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
# Makes a yaml string in a '@content' instance variable
|
100
|
-
# @param [Nokogiri::XML::NodeSet] list List
|
101
|
-
def wsdl_to_yaml_for(list)
|
102
|
-
raise "'@content' string must be set" if @content.nil?
|
103
|
-
list.each do |element|
|
104
|
-
document_type_for element
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
# Prompt user for wsdl
|
109
|
-
def ask_wsdl
|
110
|
-
prompt = <<-EOF
|
111
|
-
Enter WSDL:
|
112
|
-
EOF
|
113
|
-
print prompt.chop
|
114
|
-
@wsdl = $stdin.gets.strip
|
115
|
-
puts
|
116
|
-
end
|
117
|
-
|
118
|
-
# Prompt user for Service name for wsdl
|
119
|
-
def name_of_wsdl
|
120
|
-
prompt = <<-EOF
|
121
|
-
Enter what you would like to name WSDL (CamelCase):
|
122
|
-
EOF
|
123
|
-
print prompt.chop
|
124
|
-
@name = $stdin.gets.strip
|
125
|
-
puts
|
126
|
-
end
|
127
|
-
|
128
|
-
# Prompt user to enter basic auth details
|
129
|
-
def enter_auth_details
|
130
|
-
prompt = <<-EOF
|
131
|
-
User Name:
|
132
|
-
EOF
|
133
|
-
print prompt.chop
|
134
|
-
@auth_name = $stdin.gets.strip
|
135
|
-
puts
|
136
|
-
|
137
|
-
prompt = <<-EOF
|
138
|
-
User Password:
|
139
|
-
EOF
|
140
|
-
print prompt.chop
|
141
|
-
@auth_password = $stdin.gets.strip
|
142
|
-
puts
|
143
|
-
end
|
144
|
-
end
|
1
|
+
|
2
|
+
module Soaspec
|
3
|
+
module WsdlGenerator
|
4
|
+
# Attempt to calculate values of enumeration by looking up type in Schema
|
5
|
+
def try_enum_for(type)
|
6
|
+
raise "'@wsdl_schemas' must be defined" if @wsdl_schemas.nil?
|
7
|
+
custom_type = @wsdl_schemas.xpath("//*[@name='#{type}']")
|
8
|
+
if enumeration? custom_type
|
9
|
+
prefix = custom_type.first.namespace.prefix
|
10
|
+
enumerations = custom_type.xpath("//#{prefix}:enumeration")
|
11
|
+
return 'Custom Type' if enumerations.empty?
|
12
|
+
@enums_values = []
|
13
|
+
enumerations.each { |enum_value| @enums_values << "'#{enum_value['value']}'" }
|
14
|
+
"~randomize [#{@enums_values.join(', ')}]"
|
15
|
+
else
|
16
|
+
'Custom Type'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# @param [Nokogiri::XML::NodeSet]
|
21
|
+
# @return [Boolean] Whether WSDL type is an enumeration
|
22
|
+
def enumeration?(type)
|
23
|
+
return false unless type.first
|
24
|
+
!type.xpath("*/#{type.first.namespace.prefix}:enumeration").empty?
|
25
|
+
end
|
26
|
+
|
27
|
+
# Return value of string after a namespace
|
28
|
+
# @param [String] string String to parse for part after namespace
|
29
|
+
def value_after_namespace(string)
|
30
|
+
string.split(':').last
|
31
|
+
end
|
32
|
+
|
33
|
+
# Based on WSDL type return a valid value
|
34
|
+
# @param [String] type Type without the WSDL
|
35
|
+
def fill_in_field_from_type(type)
|
36
|
+
case type
|
37
|
+
when 'string'
|
38
|
+
options[:string_default] # 'test string'
|
39
|
+
when 'int'
|
40
|
+
2
|
41
|
+
when 'boolean'
|
42
|
+
true
|
43
|
+
when 'double'
|
44
|
+
'1.5'
|
45
|
+
else
|
46
|
+
try_enum_for type
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# @param [Nokogiri::XML::Element]
|
51
|
+
# @return [Boolean] True if nokogori element is a complex type, that is, has a complexType element underneath itself
|
52
|
+
def complex_type?(element)
|
53
|
+
element.children.any? { |child| child.name == 'complexType' }
|
54
|
+
end
|
55
|
+
|
56
|
+
# @param [String, Symbol] underscore_separated Snakecase value to be converted to camel case
|
57
|
+
def camel_case(underscore_separated)
|
58
|
+
underscore_separated.to_s.split('_').collect(&:capitalize).join
|
59
|
+
end
|
60
|
+
|
61
|
+
# @param [Hash] op_details Hash with details from WSDL for an operation
|
62
|
+
# @return [Nokogiri::XML::NodeSet] List of the root elements in the SOAP body
|
63
|
+
def root_elements_for(op_details)
|
64
|
+
raise "'@wsdl_schemas' must be defined" if @wsdl_schemas.nil?
|
65
|
+
root_element = @wsdl_schemas.at_xpath("//*[@name='#{op_details[:input]}']")
|
66
|
+
raise 'Operation has no input defined' if root_element.nil?
|
67
|
+
schema_namespace = root_element.namespace.prefix
|
68
|
+
root_type = root_element['type']
|
69
|
+
if root_type
|
70
|
+
@wsdl_schemas.xpath("//*[@name='#{root_type.split(':').last}']//#{schema_namespace}:element")
|
71
|
+
else
|
72
|
+
return [] unless complex_type? root_element # Empty Array if there are no root elements
|
73
|
+
complex_type = root_element.children.find { |c| c.name == 'complexType' }
|
74
|
+
sequence = complex_type.children.find { |c| c.name == 'sequence' }
|
75
|
+
sequence.xpath("#{schema_namespace}:element")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# @param [Nokogiri::XML::Element]
|
80
|
+
def document_type_for(element, depth = 1)
|
81
|
+
# raise "Too far deep for #{element}" unless depth < 6
|
82
|
+
return unless depth < 6
|
83
|
+
if complex_type? element
|
84
|
+
complex_type = element.children.find { |c| c.name == 'complexType' }
|
85
|
+
sequence = complex_type.children.find { |c| c.name == 'sequence' }
|
86
|
+
sequence.children.select { |node| node.class == Nokogiri::XML::Element }.each do |sub_element|
|
87
|
+
document_type_for sub_element, depth += 1
|
88
|
+
end
|
89
|
+
else
|
90
|
+
return "No type seen for #{element}, #{element.class}" unless element['type']
|
91
|
+
name = element['name']
|
92
|
+
type = value_after_namespace(element['type'])
|
93
|
+
@use_camel_case = true if (/[[:upper:]]/.match(name[0]) != nil)
|
94
|
+
spaces = ' ' * depth
|
95
|
+
@content += "#{spaces}#{name.snakecase}: #{fill_in_field_from_type(type)} # #{type} \n"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# Makes a yaml string in a '@content' instance variable
|
100
|
+
# @param [Nokogiri::XML::NodeSet] list List
|
101
|
+
def wsdl_to_yaml_for(list)
|
102
|
+
raise "'@content' string must be set" if @content.nil?
|
103
|
+
list.each do |element|
|
104
|
+
document_type_for element
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Prompt user for wsdl
|
109
|
+
def ask_wsdl
|
110
|
+
prompt = <<-EOF
|
111
|
+
Enter WSDL:
|
112
|
+
EOF
|
113
|
+
print prompt.chop
|
114
|
+
@wsdl = $stdin.gets.strip
|
115
|
+
puts
|
116
|
+
end
|
117
|
+
|
118
|
+
# Prompt user for Service name for wsdl
|
119
|
+
def name_of_wsdl
|
120
|
+
prompt = <<-EOF
|
121
|
+
Enter what you would like to name WSDL (CamelCase):
|
122
|
+
EOF
|
123
|
+
print prompt.chop
|
124
|
+
@name = $stdin.gets.strip
|
125
|
+
puts
|
126
|
+
end
|
127
|
+
|
128
|
+
# Prompt user to enter basic auth details
|
129
|
+
def enter_auth_details
|
130
|
+
prompt = <<-EOF
|
131
|
+
User Name:
|
132
|
+
EOF
|
133
|
+
print prompt.chop
|
134
|
+
@auth_name = $stdin.gets.strip
|
135
|
+
puts
|
136
|
+
|
137
|
+
prompt = <<-EOF
|
138
|
+
User Password:
|
139
|
+
EOF
|
140
|
+
print prompt.chop
|
141
|
+
@auth_password = $stdin.gets.strip
|
142
|
+
puts
|
143
|
+
end
|
144
|
+
end
|
145
145
|
end
|
data/soaspec.gemspec
CHANGED
@@ -1,45 +1,46 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path('lib', __dir__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'soaspec/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = 'soaspec'
|
8
|
-
spec.version = Soaspec::VERSION
|
9
|
-
spec.authors = ['SamuelGarrattIQA']
|
10
|
-
spec.email = ['samuel.garratt@integrationqa.com']
|
11
|
-
|
12
|
-
spec.summary = "Helps to create RSpec specs for 'SOAP' or 'REST' apis "
|
13
|
-
spec.description = "Helps to create RSpec specs for 'SOAP' or 'REST' apis. Easily represent multiple requests with
|
14
|
-
the same configuration "
|
15
|
-
spec.homepage = 'https://gitlab.com/samuel-garratt/soaspec'
|
16
|
-
spec.license = 'MIT'
|
17
|
-
|
18
|
-
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
|
-
f.match(%r{^(test|spec|features|bin|config|template|credentials)/})
|
20
|
-
end
|
21
|
-
spec.bindir = 'exe'
|
22
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
-
spec.require_paths = ['lib']
|
24
|
-
|
25
|
-
spec.add_development_dependency 'bundler', '~> 1.16'
|
26
|
-
spec.add_development_dependency 'cucumber'
|
27
|
-
spec.add_development_dependency 'data_magic'
|
28
|
-
spec.add_development_dependency 'factory_bot'
|
29
|
-
spec.add_development_dependency 'rake', '~> 12.0'
|
30
|
-
spec.add_development_dependency 'require_all'
|
31
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
32
|
-
spec.add_development_dependency 'simplecov'
|
33
|
-
spec.add_dependency '
|
34
|
-
spec.add_dependency '
|
35
|
-
spec.add_dependency '
|
36
|
-
spec.add_dependency '
|
37
|
-
spec.add_dependency '
|
38
|
-
spec.add_dependency 'rspec
|
39
|
-
spec.add_dependency '
|
40
|
-
spec.add_dependency '
|
41
|
-
spec.add_dependency 'sinatra
|
42
|
-
spec.add_dependency '
|
43
|
-
spec.add_dependency '
|
44
|
-
|
45
|
-
|
1
|
+
|
2
|
+
lib = File.expand_path('lib', __dir__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'soaspec/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'soaspec'
|
8
|
+
spec.version = Soaspec::VERSION
|
9
|
+
spec.authors = ['SamuelGarrattIQA']
|
10
|
+
spec.email = ['samuel.garratt@integrationqa.com']
|
11
|
+
|
12
|
+
spec.summary = "Helps to create RSpec specs for 'SOAP' or 'REST' apis "
|
13
|
+
spec.description = "Helps to create RSpec specs for 'SOAP' or 'REST' apis. Easily represent multiple requests with
|
14
|
+
the same configuration "
|
15
|
+
spec.homepage = 'https://gitlab.com/samuel-garratt/soaspec'
|
16
|
+
spec.license = 'MIT'
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
|
+
f.match(%r{^(test|spec|features|bin|config|template|credentials)/})
|
20
|
+
end
|
21
|
+
spec.bindir = 'exe'
|
22
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
+
spec.require_paths = ['lib']
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.16'
|
26
|
+
spec.add_development_dependency 'cucumber'
|
27
|
+
spec.add_development_dependency 'data_magic'
|
28
|
+
spec.add_development_dependency 'factory_bot'
|
29
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
30
|
+
spec.add_development_dependency 'require_all'
|
31
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
32
|
+
spec.add_development_dependency 'simplecov'
|
33
|
+
spec.add_dependency 'faker'
|
34
|
+
spec.add_dependency 'hashie'
|
35
|
+
spec.add_dependency 'jsonpath'
|
36
|
+
spec.add_dependency 'nokogiri'
|
37
|
+
spec.add_dependency 'rest-client', '>= 2.0' # REST
|
38
|
+
spec.add_dependency 'rspec', '~> 3.0' # This framework is designed to work with RSpec
|
39
|
+
spec.add_dependency 'rspec-its', '>= 1.2.0'
|
40
|
+
spec.add_dependency 'savon', '>= 2' # SOAP
|
41
|
+
spec.add_dependency 'sinatra'
|
42
|
+
spec.add_dependency 'sinatra-basic-auth'
|
43
|
+
spec.add_dependency 'thor'
|
44
|
+
spec.add_dependency 'xml-simple', '>= 1.1.5'
|
45
|
+
|
46
|
+
end
|
data/test.wsdl
CHANGED
@@ -1,116 +1,116 @@
|
|
1
|
-
<wsdl:definitions
|
2
|
-
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
3
|
-
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
|
4
|
-
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
|
5
|
-
xmlns:tns="http://Example.org"
|
6
|
-
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
|
7
|
-
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
|
8
|
-
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"
|
9
|
-
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
10
|
-
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"
|
11
|
-
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
|
12
|
-
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
|
13
|
-
xmlns:wsa10="http://www.w3.org/2005/08/addressing"
|
14
|
-
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" targetNamespace="http://Example.org"
|
15
|
-
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
|
16
|
-
<wsdl:types>
|
17
|
-
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
18
|
-
targetNamespace="https://www.w3schools.com"
|
19
|
-
xmlns="https://www.w3schools.com"
|
20
|
-
elementFormDefault="qualified">
|
21
|
-
|
22
|
-
<xs:element name="note">
|
23
|
-
<xs:complexType>
|
24
|
-
<xs:sequence>
|
25
|
-
<xs:element name="to" type="xs:string"/>
|
26
|
-
<xs:element name="from" type="xs:string"/>
|
27
|
-
<xs:element name="heading" type="xs:string"/>
|
28
|
-
<xs:element name="body" type="xs:string"/>
|
29
|
-
</xs:sequence>
|
30
|
-
</xs:complexType>
|
31
|
-
</xs:element>
|
32
|
-
|
33
|
-
</xs:schema>
|
34
|
-
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET">
|
35
|
-
<s:element name="GetWeather">
|
36
|
-
<s:complexType>
|
37
|
-
<s:sequence>
|
38
|
-
<s:element minOccurs="0" maxOccurs="1" name="CityName" type="s:string"/>
|
39
|
-
<s:element minOccurs="0" maxOccurs="1" name="CountryName" type="s:string"/>
|
40
|
-
</s:sequence>
|
41
|
-
</s:complexType>
|
42
|
-
</s:element>
|
43
|
-
<s:element name="GetWeatherResponse">
|
44
|
-
<s:complexType>
|
45
|
-
<s:sequence>
|
46
|
-
<s:element minOccurs="0" maxOccurs="1" name="GetWeatherResult" type="s:string"/>
|
47
|
-
</s:sequence>
|
48
|
-
</s:complexType>
|
49
|
-
</s:element>
|
50
|
-
<s:element name="GetCitiesByCountry">
|
51
|
-
<s:complexType>
|
52
|
-
<s:sequence>
|
53
|
-
<s:element minOccurs="0" maxOccurs="1" name="CountryName" type="s:string"/>
|
54
|
-
</s:sequence>
|
55
|
-
</s:complexType>
|
56
|
-
</s:element>
|
57
|
-
<s:element name="GetCitiesByCountryResponse">
|
58
|
-
<s:complexType>
|
59
|
-
<s:sequence>
|
60
|
-
<s:element minOccurs="0" maxOccurs="1" name="GetCitiesByCountryResult" type="s:string"/>
|
61
|
-
</s:sequence>
|
62
|
-
</s:complexType>
|
63
|
-
</s:element>
|
64
|
-
<s:element name="string" nillable="true" type="s:string"/>
|
65
|
-
</s:schema>
|
66
|
-
|
67
|
-
</wsdl:types>
|
68
|
-
<wsdl:message name="ICalculator_Add_InputMessage">
|
69
|
-
<wsdl:part name="parameters" element="tns:Add" />
|
70
|
-
</wsdl:message>
|
71
|
-
<wsdl:message name="ICalculator_Add_OutputMessage">
|
72
|
-
<wsdl:part name="parameters" element="tns:AddResponse" />
|
73
|
-
</wsdl:message>
|
74
|
-
<wsdl:message name="ICalculator_Subtract_InputMessage">
|
75
|
-
<wsdl:part name="parameters" element="tns:Subtract" />
|
76
|
-
</wsdl:message>
|
77
|
-
<wsdl:message name="ICalculator_Subtract_OutputMessage">
|
78
|
-
<wsdl:part name="parameters" element="tns:SubtractResponse" />
|
79
|
-
</wsdl:message>
|
80
|
-
<wsdl:portType name="ICalculator">
|
81
|
-
<wsdl:operation name="Add">
|
82
|
-
<wsdl:input wsaw:Action="http://Example.org/ICalculator/Add" message="tns:ICalculator_Add_InputMessage" />
|
83
|
-
<wsdl:output wsaw:Action="http://Example.org/ICalculator/AddResponse" message="tns:ICalculator_Add_OutputMessage" />
|
84
|
-
</wsdl:operation>
|
85
|
-
<wsdl:operation name="Subtract">
|
86
|
-
<wsdl:input wsaw:Action="http://Example.org/ICalculator/Subtract" message="tns:ICalculator_Subtract_InputMessage" />
|
87
|
-
<wsdl:output wsaw:Action="http://Example.org/ICalculator/SubtractResponse" message="tns:ICalculator_Subtract_OutputMessage" />
|
88
|
-
</wsdl:operation>
|
89
|
-
</wsdl:portType>
|
90
|
-
<wsdl:binding name="DefaultBinding_ICalculator" type="tns:ICalculator">
|
91
|
-
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
|
92
|
-
<wsdl:operation name="Add">
|
93
|
-
<soap:operation soapAction="http://Example.org/ICalculator/Add" style="document" />
|
94
|
-
<wsdl:input>
|
95
|
-
<soap:body use="literal" />
|
96
|
-
</wsdl:input>
|
97
|
-
<wsdl:output>
|
98
|
-
<soap:body use="literal" />
|
99
|
-
</wsdl:output>
|
100
|
-
</wsdl:operation>
|
101
|
-
<wsdl:operation name="Subtract">
|
102
|
-
<soap:operation soapAction="http://Example.org/ICalculator/Subtract" style="document" />
|
103
|
-
<wsdl:input>
|
104
|
-
<soap:body use="literal" />
|
105
|
-
</wsdl:input>
|
106
|
-
<wsdl:output>
|
107
|
-
<soap:body use="literal" />
|
108
|
-
</wsdl:output>
|
109
|
-
</wsdl:operation>
|
110
|
-
</wsdl:binding>
|
111
|
-
<wsdl:service name="CalculatorService">
|
112
|
-
<wsdl:port name="ICalculator" binding="tns:DefaultBinding_ICalculator">
|
113
|
-
<soap:address location="http://Example.org/ICalculator" />
|
114
|
-
</wsdl:port>
|
115
|
-
</wsdl:service>
|
116
|
-
</wsdl:definitions>
|
1
|
+
<wsdl:definitions
|
2
|
+
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
3
|
+
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
|
4
|
+
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
|
5
|
+
xmlns:tns="http://Example.org"
|
6
|
+
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
|
7
|
+
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
|
8
|
+
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"
|
9
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
10
|
+
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"
|
11
|
+
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
|
12
|
+
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
|
13
|
+
xmlns:wsa10="http://www.w3.org/2005/08/addressing"
|
14
|
+
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" targetNamespace="http://Example.org"
|
15
|
+
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
|
16
|
+
<wsdl:types>
|
17
|
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
18
|
+
targetNamespace="https://www.w3schools.com"
|
19
|
+
xmlns="https://www.w3schools.com"
|
20
|
+
elementFormDefault="qualified">
|
21
|
+
|
22
|
+
<xs:element name="note">
|
23
|
+
<xs:complexType>
|
24
|
+
<xs:sequence>
|
25
|
+
<xs:element name="to" type="xs:string"/>
|
26
|
+
<xs:element name="from" type="xs:string"/>
|
27
|
+
<xs:element name="heading" type="xs:string"/>
|
28
|
+
<xs:element name="body" type="xs:string"/>
|
29
|
+
</xs:sequence>
|
30
|
+
</xs:complexType>
|
31
|
+
</xs:element>
|
32
|
+
|
33
|
+
</xs:schema>
|
34
|
+
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET">
|
35
|
+
<s:element name="GetWeather">
|
36
|
+
<s:complexType>
|
37
|
+
<s:sequence>
|
38
|
+
<s:element minOccurs="0" maxOccurs="1" name="CityName" type="s:string"/>
|
39
|
+
<s:element minOccurs="0" maxOccurs="1" name="CountryName" type="s:string"/>
|
40
|
+
</s:sequence>
|
41
|
+
</s:complexType>
|
42
|
+
</s:element>
|
43
|
+
<s:element name="GetWeatherResponse">
|
44
|
+
<s:complexType>
|
45
|
+
<s:sequence>
|
46
|
+
<s:element minOccurs="0" maxOccurs="1" name="GetWeatherResult" type="s:string"/>
|
47
|
+
</s:sequence>
|
48
|
+
</s:complexType>
|
49
|
+
</s:element>
|
50
|
+
<s:element name="GetCitiesByCountry">
|
51
|
+
<s:complexType>
|
52
|
+
<s:sequence>
|
53
|
+
<s:element minOccurs="0" maxOccurs="1" name="CountryName" type="s:string"/>
|
54
|
+
</s:sequence>
|
55
|
+
</s:complexType>
|
56
|
+
</s:element>
|
57
|
+
<s:element name="GetCitiesByCountryResponse">
|
58
|
+
<s:complexType>
|
59
|
+
<s:sequence>
|
60
|
+
<s:element minOccurs="0" maxOccurs="1" name="GetCitiesByCountryResult" type="s:string"/>
|
61
|
+
</s:sequence>
|
62
|
+
</s:complexType>
|
63
|
+
</s:element>
|
64
|
+
<s:element name="string" nillable="true" type="s:string"/>
|
65
|
+
</s:schema>
|
66
|
+
|
67
|
+
</wsdl:types>
|
68
|
+
<wsdl:message name="ICalculator_Add_InputMessage">
|
69
|
+
<wsdl:part name="parameters" element="tns:Add" />
|
70
|
+
</wsdl:message>
|
71
|
+
<wsdl:message name="ICalculator_Add_OutputMessage">
|
72
|
+
<wsdl:part name="parameters" element="tns:AddResponse" />
|
73
|
+
</wsdl:message>
|
74
|
+
<wsdl:message name="ICalculator_Subtract_InputMessage">
|
75
|
+
<wsdl:part name="parameters" element="tns:Subtract" />
|
76
|
+
</wsdl:message>
|
77
|
+
<wsdl:message name="ICalculator_Subtract_OutputMessage">
|
78
|
+
<wsdl:part name="parameters" element="tns:SubtractResponse" />
|
79
|
+
</wsdl:message>
|
80
|
+
<wsdl:portType name="ICalculator">
|
81
|
+
<wsdl:operation name="Add">
|
82
|
+
<wsdl:input wsaw:Action="http://Example.org/ICalculator/Add" message="tns:ICalculator_Add_InputMessage" />
|
83
|
+
<wsdl:output wsaw:Action="http://Example.org/ICalculator/AddResponse" message="tns:ICalculator_Add_OutputMessage" />
|
84
|
+
</wsdl:operation>
|
85
|
+
<wsdl:operation name="Subtract">
|
86
|
+
<wsdl:input wsaw:Action="http://Example.org/ICalculator/Subtract" message="tns:ICalculator_Subtract_InputMessage" />
|
87
|
+
<wsdl:output wsaw:Action="http://Example.org/ICalculator/SubtractResponse" message="tns:ICalculator_Subtract_OutputMessage" />
|
88
|
+
</wsdl:operation>
|
89
|
+
</wsdl:portType>
|
90
|
+
<wsdl:binding name="DefaultBinding_ICalculator" type="tns:ICalculator">
|
91
|
+
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
|
92
|
+
<wsdl:operation name="Add">
|
93
|
+
<soap:operation soapAction="http://Example.org/ICalculator/Add" style="document" />
|
94
|
+
<wsdl:input>
|
95
|
+
<soap:body use="literal" />
|
96
|
+
</wsdl:input>
|
97
|
+
<wsdl:output>
|
98
|
+
<soap:body use="literal" />
|
99
|
+
</wsdl:output>
|
100
|
+
</wsdl:operation>
|
101
|
+
<wsdl:operation name="Subtract">
|
102
|
+
<soap:operation soapAction="http://Example.org/ICalculator/Subtract" style="document" />
|
103
|
+
<wsdl:input>
|
104
|
+
<soap:body use="literal" />
|
105
|
+
</wsdl:input>
|
106
|
+
<wsdl:output>
|
107
|
+
<soap:body use="literal" />
|
108
|
+
</wsdl:output>
|
109
|
+
</wsdl:operation>
|
110
|
+
</wsdl:binding>
|
111
|
+
<wsdl:service name="CalculatorService">
|
112
|
+
<wsdl:port name="ICalculator" binding="tns:DefaultBinding_ICalculator">
|
113
|
+
<soap:address location="http://Example.org/ICalculator" />
|
114
|
+
</wsdl:port>
|
115
|
+
</wsdl:service>
|
116
|
+
</wsdl:definitions>
|