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,161 @@
|
|
1
|
+
# WSDL4R - SOAP complexType definition for WSDL.
|
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/xmlSchema/complexType'
|
10
|
+
require 'action_web_service/soap/mapping'
|
11
|
+
|
12
|
+
|
13
|
+
module WSDL
|
14
|
+
module XMLSchema
|
15
|
+
|
16
|
+
|
17
|
+
class ComplexType < Info
|
18
|
+
def compoundtype
|
19
|
+
@compoundtype ||= check_type
|
20
|
+
end
|
21
|
+
|
22
|
+
def check_type
|
23
|
+
if content
|
24
|
+
if attributes.empty? and
|
25
|
+
content.elements.size == 1 and content.elements[0].maxoccurs != '1'
|
26
|
+
if name == ::SOAP::Mapping::MapQName
|
27
|
+
:TYPE_MAP
|
28
|
+
else
|
29
|
+
:TYPE_ARRAY
|
30
|
+
end
|
31
|
+
else
|
32
|
+
:TYPE_STRUCT
|
33
|
+
end
|
34
|
+
elsif complexcontent
|
35
|
+
if complexcontent.base == ::SOAP::ValueArrayName
|
36
|
+
:TYPE_ARRAY
|
37
|
+
else
|
38
|
+
complexcontent.basetype.check_type
|
39
|
+
end
|
40
|
+
elsif simplecontent
|
41
|
+
:TYPE_SIMPLE
|
42
|
+
elsif !attributes.empty?
|
43
|
+
:TYPE_STRUCT
|
44
|
+
else # empty complexType definition (seen in partner.wsdl of salesforce)
|
45
|
+
:TYPE_EMPTY
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def child_type(name = nil)
|
50
|
+
case compoundtype
|
51
|
+
when :TYPE_STRUCT
|
52
|
+
if ele = find_element(name)
|
53
|
+
ele.type
|
54
|
+
elsif ele = find_element_by_name(name.name)
|
55
|
+
ele.type
|
56
|
+
end
|
57
|
+
when :TYPE_ARRAY
|
58
|
+
@contenttype ||= content_arytype
|
59
|
+
when :TYPE_MAP
|
60
|
+
item_ele = find_element_by_name("item") or
|
61
|
+
raise RuntimeError.new("'item' element not found in Map definition.")
|
62
|
+
content = item_ele.local_complextype or
|
63
|
+
raise RuntimeError.new("No complexType definition for 'item'.")
|
64
|
+
if ele = content.find_element(name)
|
65
|
+
ele.type
|
66
|
+
elsif ele = content.find_element_by_name(name.name)
|
67
|
+
ele.type
|
68
|
+
end
|
69
|
+
else
|
70
|
+
raise NotImplementedError.new("Unknown kind of complexType.")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def child_defined_complextype(name)
|
75
|
+
ele = nil
|
76
|
+
case compoundtype
|
77
|
+
when :TYPE_STRUCT, :TYPE_MAP
|
78
|
+
unless ele = find_element(name)
|
79
|
+
if name.namespace.nil?
|
80
|
+
ele = find_element_by_name(name.name)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
when :TYPE_ARRAY
|
84
|
+
if content.elements.size == 1
|
85
|
+
ele = content.elements[0]
|
86
|
+
else
|
87
|
+
raise RuntimeError.new("Assert: must not reach.")
|
88
|
+
end
|
89
|
+
else
|
90
|
+
raise RuntimeError.new("Assert: Not implemented.")
|
91
|
+
end
|
92
|
+
unless ele
|
93
|
+
raise RuntimeError.new("Cannot find #{name} as a children of #{@name}.")
|
94
|
+
end
|
95
|
+
ele.local_complextype
|
96
|
+
end
|
97
|
+
|
98
|
+
def find_arytype
|
99
|
+
unless compoundtype == :TYPE_ARRAY
|
100
|
+
raise RuntimeError.new("Assert: not for array")
|
101
|
+
end
|
102
|
+
if complexcontent
|
103
|
+
complexcontent.attributes.each do |attribute|
|
104
|
+
if attribute.ref == ::SOAP::AttrArrayTypeName
|
105
|
+
return attribute.arytype
|
106
|
+
end
|
107
|
+
end
|
108
|
+
if check_array_content(complexcontent.content)
|
109
|
+
return element_simpletype(complexcontent.content.elements[0])
|
110
|
+
end
|
111
|
+
elsif check_array_content(content)
|
112
|
+
return element_simpletype(content.elements[0])
|
113
|
+
end
|
114
|
+
raise RuntimeError.new("Assert: Unknown array definition.")
|
115
|
+
end
|
116
|
+
|
117
|
+
def find_aryelement
|
118
|
+
unless compoundtype == :TYPE_ARRAY
|
119
|
+
raise RuntimeError.new("Assert: not for array")
|
120
|
+
end
|
121
|
+
if complexcontent
|
122
|
+
if check_array_content(complexcontent.content)
|
123
|
+
return complexcontent.content.elements[0]
|
124
|
+
end
|
125
|
+
elsif check_array_content(content)
|
126
|
+
return content.elements[0]
|
127
|
+
end
|
128
|
+
nil # use default item name
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
def element_simpletype(element)
|
134
|
+
if element.type
|
135
|
+
element.type
|
136
|
+
elsif element.local_simpletype
|
137
|
+
element.local_simpletype.base
|
138
|
+
else
|
139
|
+
nil
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def check_array_content(content)
|
144
|
+
content and content.elements.size == 1 and
|
145
|
+
content.elements[0].maxoccurs != '1'
|
146
|
+
end
|
147
|
+
|
148
|
+
def content_arytype
|
149
|
+
if arytype = find_arytype
|
150
|
+
ns = arytype.namespace
|
151
|
+
name = arytype.name.sub(/\[(?:,)*\]$/, '')
|
152
|
+
XSD::QName.new(ns, name)
|
153
|
+
else
|
154
|
+
nil
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
|
160
|
+
end
|
161
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# WSDL4R - WSDL SOAP binding data definitions.
|
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/xsd/qname'
|
10
|
+
require 'action_web_service/wsdl/soap/definitions'
|
11
|
+
require 'action_web_service/wsdl/soap/binding'
|
12
|
+
require 'action_web_service/wsdl/soap/operation'
|
13
|
+
require 'action_web_service/wsdl/soap/body'
|
14
|
+
require 'action_web_service/wsdl/soap/element'
|
15
|
+
require 'action_web_service/wsdl/soap/header'
|
16
|
+
require 'action_web_service/wsdl/soap/headerfault'
|
17
|
+
require 'action_web_service/wsdl/soap/fault'
|
18
|
+
require 'action_web_service/wsdl/soap/address'
|
19
|
+
require 'action_web_service/wsdl/soap/complexType'
|
20
|
+
|
21
|
+
|
22
|
+
module WSDL
|
23
|
+
module SOAP
|
24
|
+
|
25
|
+
|
26
|
+
HeaderFaultName = XSD::QName.new(SOAPBindingNamespace, 'headerfault')
|
27
|
+
|
28
|
+
LocationAttrName = XSD::QName.new(nil, 'location')
|
29
|
+
StyleAttrName = XSD::QName.new(nil, 'style')
|
30
|
+
TransportAttrName = XSD::QName.new(nil, 'transport')
|
31
|
+
UseAttrName = XSD::QName.new(nil, 'use')
|
32
|
+
PartsAttrName = XSD::QName.new(nil, 'parts')
|
33
|
+
PartAttrName = XSD::QName.new(nil, 'part')
|
34
|
+
NameAttrName = XSD::QName.new(nil, 'name')
|
35
|
+
MessageAttrName = XSD::QName.new(nil, 'message')
|
36
|
+
EncodingStyleAttrName = XSD::QName.new(nil, 'encodingStyle')
|
37
|
+
NamespaceAttrName = XSD::QName.new(nil, 'namespace')
|
38
|
+
SOAPActionAttrName = XSD::QName.new(nil, 'action_web_service/soapAction')
|
39
|
+
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# WSDL4R - WSDL additional definitions for SOAP.
|
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 'action_web_service/wsdl/info'
|
10
|
+
require 'action_web_service/xsd/namedelements'
|
11
|
+
require 'action_web_service/soap/mapping'
|
12
|
+
|
13
|
+
|
14
|
+
module WSDL
|
15
|
+
|
16
|
+
|
17
|
+
class Definitions < Info
|
18
|
+
def self.soap_rpc_complextypes
|
19
|
+
types = XSD::NamedElements.new
|
20
|
+
types << array_complextype
|
21
|
+
types << fault_complextype
|
22
|
+
types << exception_complextype
|
23
|
+
types
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.array_complextype
|
27
|
+
type = XMLSchema::ComplexType.new(::SOAP::ValueArrayName)
|
28
|
+
type.complexcontent = XMLSchema::ComplexContent.new
|
29
|
+
type.complexcontent.base = ::SOAP::ValueArrayName
|
30
|
+
attr = XMLSchema::Attribute.new
|
31
|
+
attr.ref = ::SOAP::AttrArrayTypeName
|
32
|
+
anytype = XSD::AnyTypeName.dup
|
33
|
+
anytype.name += '[]'
|
34
|
+
attr.arytype = anytype
|
35
|
+
type.complexcontent.attributes << attr
|
36
|
+
type
|
37
|
+
end
|
38
|
+
|
39
|
+
=begin
|
40
|
+
<xs:complexType name="Fault" final="extension">
|
41
|
+
<xs:sequence>
|
42
|
+
<xs:element name="faultcode" type="xs:QName" />
|
43
|
+
<xs:element name="faultstring" type="xs:string" />
|
44
|
+
<xs:element name="faultactor" type="xs:anyURI" minOccurs="0" />
|
45
|
+
<xs:element name="detail" type="tns:detail" minOccurs="0" />
|
46
|
+
</xs:sequence>
|
47
|
+
</xs:complexType>
|
48
|
+
=end
|
49
|
+
def self.fault_complextype
|
50
|
+
type = XMLSchema::ComplexType.new(::SOAP::EleFaultName)
|
51
|
+
faultcode = XMLSchema::Element.new(::SOAP::EleFaultCodeName, XSD::XSDQName::Type)
|
52
|
+
faultstring = XMLSchema::Element.new(::SOAP::EleFaultStringName, XSD::XSDString::Type)
|
53
|
+
faultactor = XMLSchema::Element.new(::SOAP::EleFaultActorName, XSD::XSDAnyURI::Type)
|
54
|
+
faultactor.minoccurs = 0
|
55
|
+
detail = XMLSchema::Element.new(::SOAP::EleFaultDetailName, XSD::AnyTypeName)
|
56
|
+
detail.minoccurs = 0
|
57
|
+
type.all_elements = [faultcode, faultstring, faultactor, detail]
|
58
|
+
type.final = 'extension'
|
59
|
+
type
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.exception_complextype
|
63
|
+
type = XMLSchema::ComplexType.new(XSD::QName.new(
|
64
|
+
::SOAP::Mapping::RubyCustomTypeNamespace, 'SOAPException'))
|
65
|
+
excn_name = XMLSchema::Element.new(XSD::QName.new(nil, 'excn_type_name'), XSD::XSDString::Type)
|
66
|
+
cause = XMLSchema::Element.new(XSD::QName.new(nil, 'cause'), XSD::AnyTypeName)
|
67
|
+
backtrace = XMLSchema::Element.new(XSD::QName.new(nil, 'backtrace'), ::SOAP::ValueArrayName)
|
68
|
+
message = XMLSchema::Element.new(XSD::QName.new(nil, 'message'), XSD::XSDString::Type)
|
69
|
+
type.all_elements = [excn_name, cause, backtrace, message]
|
70
|
+
type
|
71
|
+
end
|
72
|
+
|
73
|
+
def soap_rpc_complextypes(binding)
|
74
|
+
types = rpc_operation_complextypes(binding)
|
75
|
+
types + self.class.soap_rpc_complextypes
|
76
|
+
end
|
77
|
+
|
78
|
+
def collect_faulttypes
|
79
|
+
result = []
|
80
|
+
collect_fault_messages.each do |name|
|
81
|
+
faultparts = message(name).parts
|
82
|
+
if faultparts.size != 1
|
83
|
+
raise RuntimeError.new("expecting fault message to have only 1 part")
|
84
|
+
end
|
85
|
+
if result.index(faultparts[0].type).nil?
|
86
|
+
result << faultparts[0].type
|
87
|
+
end
|
88
|
+
end
|
89
|
+
result
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
def collect_fault_messages
|
95
|
+
result = []
|
96
|
+
porttypes.each do |porttype|
|
97
|
+
porttype.operations.each do |operation|
|
98
|
+
operation.fault.each do |fault|
|
99
|
+
if result.index(fault.message).nil?
|
100
|
+
result << fault.message
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
result
|
106
|
+
end
|
107
|
+
|
108
|
+
def rpc_operation_complextypes(binding)
|
109
|
+
types = XSD::NamedElements.new
|
110
|
+
binding.operations.each do |op_bind|
|
111
|
+
if op_bind_rpc?(op_bind)
|
112
|
+
operation = op_bind.find_operation
|
113
|
+
if op_bind.input
|
114
|
+
type = XMLSchema::ComplexType.new(op_bind.soapoperation_name)
|
115
|
+
message = messages[operation.input.message]
|
116
|
+
type.sequence_elements = elements_from_message(message)
|
117
|
+
types << type
|
118
|
+
end
|
119
|
+
if op_bind.output
|
120
|
+
type = XMLSchema::ComplexType.new(operation.outputname)
|
121
|
+
message = messages[operation.output.message]
|
122
|
+
type.sequence_elements = elements_from_message(message)
|
123
|
+
types << type
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
types
|
128
|
+
end
|
129
|
+
|
130
|
+
def op_bind_rpc?(op_bind)
|
131
|
+
op_bind.soapoperation_style == :rpc
|
132
|
+
end
|
133
|
+
|
134
|
+
def elements_from_message(message)
|
135
|
+
message.parts.collect { |part|
|
136
|
+
if part.element
|
137
|
+
collect_elements[part.element]
|
138
|
+
elsif part.name.nil? or part.type.nil?
|
139
|
+
raise RuntimeError.new("part of a message must be an element or typed")
|
140
|
+
else
|
141
|
+
qname = XSD::QName.new(nil, part.name)
|
142
|
+
XMLSchema::Element.new(qname, part.type)
|
143
|
+
end
|
144
|
+
}
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
|
149
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# WSDL4R - Creating driver 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
|
+
require 'action_web_service/xsd/codegen'
|
14
|
+
|
15
|
+
|
16
|
+
module WSDL
|
17
|
+
module SOAP
|
18
|
+
|
19
|
+
|
20
|
+
class DriverCreator
|
21
|
+
include ClassDefCreatorSupport
|
22
|
+
|
23
|
+
attr_reader :definitions
|
24
|
+
|
25
|
+
def initialize(definitions)
|
26
|
+
@definitions = definitions
|
27
|
+
end
|
28
|
+
|
29
|
+
def dump(porttype = nil)
|
30
|
+
if porttype.nil?
|
31
|
+
result = ""
|
32
|
+
@definitions.porttypes.each do |type|
|
33
|
+
result << dump_porttype(type.name)
|
34
|
+
result << "\n"
|
35
|
+
end
|
36
|
+
else
|
37
|
+
result = dump_porttype(porttype)
|
38
|
+
end
|
39
|
+
result
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def dump_porttype(name)
|
45
|
+
class_name = create_class_name(name)
|
46
|
+
methoddef, types = MethodDefCreator.new(@definitions).dump(name)
|
47
|
+
mr_creator = MappingRegistryCreator.new(@definitions)
|
48
|
+
binding = @definitions.bindings.find { |item| item.type == name }
|
49
|
+
return '' unless binding.soapbinding # not a SOAP binding
|
50
|
+
address = @definitions.porttype(name).locations[0]
|
51
|
+
|
52
|
+
c = XSD::CodeGen::ClassDef.new(class_name, "::SOAP::RPC::Driver")
|
53
|
+
c.def_require("soap/rpc/driver")
|
54
|
+
c.def_const("MappingRegistry", "::SOAP::Mapping::Registry.new")
|
55
|
+
c.def_const("DefaultEndpointUrl", ndq(address))
|
56
|
+
c.def_code(mr_creator.dump(types))
|
57
|
+
c.def_code <<-EOD
|
58
|
+
Methods = [
|
59
|
+
#{methoddef.gsub(/^/, " ")}
|
60
|
+
]
|
61
|
+
EOD
|
62
|
+
c.def_method("initialize", "endpoint_url = nil") do
|
63
|
+
<<-EOD
|
64
|
+
endpoint_url ||= DefaultEndpointUrl
|
65
|
+
super(endpoint_url, nil)
|
66
|
+
self.mapping_registry = MappingRegistry
|
67
|
+
init_methods
|
68
|
+
EOD
|
69
|
+
end
|
70
|
+
c.def_privatemethod("init_methods") do
|
71
|
+
<<-EOD
|
72
|
+
Methods.each do |definitions|
|
73
|
+
opt = definitions.last
|
74
|
+
if opt[:request_style] == :document
|
75
|
+
add_document_operation(*definitions)
|
76
|
+
else
|
77
|
+
add_rpc_operation(*definitions)
|
78
|
+
qname = definitions[0]
|
79
|
+
name = definitions[2]
|
80
|
+
if qname.name != name and qname.name.capitalize == name.capitalize
|
81
|
+
::SOAP::Mapping.define_singleton_method(self, qname.name) do |*arg|
|
82
|
+
__send__(name, *arg)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
EOD
|
88
|
+
end
|
89
|
+
c.dump
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|