soap2r 1.5.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. data/bin/wsdl2ruby.rb +137 -0
  2. data/bin/xsd2ruby.rb +90 -0
  3. data/lib/soap/attachment.rb +108 -0
  4. data/lib/soap/attrproxy.rb +34 -0
  5. data/lib/soap/baseData.rb +1094 -0
  6. data/lib/soap/element.rb +277 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
  8. data/lib/soap/encodingstyle/handler.rb +120 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +195 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +559 -0
  11. data/lib/soap/filter.rb +13 -0
  12. data/lib/soap/filter/filterchain.rb +51 -0
  13. data/lib/soap/filter/handler.rb +31 -0
  14. data/lib/soap/filter/streamhandler.rb +29 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +61 -0
  17. data/lib/soap/header/handlerset.rb +70 -0
  18. data/lib/soap/header/mappinghandler.rb +47 -0
  19. data/lib/soap/header/simplehandler.rb +44 -0
  20. data/lib/soap/httpconfigloader.rb +141 -0
  21. data/lib/soap/mapping.rb +12 -0
  22. data/lib/soap/mapping/encodedregistry.rb +537 -0
  23. data/lib/soap/mapping/factory.rb +388 -0
  24. data/lib/soap/mapping/literalregistry.rb +391 -0
  25. data/lib/soap/mapping/mapping.rb +576 -0
  26. data/lib/soap/mapping/registry.rb +295 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  28. data/lib/soap/mapping/schemadefinition.rb +170 -0
  29. data/lib/soap/mapping/typeMap.rb +106 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +211 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +248 -0
  32. data/lib/soap/marshal.rb +59 -0
  33. data/lib/soap/mimemessage.rb +241 -0
  34. data/lib/soap/nestedexception.rb +42 -0
  35. data/lib/soap/netHttpClient.rb +241 -0
  36. data/lib/soap/ns.rb +34 -0
  37. data/lib/soap/parser.rb +252 -0
  38. data/lib/soap/processor.rb +66 -0
  39. data/lib/soap/property.rb +319 -0
  40. data/lib/soap/proxy.rb +14 -0
  41. data/lib/soap/rpc/cgistub.rb +247 -0
  42. data/lib/soap/rpc/driver.rb +221 -0
  43. data/lib/soap/rpc/element.rb +374 -0
  44. data/lib/soap/rpc/httpserver.rb +142 -0
  45. data/lib/soap/rpc/methodDef.rb +68 -0
  46. data/lib/soap/rpc/proxy.rb +572 -0
  47. data/lib/soap/rpc/router.rb +662 -0
  48. data/lib/soap/rpc/rpc.rb +25 -0
  49. data/lib/soap/rpc/soaplet.rb +200 -0
  50. data/lib/soap/rpc/standaloneServer.rb +43 -0
  51. data/lib/soap/soap.rb +151 -0
  52. data/lib/soap/streamHandler.rb +301 -0
  53. data/lib/soap/wsdlDriver.rb +164 -0
  54. data/lib/wsdl/binding.rb +65 -0
  55. data/lib/wsdl/data.rb +64 -0
  56. data/lib/wsdl/definitions.rb +236 -0
  57. data/lib/wsdl/documentation.rb +32 -0
  58. data/lib/wsdl/import.rb +80 -0
  59. data/lib/wsdl/importer.rb +38 -0
  60. data/lib/wsdl/info.rb +50 -0
  61. data/lib/wsdl/message.rb +54 -0
  62. data/lib/wsdl/operation.rb +151 -0
  63. data/lib/wsdl/operationBinding.rb +240 -0
  64. data/lib/wsdl/param.rb +93 -0
  65. data/lib/wsdl/parser.rb +164 -0
  66. data/lib/wsdl/part.rb +52 -0
  67. data/lib/wsdl/port.rb +66 -0
  68. data/lib/wsdl/portType.rb +75 -0
  69. data/lib/wsdl/service.rb +61 -0
  70. data/lib/wsdl/soap/address.rb +40 -0
  71. data/lib/wsdl/soap/binding.rb +49 -0
  72. data/lib/wsdl/soap/body.rb +58 -0
  73. data/lib/wsdl/soap/cgiStubCreator.rb +92 -0
  74. data/lib/wsdl/soap/classDefCreator.rb +433 -0
  75. data/lib/wsdl/soap/classDefCreatorSupport.rb +240 -0
  76. data/lib/wsdl/soap/classNameCreator.rb +54 -0
  77. data/lib/wsdl/soap/clientSkeltonCreator.rb +104 -0
  78. data/lib/wsdl/soap/complexType.rb +173 -0
  79. data/lib/wsdl/soap/data.rb +42 -0
  80. data/lib/wsdl/soap/definitions.rb +200 -0
  81. data/lib/wsdl/soap/driverCreator.rb +118 -0
  82. data/lib/wsdl/soap/element.rb +33 -0
  83. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +73 -0
  84. data/lib/wsdl/soap/fault.rb +56 -0
  85. data/lib/wsdl/soap/header.rb +86 -0
  86. data/lib/wsdl/soap/headerfault.rb +56 -0
  87. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +115 -0
  88. data/lib/wsdl/soap/mappingRegistryCreator.rb +58 -0
  89. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +376 -0
  90. data/lib/wsdl/soap/methodDefCreator.rb +199 -0
  91. data/lib/wsdl/soap/operation.rb +112 -0
  92. data/lib/wsdl/soap/servantSkeltonCreator.rb +89 -0
  93. data/lib/wsdl/soap/servletStubCreator.rb +104 -0
  94. data/lib/wsdl/soap/standaloneServerStubCreator.rb +100 -0
  95. data/lib/wsdl/soap/wsdl2ruby.rb +217 -0
  96. data/lib/wsdl/types.rb +44 -0
  97. data/lib/wsdl/wsdl.rb +24 -0
  98. data/lib/wsdl/xmlSchema/all.rb +24 -0
  99. data/lib/wsdl/xmlSchema/annotation.rb +34 -0
  100. data/lib/wsdl/xmlSchema/any.rb +61 -0
  101. data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
  102. data/lib/wsdl/xmlSchema/attribute.rb +104 -0
  103. data/lib/wsdl/xmlSchema/attributeGroup.rb +68 -0
  104. data/lib/wsdl/xmlSchema/choice.rb +58 -0
  105. data/lib/wsdl/xmlSchema/complexContent.rb +97 -0
  106. data/lib/wsdl/xmlSchema/complexExtension.rb +119 -0
  107. data/lib/wsdl/xmlSchema/complexRestriction.rb +104 -0
  108. data/lib/wsdl/xmlSchema/complexType.rb +193 -0
  109. data/lib/wsdl/xmlSchema/content.rb +95 -0
  110. data/lib/wsdl/xmlSchema/data.rb +116 -0
  111. data/lib/wsdl/xmlSchema/element.rb +153 -0
  112. data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  113. data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
  114. data/lib/wsdl/xmlSchema/group.rb +100 -0
  115. data/lib/wsdl/xmlSchema/import.rb +53 -0
  116. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  117. data/lib/wsdl/xmlSchema/importer.rb +102 -0
  118. data/lib/wsdl/xmlSchema/include.rb +48 -0
  119. data/lib/wsdl/xmlSchema/length.rb +37 -0
  120. data/lib/wsdl/xmlSchema/list.rb +48 -0
  121. data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
  122. data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
  123. data/lib/wsdl/xmlSchema/maxlength.rb +37 -0
  124. data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
  125. data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
  126. data/lib/wsdl/xmlSchema/minlength.rb +37 -0
  127. data/lib/wsdl/xmlSchema/parser.rb +167 -0
  128. data/lib/wsdl/xmlSchema/pattern.rb +36 -0
  129. data/lib/wsdl/xmlSchema/ref.rb +33 -0
  130. data/lib/wsdl/xmlSchema/schema.rb +178 -0
  131. data/lib/wsdl/xmlSchema/sequence.rb +54 -0
  132. data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
  133. data/lib/wsdl/xmlSchema/simpleExtension.rb +62 -0
  134. data/lib/wsdl/xmlSchema/simpleRestriction.rb +132 -0
  135. data/lib/wsdl/xmlSchema/simpleType.rb +87 -0
  136. data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
  137. data/lib/wsdl/xmlSchema/union.rb +35 -0
  138. data/lib/wsdl/xmlSchema/unique.rb +34 -0
  139. data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
  140. data/lib/wsdl/xmlSchema/xsd2ruby.rb +174 -0
  141. data/lib/xsd/charset.rb +193 -0
  142. data/lib/xsd/codegen.rb +12 -0
  143. data/lib/xsd/codegen/classdef.rb +208 -0
  144. data/lib/xsd/codegen/commentdef.rb +34 -0
  145. data/lib/xsd/codegen/gensupport.rb +273 -0
  146. data/lib/xsd/codegen/methoddef.rb +70 -0
  147. data/lib/xsd/codegen/moduledef.rb +208 -0
  148. data/lib/xsd/datatypes.rb +1466 -0
  149. data/lib/xsd/datatypes1999.rb +20 -0
  150. data/lib/xsd/iconvcharset.rb +39 -0
  151. data/lib/xsd/mapping.rb +68 -0
  152. data/lib/xsd/namedelements.rb +132 -0
  153. data/lib/xsd/ns.rb +182 -0
  154. data/lib/xsd/qname.rb +79 -0
  155. data/lib/xsd/xmlparser.rb +76 -0
  156. data/lib/xsd/xmlparser/libxmlparser.rb +115 -0
  157. data/lib/xsd/xmlparser/parser.rb +100 -0
  158. data/lib/xsd/xmlparser/rexmlparser.rb +58 -0
  159. data/lib/xsd/xmlparser/xmlparser.rb +50 -0
  160. data/lib/xsd/xmlparser/xmlscanner.rb +149 -0
  161. metadata +224 -0
@@ -0,0 +1,32 @@
1
+ # WSDL4R - WSDL SOAP documentation element.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+
11
+
12
+ module WSDL
13
+
14
+
15
+ class Documentation < Info
16
+ def initialize
17
+ super
18
+ end
19
+
20
+ def parse_element(element)
21
+ # Accepts any element.
22
+ self
23
+ end
24
+
25
+ def parse_attr(attr, value)
26
+ # Accepts any attribute.
27
+ true
28
+ end
29
+ end
30
+
31
+
32
+ end
@@ -0,0 +1,80 @@
1
+ # WSDL4R - WSDL import definition.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+ require 'wsdl/importer'
11
+
12
+
13
+ module WSDL
14
+
15
+
16
+ class Import < Info
17
+ attr_reader :namespace
18
+ attr_reader :location
19
+ attr_reader :content
20
+
21
+ def initialize
22
+ super
23
+ @namespace = nil
24
+ @location = nil
25
+ @content = nil
26
+ @web_client = nil
27
+ end
28
+
29
+ def parse_element(element)
30
+ case element
31
+ when DocumentationName
32
+ o = Documentation.new
33
+ o
34
+ else
35
+ nil
36
+ end
37
+ end
38
+
39
+ def parse_attr(attr, value)
40
+ case attr
41
+ when NamespaceAttrName
42
+ @namespace = value.source
43
+ if @content
44
+ @content.targetnamespace = @namespace
45
+ end
46
+ @namespace
47
+ when LocationAttrName
48
+ @location = URI.parse(value.source)
49
+ if @location.relative? and !parent.location.nil? and
50
+ !parent.location.relative?
51
+ @location = parent.location + @location
52
+ end
53
+ if root.importedschema.key?(@location)
54
+ @content = root.importedschema[@location]
55
+ else
56
+ root.importedschema[@location] = nil # placeholder
57
+ @content = import(@location)
58
+ if @content.is_a?(Definitions)
59
+ @content.root = root
60
+ if @namespace
61
+ @content.targetnamespace = @namespace
62
+ end
63
+ end
64
+ root.importedschema[@location] = @content
65
+ end
66
+ @location
67
+ else
68
+ nil
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def import(location)
75
+ Importer.import(location, root)
76
+ end
77
+ end
78
+
79
+
80
+ end
@@ -0,0 +1,38 @@
1
+ # WSDL4R - WSDL importer library.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/xmlSchema/importer'
10
+ require 'wsdl/parser'
11
+
12
+
13
+ module WSDL
14
+
15
+
16
+ class Importer < WSDL::XMLSchema::Importer
17
+ def self.import(location, originalroot = nil)
18
+ new.import(location, originalroot)
19
+ end
20
+
21
+ private
22
+
23
+ def parse(content, location, originalroot)
24
+ opt = {
25
+ :location => location,
26
+ :originalroot => originalroot
27
+ }
28
+ begin
29
+ WSDL::Parser.new(opt).parse(content)
30
+ rescue WSDL::Parser::ParseError
31
+ super(content, location, originalroot)
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+
38
+ end
@@ -0,0 +1,50 @@
1
+ # WSDL4R - WSDL information base.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ module WSDL
10
+
11
+
12
+ class Info
13
+ attr_accessor :root
14
+ attr_accessor :parent
15
+ attr_accessor :id
16
+
17
+ def initialize
18
+ @root = nil
19
+ @parent = nil
20
+ @id = nil
21
+ end
22
+
23
+ def inspect
24
+ if self.respond_to?(:name)
25
+ sprintf("#<%s:0x%x %s>", self.class.name, __id__, self.name)
26
+ else
27
+ sprintf("#<%s:0x%x>", self.class.name, __id__)
28
+ end
29
+ end
30
+
31
+ def parse_element(element); end # abstract
32
+
33
+ def parse_attr(attr, value); end # abstract
34
+
35
+ def parse_epilogue; end # abstract
36
+
37
+ private
38
+
39
+ def to_int(value)
40
+ Integer(value.source)
41
+ end
42
+
43
+ def to_boolean(value)
44
+ s = value.source
45
+ s == "true" or s == "1"
46
+ end
47
+ end
48
+
49
+
50
+ end
@@ -0,0 +1,54 @@
1
+ # WSDL4R - WSDL message definition.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+
11
+
12
+ module WSDL
13
+
14
+
15
+ class Message < Info
16
+ attr_reader :name # required
17
+ attr_reader :parts
18
+
19
+ def initialize
20
+ super
21
+ @name = nil
22
+ @parts = []
23
+ end
24
+
25
+ def targetnamespace
26
+ parent.targetnamespace
27
+ end
28
+
29
+ def parse_element(element)
30
+ case element
31
+ when PartName
32
+ o = Part.new
33
+ @parts << o
34
+ o
35
+ when DocumentationName
36
+ o = Documentation.new
37
+ o
38
+ else
39
+ nil
40
+ end
41
+ end
42
+
43
+ def parse_attr(attr, value)
44
+ case attr
45
+ when NameAttrName
46
+ @name = XSD::QName.new(parent.targetnamespace, value.source)
47
+ else
48
+ nil
49
+ end
50
+ end
51
+ end
52
+
53
+
54
+ end
@@ -0,0 +1,151 @@
1
+ # WSDL4R - WSDL operation definition.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+
11
+
12
+ module WSDL
13
+
14
+
15
+ class Operation < Info
16
+ attr_reader :name # required
17
+ attr_reader :parameter_order # optional
18
+ attr_reader :input
19
+ attr_reader :output
20
+ attr_reader :fault
21
+ attr_reader :type # required
22
+
23
+ def initialize
24
+ super
25
+ @name = nil
26
+ @type = nil
27
+ @parameter_order = nil
28
+ @input = nil
29
+ @output = nil
30
+ @fault = []
31
+ end
32
+
33
+ def targetnamespace
34
+ parent.targetnamespace
35
+ end
36
+
37
+ def operationname
38
+ as_operationname(@name)
39
+ end
40
+
41
+ EMPTY = [].freeze
42
+ # TODO: remove once after OperationInfo created
43
+ def inputparts
44
+ if message = input_message
45
+ sort_parts(message.parts)
46
+ else
47
+ EMPTY
48
+ end
49
+ end
50
+
51
+ def inputname
52
+ if input
53
+ as_operationname(input.name ? input.name.name : @name)
54
+ else
55
+ nil
56
+ end
57
+ end
58
+
59
+ # TODO: remove once after OperationInfo created
60
+ def outputparts
61
+ if message = output_message
62
+ sort_parts(message.parts)
63
+ else
64
+ EMPTY
65
+ end
66
+ end
67
+
68
+ def outputname
69
+ if output
70
+ as_operationname(output.name ? output.name.name : @name + 'Response')
71
+ else
72
+ nil
73
+ end
74
+ end
75
+
76
+ def parse_element(element)
77
+ case element
78
+ when InputName
79
+ o = Param.new
80
+ @input = o
81
+ o
82
+ when OutputName
83
+ o = Param.new
84
+ @output = o
85
+ o
86
+ when FaultName
87
+ o = Param.new
88
+ @fault << o
89
+ o
90
+ when DocumentationName
91
+ o = Documentation.new
92
+ o
93
+ else
94
+ nil
95
+ end
96
+ end
97
+
98
+ def parse_attr(attr, value)
99
+ case attr
100
+ when NameAttrName
101
+ @name = value.source
102
+ when TypeAttrName
103
+ @type = value
104
+ when ParameterOrderAttrName
105
+ @parameter_order = value.source.split(/\s+/)
106
+ else
107
+ nil
108
+ end
109
+ end
110
+
111
+ private
112
+
113
+ def input_message
114
+ if input and message = input.find_message
115
+ message
116
+ else
117
+ nil
118
+ end
119
+ end
120
+
121
+ def output_message
122
+ if output and message = output.find_message
123
+ message
124
+ else
125
+ nil
126
+ end
127
+ end
128
+
129
+ def sort_parts(parts)
130
+ return parts.dup unless parameter_order
131
+ result = []
132
+ parameter_order.each do |orderitem|
133
+ if (ele = parts.find { |part| part.name == orderitem })
134
+ result << ele
135
+ end
136
+ end
137
+ if result.length == 0
138
+ return parts.dup
139
+ end
140
+ # result length can be shorter than parts's.
141
+ # return part must not be a part of the parameterOrder.
142
+ result
143
+ end
144
+
145
+ def as_operationname(name)
146
+ XSD::QName.new(targetnamespace, name)
147
+ end
148
+ end
149
+
150
+
151
+ end
@@ -0,0 +1,240 @@
1
+ # WSDL4R - WSDL bound operation definition.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+
11
+
12
+ module WSDL
13
+
14
+
15
+ class OperationBinding < Info
16
+ attr_reader :name # required
17
+ attr_reader :input
18
+ attr_reader :output
19
+ attr_reader :fault
20
+ attr_reader :soapoperation
21
+
22
+ class OperationInfo
23
+ attr_reader :boundid
24
+ attr_reader :qname
25
+ attr_reader :style
26
+ attr_accessor :inputuse
27
+ attr_accessor :outputuse
28
+ attr_reader :parts
29
+ attr_reader :faults
30
+
31
+ def initialize(boundid, qname, style, inputuse, outputuse)
32
+ @boundid = boundid
33
+ @qname = qname
34
+ @style = style
35
+ @inputuse = inputuse
36
+ @outputuse = outputuse
37
+ @parts = []
38
+ @faults = {}
39
+ end
40
+ end
41
+
42
+ class Part
43
+ attr_reader :io_type
44
+ attr_reader :name
45
+ attr_reader :type
46
+ attr_reader :element
47
+
48
+ def initialize(io_type, name, type, element)
49
+ @io_type = io_type
50
+ @name = name
51
+ @type = type
52
+ @element = element
53
+ end
54
+ end
55
+
56
+ class BoundId
57
+ attr_reader :name
58
+ attr_reader :soapaction
59
+
60
+ def initialize(name, soapaction)
61
+ @name = name
62
+ @soapaction = soapaction
63
+ end
64
+
65
+ def ==(rhs)
66
+ !rhs.nil? and @name == rhs.name and @soapaction == rhs.soapaction
67
+ end
68
+
69
+ def eql?(rhs)
70
+ (self == rhs)
71
+ end
72
+
73
+ def hash
74
+ @name.hash ^ @soapaction.hash
75
+ end
76
+ end
77
+
78
+ def initialize
79
+ super
80
+ @name = nil
81
+ @input = nil
82
+ @output = nil
83
+ @fault = []
84
+ @soapoperation = nil
85
+ end
86
+
87
+ def operation_info
88
+ qname = soapoperation_name()
89
+ style = soapoperation_style()
90
+ use_input = soapbody_use(@input)
91
+ use_output = soapbody_use(@output)
92
+ info = OperationInfo.new(boundid, qname, style, use_input, use_output)
93
+ op = find_operation()
94
+ if style == :rpc
95
+ info.parts.concat(collect_rpcparameter(op))
96
+ else
97
+ info.parts.concat(collect_documentparameter(op))
98
+ end
99
+ @fault.each do |fault|
100
+ op_fault = {}
101
+ soapfault = fault.soapfault
102
+ next if soapfault.nil?
103
+ op_fault[:ns] = fault.name.namespace
104
+ op_fault[:name] = fault.name.name
105
+ op_fault[:namespace] = soapfault.namespace
106
+ op_fault[:use] = soapfault.use || "literal"
107
+ op_fault[:encodingstyle] = soapfault.encodingstyle || "document"
108
+ info.faults[fault.name] = op_fault
109
+ end
110
+ info
111
+ end
112
+
113
+ def targetnamespace
114
+ parent.targetnamespace
115
+ end
116
+
117
+ def porttype
118
+ root.porttype(parent.type)
119
+ end
120
+
121
+ def boundid
122
+ BoundId.new(name, soapaction)
123
+ end
124
+
125
+ def find_operation
126
+ porttype.operations.each do |op|
127
+ next if op.name != @name
128
+ next if op.input and @input and op.input.name and @input.name and
129
+ op.input.name != @input.name
130
+ next if op.output and @output and op.output.name and @output.name and
131
+ op.output.name != @output.name
132
+ return op
133
+ end
134
+ raise RuntimeError.new("#{@name} not found")
135
+ end
136
+
137
+ def soapoperation_name
138
+ op_name = find_operation.operationname
139
+ if @input and @input.soapbody and @input.soapbody.namespace
140
+ op_name = XSD::QName.new(@input.soapbody.namespace, op_name.name)
141
+ end
142
+ op_name
143
+ end
144
+
145
+ def soapoperation_style
146
+ style = nil
147
+ if @soapoperation
148
+ style = @soapoperation.operation_style
149
+ elsif parent.soapbinding
150
+ style = parent.soapbinding.style
151
+ else
152
+ raise TypeError.new("operation style definition not found")
153
+ end
154
+ style || :document
155
+ end
156
+
157
+ def soapaction
158
+ if @soapoperation
159
+ @soapoperation.soapaction
160
+ else
161
+ nil
162
+ end
163
+ end
164
+
165
+ def parse_element(element)
166
+ case element
167
+ when InputName
168
+ o = Param.new
169
+ @input = o
170
+ o
171
+ when OutputName
172
+ o = Param.new
173
+ @output = o
174
+ o
175
+ when FaultName
176
+ o = Param.new
177
+ @fault << o
178
+ o
179
+ when SOAPOperationName
180
+ o = WSDL::SOAP::Operation.new
181
+ @soapoperation = o
182
+ o
183
+ when DocumentationName
184
+ o = Documentation.new
185
+ o
186
+ else
187
+ nil
188
+ end
189
+ end
190
+
191
+ def parse_attr(attr, value)
192
+ case attr
193
+ when NameAttrName
194
+ @name = value.source
195
+ else
196
+ nil
197
+ end
198
+ end
199
+
200
+ private
201
+
202
+ def soapbody_use(param)
203
+ param ? param.soapbody_use : nil
204
+ end
205
+
206
+ def collect_rpcparameter(operation)
207
+ result = operation.inputparts.collect { |part|
208
+ Part.new(:in, part.name, part.type, part.element)
209
+ }
210
+ outparts = operation.outputparts
211
+ if outparts.size > 0
212
+ retval = outparts[0]
213
+ result << Part.new(:retval, retval.name, retval.type, retval.element)
214
+ cdr(outparts).each { |part|
215
+ result << Part.new(:out, part.name, part.type, part.element)
216
+ }
217
+ end
218
+ result
219
+ end
220
+
221
+ def collect_documentparameter(operation)
222
+ param = []
223
+ operation.inputparts.each do |input|
224
+ param << Part.new(:in, input.name, input.type, input.element)
225
+ end
226
+ operation.outputparts.each do |output|
227
+ param << Part.new(:out, output.name, output.type, output.element)
228
+ end
229
+ param
230
+ end
231
+
232
+ def cdr(ary)
233
+ result = ary.dup
234
+ result.shift
235
+ result
236
+ end
237
+ end
238
+
239
+
240
+ end