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,28 @@
|
|
1
|
+
# WSDL4R - XMLSchema element definition for WSDL.
|
2
|
+
# Copyright (C) 2004 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/element'
|
10
|
+
|
11
|
+
|
12
|
+
module WSDL
|
13
|
+
module XMLSchema
|
14
|
+
|
15
|
+
|
16
|
+
class Element < Info
|
17
|
+
def map_as_array?
|
18
|
+
maxoccurs != '1'
|
19
|
+
end
|
20
|
+
|
21
|
+
def attributes
|
22
|
+
@local_complextype.attributes
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# WSDL4R - WSDL SOAP body 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 Fault < Info
|
17
|
+
attr_reader :name # required
|
18
|
+
attr_reader :use # required
|
19
|
+
attr_reader :encodingstyle
|
20
|
+
attr_reader :namespace
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
super
|
24
|
+
@name = nil
|
25
|
+
@use = nil
|
26
|
+
@encodingstyle = nil
|
27
|
+
@namespace = nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def targetnamespace
|
31
|
+
parent.targetnamespace
|
32
|
+
end
|
33
|
+
|
34
|
+
def parse_element(element)
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
|
38
|
+
def parse_attr(attr, value)
|
39
|
+
case attr
|
40
|
+
when NameAttrName
|
41
|
+
@name = XSD::QName.new(targetnamespace, value.source)
|
42
|
+
when UseAttrName
|
43
|
+
@use = value.source
|
44
|
+
when EncodingStyleAttrName
|
45
|
+
@encodingstyle = value.source
|
46
|
+
when NamespaceAttrName
|
47
|
+
@namespace = value.source
|
48
|
+
else
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# WSDL4R - WSDL SOAP body 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 Header < Info
|
17
|
+
attr_reader :headerfault
|
18
|
+
|
19
|
+
attr_reader :message # required
|
20
|
+
attr_reader :part # required
|
21
|
+
attr_reader :use # required
|
22
|
+
attr_reader :encodingstyle
|
23
|
+
attr_reader :namespace
|
24
|
+
|
25
|
+
def initialize
|
26
|
+
super
|
27
|
+
@message = nil
|
28
|
+
@part = nil
|
29
|
+
@use = nil
|
30
|
+
@encodingstyle = nil
|
31
|
+
@namespace = nil
|
32
|
+
@headerfault = nil
|
33
|
+
end
|
34
|
+
|
35
|
+
def targetnamespace
|
36
|
+
parent.targetnamespace
|
37
|
+
end
|
38
|
+
|
39
|
+
def find_message
|
40
|
+
root.message(@message) or raise RuntimeError.new("#{@message} not found")
|
41
|
+
end
|
42
|
+
|
43
|
+
def find_part
|
44
|
+
find_message.parts.each do |part|
|
45
|
+
if part.name == @part
|
46
|
+
return part
|
47
|
+
end
|
48
|
+
end
|
49
|
+
raise RuntimeError.new("#{@part} not found")
|
50
|
+
end
|
51
|
+
|
52
|
+
def parse_element(element)
|
53
|
+
case element
|
54
|
+
when HeaderFaultName
|
55
|
+
o = WSDL::SOAP::HeaderFault.new
|
56
|
+
@headerfault = o
|
57
|
+
o
|
58
|
+
else
|
59
|
+
nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def parse_attr(attr, value)
|
64
|
+
case attr
|
65
|
+
when MessageAttrName
|
66
|
+
if value.namespace.nil?
|
67
|
+
value = XSD::QName.new(targetnamespace, value.source)
|
68
|
+
end
|
69
|
+
@message = value
|
70
|
+
when PartAttrName
|
71
|
+
@part = value.source
|
72
|
+
when UseAttrName
|
73
|
+
@use = value.source
|
74
|
+
when EncodingStyleAttrName
|
75
|
+
@encodingstyle = value.source
|
76
|
+
when NamespaceAttrName
|
77
|
+
@namespace = value.source
|
78
|
+
else
|
79
|
+
nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# WSDL4R - WSDL SOAP body 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 HeaderFault < Info
|
17
|
+
attr_reader :message # required
|
18
|
+
attr_reader :part # required
|
19
|
+
attr_reader :use # required
|
20
|
+
attr_reader :encodingstyle
|
21
|
+
attr_reader :namespace
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
super
|
25
|
+
@message = nil
|
26
|
+
@part = nil
|
27
|
+
@use = nil
|
28
|
+
@encodingstyle = nil
|
29
|
+
@namespace = nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def parse_element(element)
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def parse_attr(attr, value)
|
37
|
+
case attr
|
38
|
+
when MessageAttrName
|
39
|
+
@message = value
|
40
|
+
when PartAttrName
|
41
|
+
@part = value.source
|
42
|
+
when UseAttrName
|
43
|
+
@use = value.source
|
44
|
+
when EncodingStyleAttrName
|
45
|
+
@encodingstyle = value.source
|
46
|
+
when NamespaceAttrName
|
47
|
+
@namespace = value.source
|
48
|
+
else
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# WSDL4R - Creating MappingRegistry 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
|
+
|
12
|
+
|
13
|
+
module WSDL
|
14
|
+
module SOAP
|
15
|
+
|
16
|
+
|
17
|
+
class MappingRegistryCreator
|
18
|
+
include ClassDefCreatorSupport
|
19
|
+
|
20
|
+
attr_reader :definitions
|
21
|
+
|
22
|
+
def initialize(definitions)
|
23
|
+
@definitions = definitions
|
24
|
+
@complextypes = @definitions.collect_complextypes
|
25
|
+
@types = nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def dump(types)
|
29
|
+
@types = types
|
30
|
+
map_cache = []
|
31
|
+
map = ""
|
32
|
+
@types.each do |type|
|
33
|
+
if map_cache.index(type).nil?
|
34
|
+
map_cache << type
|
35
|
+
if type.namespace != XSD::Namespace
|
36
|
+
if typemap = dump_typemap(type)
|
37
|
+
map << typemap
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
return map
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def dump_typemap(type)
|
48
|
+
if definedtype = @complextypes[type]
|
49
|
+
case definedtype.compoundtype
|
50
|
+
when :TYPE_STRUCT
|
51
|
+
dump_struct_typemap(definedtype)
|
52
|
+
when :TYPE_ARRAY
|
53
|
+
dump_array_typemap(definedtype)
|
54
|
+
when :TYPE_MAP, :TYPE_EMPTY
|
55
|
+
nil
|
56
|
+
else
|
57
|
+
raise NotImplementedError.new("must not reach here")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def dump_struct_typemap(definedtype)
|
63
|
+
ele = definedtype.name
|
64
|
+
return <<__EOD__
|
65
|
+
MappingRegistry.set(
|
66
|
+
#{create_class_name(ele)},
|
67
|
+
::SOAP::SOAPStruct,
|
68
|
+
::SOAP::Mapping::Registry::TypedStructFactory,
|
69
|
+
{ :type => #{dqname(ele)} }
|
70
|
+
)
|
71
|
+
__EOD__
|
72
|
+
end
|
73
|
+
|
74
|
+
def dump_array_typemap(definedtype)
|
75
|
+
ele = definedtype.name
|
76
|
+
arytype = definedtype.find_arytype || XSD::AnyTypeName
|
77
|
+
type = XSD::QName.new(arytype.namespace, arytype.name.sub(/\[(?:,)*\]$/, ''))
|
78
|
+
@types << type
|
79
|
+
return <<__EOD__
|
80
|
+
MappingRegistry.set(
|
81
|
+
#{create_class_name(ele)},
|
82
|
+
::SOAP::SOAPArray,
|
83
|
+
::SOAP::Mapping::Registry::TypedArrayFactory,
|
84
|
+
{ :type => #{dqname(type)} }
|
85
|
+
)
|
86
|
+
__EOD__
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,228 @@
|
|
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/classDefCreatorSupport'
|
11
|
+
require 'action_web_service/soap/rpc/element'
|
12
|
+
|
13
|
+
|
14
|
+
module WSDL
|
15
|
+
module SOAP
|
16
|
+
|
17
|
+
|
18
|
+
class MethodDefCreator
|
19
|
+
include ClassDefCreatorSupport
|
20
|
+
|
21
|
+
attr_reader :definitions
|
22
|
+
|
23
|
+
def initialize(definitions)
|
24
|
+
@definitions = definitions
|
25
|
+
@simpletypes = @definitions.collect_simpletypes
|
26
|
+
@complextypes = @definitions.collect_complextypes
|
27
|
+
@elements = @definitions.collect_elements
|
28
|
+
@types = []
|
29
|
+
end
|
30
|
+
|
31
|
+
def dump(porttype)
|
32
|
+
@types.clear
|
33
|
+
result = ""
|
34
|
+
operations = @definitions.porttype(porttype).operations
|
35
|
+
binding = @definitions.porttype_binding(porttype)
|
36
|
+
operations.each do |operation|
|
37
|
+
op_bind = binding.operations[operation.name]
|
38
|
+
next unless op_bind # no binding is defined
|
39
|
+
next unless op_bind.soapoperation # not a SOAP operation binding
|
40
|
+
result << ",\n" unless result.empty?
|
41
|
+
result << dump_method(operation, op_bind).chomp
|
42
|
+
end
|
43
|
+
return result, @types
|
44
|
+
end
|
45
|
+
|
46
|
+
def collect_rpcparameter(operation)
|
47
|
+
result = operation.inputparts.collect { |part|
|
48
|
+
collect_type(part.type)
|
49
|
+
param_set(::SOAP::RPC::SOAPMethod::IN, part.name, rpcdefinedtype(part))
|
50
|
+
}
|
51
|
+
outparts = operation.outputparts
|
52
|
+
if outparts.size > 0
|
53
|
+
retval = outparts[0]
|
54
|
+
collect_type(retval.type)
|
55
|
+
result << param_set(::SOAP::RPC::SOAPMethod::RETVAL, retval.name,
|
56
|
+
rpcdefinedtype(retval))
|
57
|
+
cdr(outparts).each { |part|
|
58
|
+
collect_type(part.type)
|
59
|
+
result << param_set(::SOAP::RPC::SOAPMethod::OUT, part.name,
|
60
|
+
rpcdefinedtype(part))
|
61
|
+
}
|
62
|
+
end
|
63
|
+
result
|
64
|
+
end
|
65
|
+
|
66
|
+
def collect_documentparameter(operation)
|
67
|
+
param = []
|
68
|
+
operation.inputparts.each do |input|
|
69
|
+
param << param_set(::SOAP::RPC::SOAPMethod::IN, input.name,
|
70
|
+
documentdefinedtype(input), elementqualified(input))
|
71
|
+
end
|
72
|
+
operation.outputparts.each do |output|
|
73
|
+
param << param_set(::SOAP::RPC::SOAPMethod::OUT, output.name,
|
74
|
+
documentdefinedtype(output), elementqualified(output))
|
75
|
+
end
|
76
|
+
param
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def dump_method(operation, binding)
|
82
|
+
name = safemethodname(operation.name.name)
|
83
|
+
name_as = operation.name.name
|
84
|
+
style = binding.soapoperation_style
|
85
|
+
inputuse = binding.input.soapbody_use
|
86
|
+
outputuse = binding.output.soapbody_use
|
87
|
+
namespace = binding.input.soapbody.namespace
|
88
|
+
if style == :rpc
|
89
|
+
qname = XSD::QName.new(namespace, name_as)
|
90
|
+
paramstr = param2str(collect_rpcparameter(operation))
|
91
|
+
else
|
92
|
+
qname = nil
|
93
|
+
paramstr = param2str(collect_documentparameter(operation))
|
94
|
+
end
|
95
|
+
if paramstr.empty?
|
96
|
+
paramstr = '[]'
|
97
|
+
else
|
98
|
+
paramstr = "[ " << paramstr.split(/\r?\n/).join("\n ") << " ]"
|
99
|
+
end
|
100
|
+
definitions = <<__EOD__
|
101
|
+
#{ndq(binding.soapaction)},
|
102
|
+
#{dq(name)},
|
103
|
+
#{paramstr},
|
104
|
+
{ :request_style => #{sym(style.id2name)}, :request_use => #{sym(inputuse.id2name)},
|
105
|
+
:response_style => #{sym(style.id2name)}, :response_use => #{sym(outputuse.id2name)} }
|
106
|
+
__EOD__
|
107
|
+
if style == :rpc
|
108
|
+
return <<__EOD__
|
109
|
+
[ #{qname.dump},
|
110
|
+
#{definitions}]
|
111
|
+
__EOD__
|
112
|
+
else
|
113
|
+
return <<__EOD__
|
114
|
+
[ #{definitions}]
|
115
|
+
__EOD__
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def rpcdefinedtype(part)
|
120
|
+
if mapped = basetype_mapped_class(part.type)
|
121
|
+
['::' + mapped.name]
|
122
|
+
elsif definedtype = @simpletypes[part.type]
|
123
|
+
['::' + basetype_mapped_class(definedtype.base).name]
|
124
|
+
elsif definedtype = @elements[part.element]
|
125
|
+
#['::SOAP::SOAPStruct', part.element.namespace, part.element.name]
|
126
|
+
['nil', part.element.namespace, part.element.name]
|
127
|
+
elsif definedtype = @complextypes[part.type]
|
128
|
+
case definedtype.compoundtype
|
129
|
+
when :TYPE_STRUCT, :TYPE_EMPTY # ToDo: empty should be treated as void.
|
130
|
+
type = create_class_name(part.type)
|
131
|
+
[type, part.type.namespace, part.type.name]
|
132
|
+
when :TYPE_MAP
|
133
|
+
[Hash.name, part.type.namespace, part.type.name]
|
134
|
+
when :TYPE_ARRAY
|
135
|
+
arytype = definedtype.find_arytype || XSD::AnyTypeName
|
136
|
+
ns = arytype.namespace
|
137
|
+
name = arytype.name.sub(/\[(?:,)*\]$/, '')
|
138
|
+
type = create_class_name(XSD::QName.new(ns, name))
|
139
|
+
[type + '[]', ns, name]
|
140
|
+
else
|
141
|
+
raise NotImplementedError.new("must not reach here")
|
142
|
+
end
|
143
|
+
else
|
144
|
+
raise RuntimeError.new("part: #{part.name} cannot be resolved")
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def documentdefinedtype(part)
|
149
|
+
if mapped = basetype_mapped_class(part.type)
|
150
|
+
['::' + mapped.name, nil, part.name]
|
151
|
+
elsif definedtype = @simpletypes[part.type]
|
152
|
+
['::' + basetype_mapped_class(definedtype.base).name, nil, part.name]
|
153
|
+
elsif definedtype = @elements[part.element]
|
154
|
+
['::SOAP::SOAPElement', part.element.namespace, part.element.name]
|
155
|
+
elsif definedtype = @complextypes[part.type]
|
156
|
+
['::SOAP::SOAPElement', part.type.namespace, part.type.name]
|
157
|
+
else
|
158
|
+
raise RuntimeError.new("part: #{part.name} cannot be resolved")
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def elementqualified(part)
|
163
|
+
if mapped = basetype_mapped_class(part.type)
|
164
|
+
false
|
165
|
+
elsif definedtype = @simpletypes[part.type]
|
166
|
+
false
|
167
|
+
elsif definedtype = @elements[part.element]
|
168
|
+
definedtype.elementform == 'qualified'
|
169
|
+
elsif definedtype = @complextypes[part.type]
|
170
|
+
false
|
171
|
+
else
|
172
|
+
raise RuntimeError.new("part: #{part.name} cannot be resolved")
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
def param_set(io_type, name, type, ele = nil)
|
177
|
+
[io_type, name, type, ele]
|
178
|
+
end
|
179
|
+
|
180
|
+
def collect_type(type)
|
181
|
+
# ignore inline type definition.
|
182
|
+
return if type.nil?
|
183
|
+
return if @types.include?(type)
|
184
|
+
@types << type
|
185
|
+
return unless @complextypes[type]
|
186
|
+
@complextypes[type].each_element do |element|
|
187
|
+
collect_type(element.type)
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
def param2str(params)
|
192
|
+
params.collect { |param|
|
193
|
+
io, name, type, ele = param
|
194
|
+
unless ele.nil?
|
195
|
+
"[#{dq(io)}, #{dq(name)}, #{type2str(type)}, #{ele2str(ele)}]"
|
196
|
+
else
|
197
|
+
"[#{dq(io)}, #{dq(name)}, #{type2str(type)}]"
|
198
|
+
end
|
199
|
+
}.join(",\n")
|
200
|
+
end
|
201
|
+
|
202
|
+
def type2str(type)
|
203
|
+
if type.size == 1
|
204
|
+
"[#{dq(type[0])}]"
|
205
|
+
else
|
206
|
+
"[#{dq(type[0])}, #{ndq(type[1])}, #{dq(type[2])}]"
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def ele2str(ele)
|
211
|
+
qualified = ele
|
212
|
+
if qualified
|
213
|
+
"true"
|
214
|
+
else
|
215
|
+
"false"
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def cdr(ary)
|
220
|
+
result = ary.dup
|
221
|
+
result.shift
|
222
|
+
result
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
|
227
|
+
end
|
228
|
+
end
|