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.
Files changed (57) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +15 -15
  3. data/.gitlab-ci.yml +31 -31
  4. data/.rspec +3 -3
  5. data/.rubocop.yml +2 -2
  6. data/CODE_OF_CONDUCT.md +74 -74
  7. data/ChangeLog +384 -384
  8. data/Gemfile +6 -6
  9. data/LICENSE.txt +21 -21
  10. data/README.md +85 -85
  11. data/Rakefile +24 -24
  12. data/Todo.md +6 -6
  13. data/exe/soaspec +119 -119
  14. data/exe/soaspec-virtual-server +103 -103
  15. data/exe/xml_to_yaml_file +60 -60
  16. data/lib/soaspec.rb +91 -91
  17. data/lib/soaspec/core_ext/hash.rb +83 -83
  18. data/lib/soaspec/exchange.rb +234 -234
  19. data/lib/soaspec/exchange_handlers/exchange_handler.rb +103 -103
  20. data/lib/soaspec/exchange_handlers/handler_accessors.rb +106 -106
  21. data/lib/soaspec/exchange_handlers/rest_accessors.rb +92 -92
  22. data/lib/soaspec/exchange_handlers/rest_handler.rb +311 -311
  23. data/lib/soaspec/exchange_handlers/rest_methods.rb +44 -44
  24. data/lib/soaspec/exchange_handlers/soap_handler.rb +236 -236
  25. data/lib/soaspec/exe_helpers.rb +56 -56
  26. data/lib/soaspec/generator/.rspec.erb +5 -5
  27. data/lib/soaspec/generator/.travis.yml.erb +5 -5
  28. data/lib/soaspec/generator/Gemfile.erb +8 -8
  29. data/lib/soaspec/generator/README.md.erb +29 -29
  30. data/lib/soaspec/generator/Rakefile.erb +19 -19
  31. data/lib/soaspec/generator/config/data/default.yml.erb +1 -1
  32. data/lib/soaspec/generator/lib/blz_service.rb.erb +26 -26
  33. data/lib/soaspec/generator/lib/dynamic_class_content.rb.erb +12 -12
  34. data/lib/soaspec/generator/lib/shared_example.rb.erb +8 -8
  35. data/lib/soaspec/generator/spec/dynamic_soap_spec.rb.erb +12 -12
  36. data/lib/soaspec/generator/spec/soap_spec.rb.erb +51 -51
  37. data/lib/soaspec/generator/spec/spec_helper.rb.erb +20 -20
  38. data/lib/soaspec/generator/template/soap_template.xml +6 -6
  39. data/lib/soaspec/interpreter.rb +40 -40
  40. data/lib/soaspec/matchers.rb +65 -65
  41. data/lib/soaspec/not_found_errors.rb +13 -13
  42. data/lib/soaspec/soaspec_shared_examples.rb +24 -24
  43. data/lib/soaspec/spec_logger.rb +27 -27
  44. data/lib/soaspec/test_server/bank.wsdl +90 -90
  45. data/lib/soaspec/test_server/get_bank.rb +160 -160
  46. data/lib/soaspec/test_server/invoices.rb +27 -27
  47. data/lib/soaspec/test_server/namespace.xml +14 -14
  48. data/lib/soaspec/test_server/note.xml +5 -5
  49. data/lib/soaspec/test_server/puppy_service.rb +20 -20
  50. data/lib/soaspec/test_server/test_attribute.rb +13 -13
  51. data/lib/soaspec/version.rb +2 -2
  52. data/lib/soaspec/wsdl_generator.rb +144 -144
  53. data/soaspec.gemspec +46 -45
  54. data/test.wsdl +116 -116
  55. data/test.xml +10 -10
  56. data/test_wsdl.rb +43 -43
  57. 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
@@ -1,3 +1,3 @@
1
- module Soaspec
2
- VERSION = '0.1.1'.freeze
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
@@ -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 'hashie'
34
- spec.add_dependency 'jsonpath'
35
- spec.add_dependency 'nokogiri'
36
- spec.add_dependency 'rest-client', '>= 2.0' # REST
37
- spec.add_dependency 'rspec', '~> 3.0' # This framework is designed to work with RSpec
38
- spec.add_dependency 'rspec-its', '>= 1.2.0'
39
- spec.add_dependency 'savon', '>= 2' # SOAP
40
- spec.add_dependency 'sinatra'
41
- spec.add_dependency 'sinatra-basic-auth'
42
- spec.add_dependency 'thor'
43
- spec.add_dependency 'xml-simple', '>= 1.1.5'
44
-
45
- end
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>