reidiculous-actionwebservice-client 3.0.4

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 (179) hide show
  1. data/CHANGELOG +320 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +381 -0
  4. data/Rakefile +180 -0
  5. data/TODO +32 -0
  6. data/lib/action_web_service.rb +71 -0
  7. data/lib/action_web_service/api.rb +297 -0
  8. data/lib/action_web_service/base.rb +38 -0
  9. data/lib/action_web_service/casting.rb +149 -0
  10. data/lib/action_web_service/client.rb +3 -0
  11. data/lib/action_web_service/client/base.rb +28 -0
  12. data/lib/action_web_service/client/soap_client.rb +113 -0
  13. data/lib/action_web_service/client/xmlrpc_client.rb +58 -0
  14. data/lib/action_web_service/container.rb +3 -0
  15. data/lib/action_web_service/container/action_controller_container.rb +93 -0
  16. data/lib/action_web_service/container/delegated_container.rb +86 -0
  17. data/lib/action_web_service/container/direct_container.rb +69 -0
  18. data/lib/action_web_service/dispatcher.rb +2 -0
  19. data/lib/action_web_service/dispatcher/abstract.rb +207 -0
  20. data/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +379 -0
  21. data/lib/action_web_service/invocation.rb +202 -0
  22. data/lib/action_web_service/protocol.rb +4 -0
  23. data/lib/action_web_service/protocol/abstract.rb +115 -0
  24. data/lib/action_web_service/protocol/discovery.rb +37 -0
  25. data/lib/action_web_service/protocol/soap_protocol.rb +176 -0
  26. data/lib/action_web_service/protocol/soap_protocol/marshaler.rb +242 -0
  27. data/lib/action_web_service/protocol/xmlrpc_protocol.rb +122 -0
  28. data/lib/action_web_service/scaffolding.rb +281 -0
  29. data/lib/action_web_service/soap/attachment.rb +107 -0
  30. data/lib/action_web_service/soap/baseData.rb +942 -0
  31. data/lib/action_web_service/soap/element.rb +258 -0
  32. data/lib/action_web_service/soap/encodingstyle/aspDotNetHandler.rb +213 -0
  33. data/lib/action_web_service/soap/encodingstyle/handler.rb +100 -0
  34. data/lib/action_web_service/soap/encodingstyle/literalHandler.rb +226 -0
  35. data/lib/action_web_service/soap/encodingstyle/soapHandler.rb +582 -0
  36. data/lib/action_web_service/soap/generator.rb +268 -0
  37. data/lib/action_web_service/soap/header/handler.rb +57 -0
  38. data/lib/action_web_service/soap/header/handlerset.rb +70 -0
  39. data/lib/action_web_service/soap/header/simplehandler.rb +44 -0
  40. data/lib/action_web_service/soap/httpconfigloader.rb +119 -0
  41. data/lib/action_web_service/soap/mapping.rb +10 -0
  42. data/lib/action_web_service/soap/mapping/factory.rb +355 -0
  43. data/lib/action_web_service/soap/mapping/mapping.rb +381 -0
  44. data/lib/action_web_service/soap/mapping/registry.rb +541 -0
  45. data/lib/action_web_service/soap/mapping/rubytypeFactory.rb +475 -0
  46. data/lib/action_web_service/soap/mapping/typeMap.rb +50 -0
  47. data/lib/action_web_service/soap/mapping/wsdlencodedregistry.rb +280 -0
  48. data/lib/action_web_service/soap/mapping/wsdlliteralregistry.rb +418 -0
  49. data/lib/action_web_service/soap/marshal.rb +59 -0
  50. data/lib/action_web_service/soap/mimemessage.rb +240 -0
  51. data/lib/action_web_service/soap/netHttpClient.rb +190 -0
  52. data/lib/action_web_service/soap/parser.rb +251 -0
  53. data/lib/action_web_service/soap/processor.rb +66 -0
  54. data/lib/action_web_service/soap/property.rb +333 -0
  55. data/lib/action_web_service/soap/rpc/cgistub.rb +206 -0
  56. data/lib/action_web_service/soap/rpc/driver.rb +254 -0
  57. data/lib/action_web_service/soap/rpc/element.rb +325 -0
  58. data/lib/action_web_service/soap/rpc/httpserver.rb +129 -0
  59. data/lib/action_web_service/soap/rpc/proxy.rb +497 -0
  60. data/lib/action_web_service/soap/rpc/router.rb +594 -0
  61. data/lib/action_web_service/soap/rpc/rpc.rb +25 -0
  62. data/lib/action_web_service/soap/rpc/soaplet.rb +162 -0
  63. data/lib/action_web_service/soap/rpc/standaloneServer.rb +43 -0
  64. data/lib/action_web_service/soap/soap.rb +140 -0
  65. data/lib/action_web_service/soap/streamHandler.rb +229 -0
  66. data/lib/action_web_service/soap/wsdlDriver.rb +575 -0
  67. data/lib/action_web_service/struct.rb +64 -0
  68. data/lib/action_web_service/support/class_inheritable_options.rb +28 -0
  69. data/lib/action_web_service/support/signature_types.rb +227 -0
  70. data/lib/action_web_service/test_invoke.rb +110 -0
  71. data/lib/action_web_service/version.rb +9 -0
  72. data/lib/action_web_service/wsdl/binding.rb +65 -0
  73. data/lib/action_web_service/wsdl/data.rb +64 -0
  74. data/lib/action_web_service/wsdl/definitions.rb +250 -0
  75. data/lib/action_web_service/wsdl/documentation.rb +32 -0
  76. data/lib/action_web_service/wsdl/import.rb +80 -0
  77. data/lib/action_web_service/wsdl/importer.rb +38 -0
  78. data/lib/action_web_service/wsdl/info.rb +39 -0
  79. data/lib/action_web_service/wsdl/message.rb +54 -0
  80. data/lib/action_web_service/wsdl/operation.rb +130 -0
  81. data/lib/action_web_service/wsdl/operationBinding.rb +108 -0
  82. data/lib/action_web_service/wsdl/param.rb +85 -0
  83. data/lib/action_web_service/wsdl/parser.rb +163 -0
  84. data/lib/action_web_service/wsdl/part.rb +52 -0
  85. data/lib/action_web_service/wsdl/port.rb +84 -0
  86. data/lib/action_web_service/wsdl/portType.rb +73 -0
  87. data/lib/action_web_service/wsdl/service.rb +61 -0
  88. data/lib/action_web_service/wsdl/soap/address.rb +40 -0
  89. data/lib/action_web_service/wsdl/soap/binding.rb +49 -0
  90. data/lib/action_web_service/wsdl/soap/body.rb +56 -0
  91. data/lib/action_web_service/wsdl/soap/cgiStubCreator.rb +76 -0
  92. data/lib/action_web_service/wsdl/soap/classDefCreator.rb +314 -0
  93. data/lib/action_web_service/wsdl/soap/classDefCreatorSupport.rb +126 -0
  94. data/lib/action_web_service/wsdl/soap/clientSkeltonCreator.rb +78 -0
  95. data/lib/action_web_service/wsdl/soap/complexType.rb +161 -0
  96. data/lib/action_web_service/wsdl/soap/data.rb +42 -0
  97. data/lib/action_web_service/wsdl/soap/definitions.rb +149 -0
  98. data/lib/action_web_service/wsdl/soap/driverCreator.rb +95 -0
  99. data/lib/action_web_service/wsdl/soap/element.rb +28 -0
  100. data/lib/action_web_service/wsdl/soap/fault.rb +56 -0
  101. data/lib/action_web_service/wsdl/soap/header.rb +86 -0
  102. data/lib/action_web_service/wsdl/soap/headerfault.rb +56 -0
  103. data/lib/action_web_service/wsdl/soap/mappingRegistryCreator.rb +92 -0
  104. data/lib/action_web_service/wsdl/soap/methodDefCreator.rb +228 -0
  105. data/lib/action_web_service/wsdl/soap/operation.rb +122 -0
  106. data/lib/action_web_service/wsdl/soap/servantSkeltonCreator.rb +67 -0
  107. data/lib/action_web_service/wsdl/soap/standaloneServerStubCreator.rb +85 -0
  108. data/lib/action_web_service/wsdl/soap/wsdl2ruby.rb +176 -0
  109. data/lib/action_web_service/wsdl/types.rb +43 -0
  110. data/lib/action_web_service/wsdl/wsdl.rb +23 -0
  111. data/lib/action_web_service/wsdl/xmlSchema/all.rb +69 -0
  112. data/lib/action_web_service/wsdl/xmlSchema/annotation.rb +34 -0
  113. data/lib/action_web_service/wsdl/xmlSchema/any.rb +56 -0
  114. data/lib/action_web_service/wsdl/xmlSchema/attribute.rb +127 -0
  115. data/lib/action_web_service/wsdl/xmlSchema/choice.rb +69 -0
  116. data/lib/action_web_service/wsdl/xmlSchema/complexContent.rb +92 -0
  117. data/lib/action_web_service/wsdl/xmlSchema/complexType.rb +139 -0
  118. data/lib/action_web_service/wsdl/xmlSchema/content.rb +96 -0
  119. data/lib/action_web_service/wsdl/xmlSchema/data.rb +80 -0
  120. data/lib/action_web_service/wsdl/xmlSchema/element.rb +154 -0
  121. data/lib/action_web_service/wsdl/xmlSchema/enumeration.rb +36 -0
  122. data/lib/action_web_service/wsdl/xmlSchema/import.rb +65 -0
  123. data/lib/action_web_service/wsdl/xmlSchema/importer.rb +87 -0
  124. data/lib/action_web_service/wsdl/xmlSchema/include.rb +54 -0
  125. data/lib/action_web_service/wsdl/xmlSchema/length.rb +35 -0
  126. data/lib/action_web_service/wsdl/xmlSchema/parser.rb +166 -0
  127. data/lib/action_web_service/wsdl/xmlSchema/pattern.rb +36 -0
  128. data/lib/action_web_service/wsdl/xmlSchema/schema.rb +143 -0
  129. data/lib/action_web_service/wsdl/xmlSchema/sequence.rb +69 -0
  130. data/lib/action_web_service/wsdl/xmlSchema/simpleContent.rb +65 -0
  131. data/lib/action_web_service/wsdl/xmlSchema/simpleExtension.rb +54 -0
  132. data/lib/action_web_service/wsdl/xmlSchema/simpleRestriction.rb +73 -0
  133. data/lib/action_web_service/wsdl/xmlSchema/simpleType.rb +73 -0
  134. data/lib/action_web_service/wsdl/xmlSchema/unique.rb +34 -0
  135. data/lib/action_web_service/wsdl/xmlSchema/xsd2ruby.rb +107 -0
  136. data/lib/action_web_service/xsd/charset.rb +187 -0
  137. data/lib/action_web_service/xsd/codegen.rb +12 -0
  138. data/lib/action_web_service/xsd/codegen/classdef.rb +203 -0
  139. data/lib/action_web_service/xsd/codegen/commentdef.rb +34 -0
  140. data/lib/action_web_service/xsd/codegen/gensupport.rb +166 -0
  141. data/lib/action_web_service/xsd/codegen/methoddef.rb +63 -0
  142. data/lib/action_web_service/xsd/codegen/moduledef.rb +191 -0
  143. data/lib/action_web_service/xsd/datatypes.rb +1269 -0
  144. data/lib/action_web_service/xsd/datatypes1999.rb +20 -0
  145. data/lib/action_web_service/xsd/iconvcharset.rb +33 -0
  146. data/lib/action_web_service/xsd/mapping.rb +42 -0
  147. data/lib/action_web_service/xsd/namedelements.rb +95 -0
  148. data/lib/action_web_service/xsd/ns.rb +140 -0
  149. data/lib/action_web_service/xsd/qname.rb +78 -0
  150. data/lib/action_web_service/xsd/xmlparser.rb +61 -0
  151. data/lib/action_web_service/xsd/xmlparser/parser.rb +96 -0
  152. data/lib/action_web_service/xsd/xmlparser/rexmlparser.rb +54 -0
  153. data/lib/action_web_service/xsd/xmlparser/xmlparser.rb +50 -0
  154. data/lib/action_web_service/xsd/xmlparser/xmlscanner.rb +147 -0
  155. data/lib/actionwebservice.rb +1 -0
  156. data/setup.rb +1379 -0
  157. data/test/abstract_client.rb +183 -0
  158. data/test/abstract_dispatcher.rb +548 -0
  159. data/test/abstract_unit.rb +45 -0
  160. data/test/api_test.rb +103 -0
  161. data/test/apis/auto_load_api.rb +3 -0
  162. data/test/apis/broken_auto_load_api.rb +2 -0
  163. data/test/base_test.rb +42 -0
  164. data/test/casting_test.rb +95 -0
  165. data/test/client_soap_test.rb +156 -0
  166. data/test/client_xmlrpc_test.rb +153 -0
  167. data/test/container_test.rb +73 -0
  168. data/test/dispatcher_action_controller_soap_test.rb +139 -0
  169. data/test/dispatcher_action_controller_xmlrpc_test.rb +59 -0
  170. data/test/fixtures/db_definitions/mysql.sql +8 -0
  171. data/test/fixtures/db_definitions/sqlite3.sql +8 -0
  172. data/test/fixtures/users.yml +12 -0
  173. data/test/gencov +3 -0
  174. data/test/invocation_test.rb +185 -0
  175. data/test/run +6 -0
  176. data/test/scaffolded_controller_test.rb +146 -0
  177. data/test/struct_test.rb +52 -0
  178. data/test/test_invoke_test.rb +112 -0
  179. metadata +265 -0
@@ -0,0 +1,122 @@
1
+ # WSDL4R - WSDL SOAP operation definition.
2
+ # Copyright (C) 2002, 2003 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 'action_web_service/wsdl/info'
10
+
11
+
12
+ module WSDL
13
+ module SOAP
14
+
15
+
16
+ class Operation < Info
17
+ class OperationInfo
18
+ attr_reader :style
19
+ attr_reader :op_name
20
+ attr_reader :optype_name
21
+ attr_reader :headerparts
22
+ attr_reader :bodyparts
23
+ attr_reader :faultpart
24
+ attr_reader :soapaction
25
+
26
+ def initialize(style, op_name, optype_name, headerparts, bodyparts, faultpart, soapaction)
27
+ @style = style
28
+ @op_name = op_name
29
+ @optype_name = optype_name
30
+ @headerparts = headerparts
31
+ @bodyparts = bodyparts
32
+ @faultpart = faultpart
33
+ @soapaction = soapaction
34
+ end
35
+ end
36
+
37
+ attr_reader :soapaction
38
+ attr_reader :style
39
+
40
+ def initialize
41
+ super
42
+ @soapaction = nil
43
+ @style = nil
44
+ end
45
+
46
+ def parse_element(element)
47
+ nil
48
+ end
49
+
50
+ def parse_attr(attr, value)
51
+ case attr
52
+ when StyleAttrName
53
+ if ["document", "rpc"].include?(value.source)
54
+ @style = value.source.intern
55
+ else
56
+ raise Parser::AttributeConstraintError.new(
57
+ "Unexpected value #{ value }.")
58
+ end
59
+ when SOAPActionAttrName
60
+ @soapaction = value.source
61
+ else
62
+ nil
63
+ end
64
+ end
65
+
66
+ def input_info
67
+ name_info = parent.find_operation.input_info
68
+ param_info(name_info, parent.input)
69
+ end
70
+
71
+ def output_info
72
+ name_info = parent.find_operation.output_info
73
+ param_info(name_info, parent.output)
74
+ end
75
+
76
+ def operation_style
77
+ return @style if @style
78
+ if parent_binding.soapbinding
79
+ return parent_binding.soapbinding.style
80
+ end
81
+ nil
82
+ end
83
+
84
+ private
85
+
86
+ def parent_binding
87
+ parent.parent
88
+ end
89
+
90
+ def param_info(name_info, param)
91
+ op_name = name_info.op_name
92
+ optype_name = name_info.optype_name
93
+
94
+ soapheader = param.soapheader
95
+ headerparts = soapheader.collect { |item| item.find_part }
96
+
97
+ soapbody = param.soapbody
98
+ if soapbody.encodingstyle and
99
+ soapbody.encodingstyle != ::SOAP::EncodingNamespace
100
+ raise NotImplementedError.new(
101
+ "EncodingStyle '#{ soapbody.encodingstyle }' not supported.")
102
+ end
103
+ if soapbody.namespace
104
+ op_name = XSD::QName.new(soapbody.namespace, op_name.name)
105
+ end
106
+ if soapbody.parts
107
+ target = soapbody.parts.split(/\s+/)
108
+ bodyparts = name_info.parts.find_all { |part|
109
+ target.include?(part.name)
110
+ }
111
+ else
112
+ bodyparts = name_info.parts
113
+ end
114
+
115
+ faultpart = nil
116
+ OperationInfo.new(operation_style, op_name, optype_name, headerparts, bodyparts, faultpart, parent.soapaction)
117
+ end
118
+ end
119
+
120
+
121
+ end
122
+ end
@@ -0,0 +1,67 @@
1
+ # WSDL4R - Creating servant skelton code from WSDL.
2
+ # Copyright (C) 2002, 2003, 2005 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 'action_web_service/wsdl/info'
10
+ require 'action_web_service/wsdl/soap/classDefCreatorSupport'
11
+ require 'action_web_service/xsd/codegen'
12
+
13
+
14
+ module WSDL
15
+ module SOAP
16
+
17
+
18
+ class ServantSkeltonCreator
19
+ include ClassDefCreatorSupport
20
+ include XSD::CodeGen::GenSupport
21
+
22
+ attr_reader :definitions
23
+
24
+ def initialize(definitions)
25
+ @definitions = definitions
26
+ end
27
+
28
+ def dump(porttype = nil)
29
+ if porttype.nil?
30
+ result = ""
31
+ @definitions.porttypes.each do |type|
32
+ result << dump_porttype(type.name)
33
+ result << "\n"
34
+ end
35
+ else
36
+ result = dump_porttype(porttype)
37
+ end
38
+ result
39
+ end
40
+
41
+ private
42
+
43
+ def dump_porttype(name)
44
+ class_name = create_class_name(name)
45
+ c = XSD::CodeGen::ClassDef.new(class_name)
46
+ operations = @definitions.porttype(name).operations
47
+ operations.each do |operation|
48
+ name = safemethodname(operation.name.name)
49
+ input = operation.input
50
+ params = input.find_message.parts.collect { |part|
51
+ safevarname(part.name)
52
+ }
53
+ m = XSD::CodeGen::MethodDef.new(name, params) do <<-EOD
54
+ p [#{params.join(", ")}]
55
+ raise NotImplementedError.new
56
+ EOD
57
+ end
58
+ m.comment = dump_method_signature(operation)
59
+ c.add_method(m)
60
+ end
61
+ c.dump
62
+ end
63
+ end
64
+
65
+
66
+ end
67
+ end
@@ -0,0 +1,85 @@
1
+ # WSDL4R - Creating standalone server stub code from WSDL.
2
+ # Copyright (C) 2002, 2003, 2005 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 'action_web_service/wsdl/info'
10
+ require 'action_web_service/wsdl/soap/mappingRegistryCreator'
11
+ require 'action_web_service/wsdl/soap/methodDefCreator'
12
+ require 'action_web_service/wsdl/soap/classDefCreatorSupport'
13
+
14
+
15
+ module WSDL
16
+ module SOAP
17
+
18
+
19
+ class StandaloneServerStubCreator
20
+ include ClassDefCreatorSupport
21
+
22
+ attr_reader :definitions
23
+
24
+ def initialize(definitions)
25
+ @definitions = definitions
26
+ end
27
+
28
+ def dump(service_name)
29
+ warn("- Standalone stub can have only 1 port for now. So creating stub for the first port and rests are ignored.")
30
+ warn("- Standalone server stub ignores port location defined in WSDL. Location is http://localhost:10080/ by default. Generated client from WSDL must be configured to point this endpoint manually.")
31
+ port = @definitions.service(service_name).ports[0]
32
+ dump_porttype(port.porttype.name)
33
+ end
34
+
35
+ private
36
+
37
+ def dump_porttype(name)
38
+ class_name = create_class_name(name)
39
+ methoddef, types = MethodDefCreator.new(@definitions).dump(name)
40
+ mr_creator = MappingRegistryCreator.new(@definitions)
41
+
42
+ c1 = XSD::CodeGen::ClassDef.new(class_name)
43
+ c1.def_require("soap/rpc/standaloneServer")
44
+ c1.def_require("soap/mapping/registry")
45
+ c1.def_const("MappingRegistry", "::SOAP::Mapping::Registry.new")
46
+ c1.def_code(mr_creator.dump(types))
47
+ c1.def_code <<-EOD
48
+ Methods = [
49
+ #{methoddef.gsub(/^/, " ")}
50
+ ]
51
+ EOD
52
+ c2 = XSD::CodeGen::ClassDef.new(class_name + "App",
53
+ "::SOAP::RPC::StandaloneServer")
54
+ c2.def_method("initialize", "*arg") do
55
+ <<-EOD
56
+ super(*arg)
57
+ servant = #{class_name}.new
58
+ #{class_name}::Methods.each do |definitions|
59
+ opt = definitions.last
60
+ if opt[:request_style] == :document
61
+ @router.add_document_operation(servant, *definitions)
62
+ else
63
+ @router.add_rpc_operation(servant, *definitions)
64
+ end
65
+ end
66
+ self.mapping_registry = #{class_name}::MappingRegistry
67
+ EOD
68
+ end
69
+ c1.dump + "\n" + c2.dump + format(<<-EOD)
70
+
71
+ if $0 == __FILE__
72
+ # Change listen port.
73
+ server = #{class_name}App.new('app', nil, '0.0.0.0', 10080)
74
+ trap(:INT) do
75
+ server.shutdown
76
+ end
77
+ server.start
78
+ end
79
+ EOD
80
+ end
81
+ end
82
+
83
+
84
+ end
85
+ end
@@ -0,0 +1,176 @@
1
+ # WSDL4R - WSDL to ruby mapping library.
2
+ # Copyright (C) 2002-2005 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 'logger'
10
+ require 'action_web_service/xsd/qname'
11
+ require 'action_web_service/wsdl/importer'
12
+ require 'action_web_service/wsdl/soap/classDefCreator'
13
+ require 'action_web_service/wsdl/soap/servantSkeltonCreator'
14
+ require 'action_web_service/wsdl/soap/driverCreator'
15
+ require 'action_web_service/wsdl/soap/clientSkeltonCreator'
16
+ require 'action_web_service/wsdl/soap/standaloneServerStubCreator'
17
+ require 'action_web_service/wsdl/soap/cgiStubCreator'
18
+
19
+
20
+ module WSDL
21
+ module SOAP
22
+
23
+
24
+ class WSDL2Ruby
25
+ attr_accessor :location
26
+ attr_reader :opt
27
+ attr_accessor :logger
28
+ attr_accessor :basedir
29
+
30
+ def run
31
+ unless @location
32
+ raise RuntimeError, "WSDL location not given"
33
+ end
34
+ @wsdl = import(@location)
35
+ @name = @wsdl.name ? @wsdl.name.name : 'default'
36
+ create_file
37
+ end
38
+
39
+ private
40
+
41
+ def initialize
42
+ @location = nil
43
+ @opt = {}
44
+ @logger = Logger.new(STDERR)
45
+ @basedir = nil
46
+ @wsdl = nil
47
+ @name = nil
48
+ end
49
+
50
+ def create_file
51
+ create_classdef if @opt.key?('classdef')
52
+ create_servant_skelton(@opt['servant_skelton']) if @opt.key?('servant_skelton')
53
+ create_cgi_stub(@opt['cgi_stub']) if @opt.key?('cgi_stub')
54
+ create_standalone_server_stub(@opt['standalone_server_stub']) if @opt.key?('standalone_server_stub')
55
+ create_driver(@opt['driver']) if @opt.key?('driver')
56
+ create_client_skelton(@opt['client_skelton']) if @opt.key?('client_skelton')
57
+ end
58
+
59
+ def create_classdef
60
+ @logger.info { "Creating class definition." }
61
+ @classdef_filename = @name + '.rb'
62
+ check_file(@classdef_filename) or return
63
+ write_file(@classdef_filename) do |f|
64
+ f << WSDL::SOAP::ClassDefCreator.new(@wsdl).dump
65
+ end
66
+ end
67
+
68
+ def create_client_skelton(servicename)
69
+ @logger.info { "Creating client skelton." }
70
+ servicename ||= @wsdl.services[0].name.name
71
+ @client_skelton_filename = servicename + 'Client.rb'
72
+ check_file(@client_skelton_filename) or return
73
+ write_file(@client_skelton_filename) do |f|
74
+ f << shbang << "\n"
75
+ f << "require '#{@driver_filename}'\n\n" if @driver_filename
76
+ f << WSDL::SOAP::ClientSkeltonCreator.new(@wsdl).dump(
77
+ create_name(servicename))
78
+ end
79
+ end
80
+
81
+ def create_servant_skelton(porttypename)
82
+ @logger.info { "Creating servant skelton." }
83
+ @servant_skelton_filename = (porttypename || @name + 'Servant') + '.rb'
84
+ check_file(@servant_skelton_filename) or return
85
+ write_file(@servant_skelton_filename) do |f|
86
+ f << "require '#{@classdef_filename}'\n\n" if @classdef_filename
87
+ f << WSDL::SOAP::ServantSkeltonCreator.new(@wsdl).dump(
88
+ create_name(porttypename))
89
+ end
90
+ end
91
+
92
+ def create_cgi_stub(servicename)
93
+ @logger.info { "Creating CGI stub." }
94
+ servicename ||= @wsdl.services[0].name.name
95
+ @cgi_stubFilename = servicename + '.cgi'
96
+ check_file(@cgi_stubFilename) or return
97
+ write_file(@cgi_stubFilename) do |f|
98
+ f << shbang << "\n"
99
+ if @servant_skelton_filename
100
+ f << "require '#{@servant_skelton_filename}'\n\n"
101
+ end
102
+ f << WSDL::SOAP::CGIStubCreator.new(@wsdl).dump(create_name(servicename))
103
+ end
104
+ end
105
+
106
+ def create_standalone_server_stub(servicename)
107
+ @logger.info { "Creating standalone stub." }
108
+ servicename ||= @wsdl.services[0].name.name
109
+ @standalone_server_stub_filename = servicename + '.rb'
110
+ check_file(@standalone_server_stub_filename) or return
111
+ write_file(@standalone_server_stub_filename) do |f|
112
+ f << shbang << "\n"
113
+ f << "require '#{@servant_skelton_filename}'\n\n" if @servant_skelton_filename
114
+ f << WSDL::SOAP::StandaloneServerStubCreator.new(@wsdl).dump(
115
+ create_name(servicename))
116
+ end
117
+ end
118
+
119
+ def create_driver(porttypename)
120
+ @logger.info { "Creating driver." }
121
+ @driver_filename = (porttypename || @name) + 'Driver.rb'
122
+ check_file(@driver_filename) or return
123
+ write_file(@driver_filename) do |f|
124
+ f << "require '#{@classdef_filename}'\n\n" if @classdef_filename
125
+ f << WSDL::SOAP::DriverCreator.new(@wsdl).dump(
126
+ create_name(porttypename))
127
+ end
128
+ end
129
+
130
+ def write_file(filename)
131
+ if @basedir
132
+ filename = File.join(basedir, filename)
133
+ end
134
+ File.open(filename, "w") do |f|
135
+ yield f
136
+ end
137
+ end
138
+
139
+ def check_file(filename)
140
+ if @basedir
141
+ filename = File.join(basedir, filename)
142
+ end
143
+ if FileTest.exist?(filename)
144
+ if @opt.key?('force')
145
+ @logger.warn {
146
+ "File '#{filename}' exists but overrides it."
147
+ }
148
+ true
149
+ else
150
+ @logger.warn {
151
+ "File '#{filename}' exists. #{$0} did not override it."
152
+ }
153
+ false
154
+ end
155
+ else
156
+ @logger.info { "Creates file '#{filename}'." }
157
+ true
158
+ end
159
+ end
160
+
161
+ def shbang
162
+ "#!/usr/bin/env ruby"
163
+ end
164
+
165
+ def create_name(name)
166
+ name ? XSD::QName.new(@wsdl.targetnamespace, name) : nil
167
+ end
168
+
169
+ def import(location)
170
+ WSDL::Importer.import(location)
171
+ end
172
+ end
173
+
174
+
175
+ end
176
+ end