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.
- data/CHANGELOG +320 -0
- data/MIT-LICENSE +21 -0
- data/README +381 -0
- data/Rakefile +180 -0
- data/TODO +32 -0
- data/lib/action_web_service.rb +71 -0
- data/lib/action_web_service/api.rb +297 -0
- data/lib/action_web_service/base.rb +38 -0
- data/lib/action_web_service/casting.rb +149 -0
- data/lib/action_web_service/client.rb +3 -0
- data/lib/action_web_service/client/base.rb +28 -0
- data/lib/action_web_service/client/soap_client.rb +113 -0
- data/lib/action_web_service/client/xmlrpc_client.rb +58 -0
- data/lib/action_web_service/container.rb +3 -0
- data/lib/action_web_service/container/action_controller_container.rb +93 -0
- data/lib/action_web_service/container/delegated_container.rb +86 -0
- data/lib/action_web_service/container/direct_container.rb +69 -0
- data/lib/action_web_service/dispatcher.rb +2 -0
- data/lib/action_web_service/dispatcher/abstract.rb +207 -0
- data/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +379 -0
- data/lib/action_web_service/invocation.rb +202 -0
- data/lib/action_web_service/protocol.rb +4 -0
- data/lib/action_web_service/protocol/abstract.rb +115 -0
- data/lib/action_web_service/protocol/discovery.rb +37 -0
- data/lib/action_web_service/protocol/soap_protocol.rb +176 -0
- data/lib/action_web_service/protocol/soap_protocol/marshaler.rb +242 -0
- data/lib/action_web_service/protocol/xmlrpc_protocol.rb +122 -0
- data/lib/action_web_service/scaffolding.rb +281 -0
- data/lib/action_web_service/soap/attachment.rb +107 -0
- data/lib/action_web_service/soap/baseData.rb +942 -0
- data/lib/action_web_service/soap/element.rb +258 -0
- data/lib/action_web_service/soap/encodingstyle/aspDotNetHandler.rb +213 -0
- data/lib/action_web_service/soap/encodingstyle/handler.rb +100 -0
- data/lib/action_web_service/soap/encodingstyle/literalHandler.rb +226 -0
- data/lib/action_web_service/soap/encodingstyle/soapHandler.rb +582 -0
- data/lib/action_web_service/soap/generator.rb +268 -0
- data/lib/action_web_service/soap/header/handler.rb +57 -0
- data/lib/action_web_service/soap/header/handlerset.rb +70 -0
- data/lib/action_web_service/soap/header/simplehandler.rb +44 -0
- data/lib/action_web_service/soap/httpconfigloader.rb +119 -0
- data/lib/action_web_service/soap/mapping.rb +10 -0
- data/lib/action_web_service/soap/mapping/factory.rb +355 -0
- data/lib/action_web_service/soap/mapping/mapping.rb +381 -0
- data/lib/action_web_service/soap/mapping/registry.rb +541 -0
- data/lib/action_web_service/soap/mapping/rubytypeFactory.rb +475 -0
- data/lib/action_web_service/soap/mapping/typeMap.rb +50 -0
- data/lib/action_web_service/soap/mapping/wsdlencodedregistry.rb +280 -0
- data/lib/action_web_service/soap/mapping/wsdlliteralregistry.rb +418 -0
- data/lib/action_web_service/soap/marshal.rb +59 -0
- data/lib/action_web_service/soap/mimemessage.rb +240 -0
- data/lib/action_web_service/soap/netHttpClient.rb +190 -0
- data/lib/action_web_service/soap/parser.rb +251 -0
- data/lib/action_web_service/soap/processor.rb +66 -0
- data/lib/action_web_service/soap/property.rb +333 -0
- data/lib/action_web_service/soap/rpc/cgistub.rb +206 -0
- data/lib/action_web_service/soap/rpc/driver.rb +254 -0
- data/lib/action_web_service/soap/rpc/element.rb +325 -0
- data/lib/action_web_service/soap/rpc/httpserver.rb +129 -0
- data/lib/action_web_service/soap/rpc/proxy.rb +497 -0
- data/lib/action_web_service/soap/rpc/router.rb +594 -0
- data/lib/action_web_service/soap/rpc/rpc.rb +25 -0
- data/lib/action_web_service/soap/rpc/soaplet.rb +162 -0
- data/lib/action_web_service/soap/rpc/standaloneServer.rb +43 -0
- data/lib/action_web_service/soap/soap.rb +140 -0
- data/lib/action_web_service/soap/streamHandler.rb +229 -0
- data/lib/action_web_service/soap/wsdlDriver.rb +575 -0
- data/lib/action_web_service/struct.rb +64 -0
- data/lib/action_web_service/support/class_inheritable_options.rb +28 -0
- data/lib/action_web_service/support/signature_types.rb +227 -0
- data/lib/action_web_service/test_invoke.rb +110 -0
- data/lib/action_web_service/version.rb +9 -0
- data/lib/action_web_service/wsdl/binding.rb +65 -0
- data/lib/action_web_service/wsdl/data.rb +64 -0
- data/lib/action_web_service/wsdl/definitions.rb +250 -0
- data/lib/action_web_service/wsdl/documentation.rb +32 -0
- data/lib/action_web_service/wsdl/import.rb +80 -0
- data/lib/action_web_service/wsdl/importer.rb +38 -0
- data/lib/action_web_service/wsdl/info.rb +39 -0
- data/lib/action_web_service/wsdl/message.rb +54 -0
- data/lib/action_web_service/wsdl/operation.rb +130 -0
- data/lib/action_web_service/wsdl/operationBinding.rb +108 -0
- data/lib/action_web_service/wsdl/param.rb +85 -0
- data/lib/action_web_service/wsdl/parser.rb +163 -0
- data/lib/action_web_service/wsdl/part.rb +52 -0
- data/lib/action_web_service/wsdl/port.rb +84 -0
- data/lib/action_web_service/wsdl/portType.rb +73 -0
- data/lib/action_web_service/wsdl/service.rb +61 -0
- data/lib/action_web_service/wsdl/soap/address.rb +40 -0
- data/lib/action_web_service/wsdl/soap/binding.rb +49 -0
- data/lib/action_web_service/wsdl/soap/body.rb +56 -0
- data/lib/action_web_service/wsdl/soap/cgiStubCreator.rb +76 -0
- data/lib/action_web_service/wsdl/soap/classDefCreator.rb +314 -0
- data/lib/action_web_service/wsdl/soap/classDefCreatorSupport.rb +126 -0
- data/lib/action_web_service/wsdl/soap/clientSkeltonCreator.rb +78 -0
- data/lib/action_web_service/wsdl/soap/complexType.rb +161 -0
- data/lib/action_web_service/wsdl/soap/data.rb +42 -0
- data/lib/action_web_service/wsdl/soap/definitions.rb +149 -0
- data/lib/action_web_service/wsdl/soap/driverCreator.rb +95 -0
- data/lib/action_web_service/wsdl/soap/element.rb +28 -0
- data/lib/action_web_service/wsdl/soap/fault.rb +56 -0
- data/lib/action_web_service/wsdl/soap/header.rb +86 -0
- data/lib/action_web_service/wsdl/soap/headerfault.rb +56 -0
- data/lib/action_web_service/wsdl/soap/mappingRegistryCreator.rb +92 -0
- data/lib/action_web_service/wsdl/soap/methodDefCreator.rb +228 -0
- data/lib/action_web_service/wsdl/soap/operation.rb +122 -0
- data/lib/action_web_service/wsdl/soap/servantSkeltonCreator.rb +67 -0
- data/lib/action_web_service/wsdl/soap/standaloneServerStubCreator.rb +85 -0
- data/lib/action_web_service/wsdl/soap/wsdl2ruby.rb +176 -0
- data/lib/action_web_service/wsdl/types.rb +43 -0
- data/lib/action_web_service/wsdl/wsdl.rb +23 -0
- data/lib/action_web_service/wsdl/xmlSchema/all.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/annotation.rb +34 -0
- data/lib/action_web_service/wsdl/xmlSchema/any.rb +56 -0
- data/lib/action_web_service/wsdl/xmlSchema/attribute.rb +127 -0
- data/lib/action_web_service/wsdl/xmlSchema/choice.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/complexContent.rb +92 -0
- data/lib/action_web_service/wsdl/xmlSchema/complexType.rb +139 -0
- data/lib/action_web_service/wsdl/xmlSchema/content.rb +96 -0
- data/lib/action_web_service/wsdl/xmlSchema/data.rb +80 -0
- data/lib/action_web_service/wsdl/xmlSchema/element.rb +154 -0
- data/lib/action_web_service/wsdl/xmlSchema/enumeration.rb +36 -0
- data/lib/action_web_service/wsdl/xmlSchema/import.rb +65 -0
- data/lib/action_web_service/wsdl/xmlSchema/importer.rb +87 -0
- data/lib/action_web_service/wsdl/xmlSchema/include.rb +54 -0
- data/lib/action_web_service/wsdl/xmlSchema/length.rb +35 -0
- data/lib/action_web_service/wsdl/xmlSchema/parser.rb +166 -0
- data/lib/action_web_service/wsdl/xmlSchema/pattern.rb +36 -0
- data/lib/action_web_service/wsdl/xmlSchema/schema.rb +143 -0
- data/lib/action_web_service/wsdl/xmlSchema/sequence.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleContent.rb +65 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleExtension.rb +54 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleRestriction.rb +73 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleType.rb +73 -0
- data/lib/action_web_service/wsdl/xmlSchema/unique.rb +34 -0
- data/lib/action_web_service/wsdl/xmlSchema/xsd2ruby.rb +107 -0
- data/lib/action_web_service/xsd/charset.rb +187 -0
- data/lib/action_web_service/xsd/codegen.rb +12 -0
- data/lib/action_web_service/xsd/codegen/classdef.rb +203 -0
- data/lib/action_web_service/xsd/codegen/commentdef.rb +34 -0
- data/lib/action_web_service/xsd/codegen/gensupport.rb +166 -0
- data/lib/action_web_service/xsd/codegen/methoddef.rb +63 -0
- data/lib/action_web_service/xsd/codegen/moduledef.rb +191 -0
- data/lib/action_web_service/xsd/datatypes.rb +1269 -0
- data/lib/action_web_service/xsd/datatypes1999.rb +20 -0
- data/lib/action_web_service/xsd/iconvcharset.rb +33 -0
- data/lib/action_web_service/xsd/mapping.rb +42 -0
- data/lib/action_web_service/xsd/namedelements.rb +95 -0
- data/lib/action_web_service/xsd/ns.rb +140 -0
- data/lib/action_web_service/xsd/qname.rb +78 -0
- data/lib/action_web_service/xsd/xmlparser.rb +61 -0
- data/lib/action_web_service/xsd/xmlparser/parser.rb +96 -0
- data/lib/action_web_service/xsd/xmlparser/rexmlparser.rb +54 -0
- data/lib/action_web_service/xsd/xmlparser/xmlparser.rb +50 -0
- data/lib/action_web_service/xsd/xmlparser/xmlscanner.rb +147 -0
- data/lib/actionwebservice.rb +1 -0
- data/setup.rb +1379 -0
- data/test/abstract_client.rb +183 -0
- data/test/abstract_dispatcher.rb +548 -0
- data/test/abstract_unit.rb +45 -0
- data/test/api_test.rb +103 -0
- data/test/apis/auto_load_api.rb +3 -0
- data/test/apis/broken_auto_load_api.rb +2 -0
- data/test/base_test.rb +42 -0
- data/test/casting_test.rb +95 -0
- data/test/client_soap_test.rb +156 -0
- data/test/client_xmlrpc_test.rb +153 -0
- data/test/container_test.rb +73 -0
- data/test/dispatcher_action_controller_soap_test.rb +139 -0
- data/test/dispatcher_action_controller_xmlrpc_test.rb +59 -0
- data/test/fixtures/db_definitions/mysql.sql +8 -0
- data/test/fixtures/db_definitions/sqlite3.sql +8 -0
- data/test/fixtures/users.yml +12 -0
- data/test/gencov +3 -0
- data/test/invocation_test.rb +185 -0
- data/test/run +6 -0
- data/test/scaffolded_controller_test.rb +146 -0
- data/test/struct_test.rb +52 -0
- data/test/test_invoke_test.rb +112 -0
- 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
|