soybean 1.0.0
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/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +38 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +44 -0
- data/VERSION +1 -0
- data/bin/soybean +22 -0
- data/bin/xsd2ruby +90 -0
- data/lib/soybean.rb +11 -0
- data/lib/soybean/actions/generate_classes.rb +33 -0
- data/soybean.gemspec +236 -0
- data/spec/soybean_spec.rb +5 -0
- data/spec/spec_helper.rb +12 -0
- data/vendor/soap4r/soap/attachment.rb +109 -0
- data/vendor/soap4r/soap/attrproxy.rb +35 -0
- data/vendor/soap4r/soap/base_data.rb +1095 -0
- data/vendor/soap4r/soap/element.rb +278 -0
- data/vendor/soap4r/soap/encodingstyle/asp_dot_net_handler.rb +208 -0
- data/vendor/soap4r/soap/encodingstyle/handler.rb +121 -0
- data/vendor/soap4r/soap/encodingstyle/literal_handler.rb +196 -0
- data/vendor/soap4r/soap/encodingstyle/soap_handler.rb +560 -0
- data/vendor/soap4r/soap/filter.rb +14 -0
- data/vendor/soap4r/soap/filter/filterchain.rb +52 -0
- data/vendor/soap4r/soap/filter/handler.rb +32 -0
- data/vendor/soap4r/soap/filter/streamhandler.rb +30 -0
- data/vendor/soap4r/soap/generator.rb +299 -0
- data/vendor/soap4r/soap/header/handler.rb +62 -0
- data/vendor/soap4r/soap/header/handlerset.rb +71 -0
- data/vendor/soap4r/soap/header/mappinghandler.rb +48 -0
- data/vendor/soap4r/soap/header/simplehandler.rb +45 -0
- data/vendor/soap4r/soap/httpconfigloader.rb +140 -0
- data/vendor/soap4r/soap/mapping.rb +13 -0
- data/vendor/soap4r/soap/mapping/encodedregistry.rb +539 -0
- data/vendor/soap4r/soap/mapping/factory.rb +389 -0
- data/vendor/soap4r/soap/mapping/literalregistry.rb +392 -0
- data/vendor/soap4r/soap/mapping/mapping.rb +577 -0
- data/vendor/soap4r/soap/mapping/registry.rb +296 -0
- data/vendor/soap4r/soap/mapping/rubytype_factory.rb +446 -0
- data/vendor/soap4r/soap/mapping/schemadefinition.rb +171 -0
- data/vendor/soap4r/soap/mapping/type_map.rb +107 -0
- data/vendor/soap4r/soap/mapping/wsdlencodedregistry.rb +212 -0
- data/vendor/soap4r/soap/mapping/wsdlliteralregistry.rb +249 -0
- data/vendor/soap4r/soap/marshal.rb +60 -0
- data/vendor/soap4r/soap/mimemessage.rb +243 -0
- data/vendor/soap4r/soap/nestedexception.rb +43 -0
- data/vendor/soap4r/soap/net_http_client.rb +242 -0
- data/vendor/soap4r/soap/ns.rb +39 -0
- data/vendor/soap4r/soap/parser.rb +253 -0
- data/vendor/soap4r/soap/processor.rb +67 -0
- data/vendor/soap4r/soap/property.rb +340 -0
- data/vendor/soap4r/soap/proxy.rb +15 -0
- data/vendor/soap4r/soap/rpc/cgistub.rb +248 -0
- data/vendor/soap4r/soap/rpc/driver.rb +222 -0
- data/vendor/soap4r/soap/rpc/element.rb +375 -0
- data/vendor/soap4r/soap/rpc/httpserver.rb +143 -0
- data/vendor/soap4r/soap/rpc/method_def.rb +69 -0
- data/vendor/soap4r/soap/rpc/proxy.rb +573 -0
- data/vendor/soap4r/soap/rpc/router.rb +663 -0
- data/vendor/soap4r/soap/rpc/rpc.rb +26 -0
- data/vendor/soap4r/soap/rpc/soaplet.rb +201 -0
- data/vendor/soap4r/soap/rpc/standalone_server.rb +44 -0
- data/vendor/soap4r/soap/soap.rb +154 -0
- data/vendor/soap4r/soap/stream_handler.rb +302 -0
- data/vendor/soap4r/soap/version.rb +9 -0
- data/vendor/soap4r/soap/wsdl_driver.rb +165 -0
- data/vendor/soap4r/wsdl/binding.rb +66 -0
- data/vendor/soap4r/wsdl/data.rb +65 -0
- data/vendor/soap4r/wsdl/definitions.rb +237 -0
- data/vendor/soap4r/wsdl/documentation.rb +33 -0
- data/vendor/soap4r/wsdl/import.rb +81 -0
- data/vendor/soap4r/wsdl/importer.rb +39 -0
- data/vendor/soap4r/wsdl/info.rb +51 -0
- data/vendor/soap4r/wsdl/message.rb +55 -0
- data/vendor/soap4r/wsdl/operation.rb +152 -0
- data/vendor/soap4r/wsdl/operation_binding.rb +241 -0
- data/vendor/soap4r/wsdl/param.rb +94 -0
- data/vendor/soap4r/wsdl/parser.rb +165 -0
- data/vendor/soap4r/wsdl/part.rb +53 -0
- data/vendor/soap4r/wsdl/port.rb +67 -0
- data/vendor/soap4r/wsdl/port_type.rb +76 -0
- data/vendor/soap4r/wsdl/service.rb +62 -0
- data/vendor/soap4r/wsdl/soap/address.rb +41 -0
- data/vendor/soap4r/wsdl/soap/binding.rb +50 -0
- data/vendor/soap4r/wsdl/soap/body.rb +59 -0
- data/vendor/soap4r/wsdl/soap/cgi_stub_creator.rb +93 -0
- data/vendor/soap4r/wsdl/soap/class_def_creator.rb +437 -0
- data/vendor/soap4r/wsdl/soap/class_def_creator_support.rb +241 -0
- data/vendor/soap4r/wsdl/soap/class_name_creator.rb +55 -0
- data/vendor/soap4r/wsdl/soap/client_skelton_creator.rb +107 -0
- data/vendor/soap4r/wsdl/soap/complex_type.rb +174 -0
- data/vendor/soap4r/wsdl/soap/data.rb +43 -0
- data/vendor/soap4r/wsdl/soap/definitions.rb +201 -0
- data/vendor/soap4r/wsdl/soap/driver_creator.rb +121 -0
- data/vendor/soap4r/wsdl/soap/element.rb +34 -0
- data/vendor/soap4r/wsdl/soap/encoded_mapping_registry_creator.rb +74 -0
- data/vendor/soap4r/wsdl/soap/fault.rb +57 -0
- data/vendor/soap4r/wsdl/soap/header.rb +87 -0
- data/vendor/soap4r/wsdl/soap/headerfault.rb +57 -0
- data/vendor/soap4r/wsdl/soap/literal_mapping_registry_creator.rb +116 -0
- data/vendor/soap4r/wsdl/soap/mapping_registry_creator.rb +59 -0
- data/vendor/soap4r/wsdl/soap/mapping_registry_creator_support.rb +377 -0
- data/vendor/soap4r/wsdl/soap/method_def_creator.rb +200 -0
- data/vendor/soap4r/wsdl/soap/operation.rb +113 -0
- data/vendor/soap4r/wsdl/soap/servant_skelton_creator.rb +92 -0
- data/vendor/soap4r/wsdl/soap/servlet_stub_creator.rb +105 -0
- data/vendor/soap4r/wsdl/soap/standalone_server_stub_creator.rb +101 -0
- data/vendor/soap4r/wsdl/soap/wsdl2ruby.rb +226 -0
- data/vendor/soap4r/wsdl/types.rb +45 -0
- data/vendor/soap4r/wsdl/wsdl.rb +25 -0
- data/vendor/soap4r/wsdl/xml_schema/all.rb +25 -0
- data/vendor/soap4r/wsdl/xml_schema/annotation.rb +35 -0
- data/vendor/soap4r/wsdl/xml_schema/any.rb +62 -0
- data/vendor/soap4r/wsdl/xml_schema/any_attribute.rb +49 -0
- data/vendor/soap4r/wsdl/xml_schema/attribute.rb +105 -0
- data/vendor/soap4r/wsdl/xml_schema/attribute_group.rb +69 -0
- data/vendor/soap4r/wsdl/xml_schema/choice.rb +59 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_content.rb +98 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_extension.rb +120 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_restriction.rb +105 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_type.rb +194 -0
- data/vendor/soap4r/wsdl/xml_schema/content.rb +96 -0
- data/vendor/soap4r/wsdl/xml_schema/data.rb +117 -0
- data/vendor/soap4r/wsdl/xml_schema/element.rb +154 -0
- data/vendor/soap4r/wsdl/xml_schema/enumeration.rb +37 -0
- data/vendor/soap4r/wsdl/xml_schema/fractiondigits.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/group.rb +101 -0
- data/vendor/soap4r/wsdl/xml_schema/import.rb +54 -0
- data/vendor/soap4r/wsdl/xml_schema/import_handler.rb +46 -0
- data/vendor/soap4r/wsdl/xml_schema/importer.rb +103 -0
- data/vendor/soap4r/wsdl/xml_schema/include.rb +49 -0
- data/vendor/soap4r/wsdl/xml_schema/length.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/list.rb +49 -0
- data/vendor/soap4r/wsdl/xml_schema/maxexclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/maxinclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/maxlength.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/minexclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/mininclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/minlength.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/parser.rb +168 -0
- data/vendor/soap4r/wsdl/xml_schema/pattern.rb +37 -0
- data/vendor/soap4r/wsdl/xml_schema/ref.rb +34 -0
- data/vendor/soap4r/wsdl/xml_schema/schema.rb +179 -0
- data/vendor/soap4r/wsdl/xml_schema/sequence.rb +55 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_content.rb +70 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_extension.rb +63 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_restriction.rb +133 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_type.rb +88 -0
- data/vendor/soap4r/wsdl/xml_schema/totaldigits.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/union.rb +36 -0
- data/vendor/soap4r/wsdl/xml_schema/unique.rb +35 -0
- data/vendor/soap4r/wsdl/xml_schema/whitespace.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/xsd2ruby.rb +176 -0
- data/vendor/soap4r/xsd/charset.rb +190 -0
- data/vendor/soap4r/xsd/codegen.rb +13 -0
- data/vendor/soap4r/xsd/codegen/classdef.rb +209 -0
- data/vendor/soap4r/xsd/codegen/commentdef.rb +35 -0
- data/vendor/soap4r/xsd/codegen/gensupport.rb +277 -0
- data/vendor/soap4r/xsd/codegen/methoddef.rb +71 -0
- data/vendor/soap4r/xsd/codegen/moduledef.rb +209 -0
- data/vendor/soap4r/xsd/datatypes.rb +1466 -0
- data/vendor/soap4r/xsd/datatypes1999.rb +21 -0
- data/vendor/soap4r/xsd/iconvcharset.rb +34 -0
- data/vendor/soap4r/xsd/mapping.rb +69 -0
- data/vendor/soap4r/xsd/namedelements.rb +133 -0
- data/vendor/soap4r/xsd/ns.rb +183 -0
- data/vendor/soap4r/xsd/qname.rb +80 -0
- data/vendor/soap4r/xsd/xmlparser.rb +77 -0
- data/vendor/soap4r/xsd/xmlparser/libxmlparser.rb +116 -0
- data/vendor/soap4r/xsd/xmlparser/parser.rb +101 -0
- data/vendor/soap4r/xsd/xmlparser/rexmlparser.rb +59 -0
- data/vendor/soap4r/xsd/xmlparser/xmlparser.rb +51 -0
- data/vendor/soap4r/xsd/xmlparser/xmlscanner.rb +150 -0
- metadata +316 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - SOAP RPC driver
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'soap/soap'
|
|
11
|
+
require 'soap/attrproxy'
|
|
12
|
+
require 'soap/mapping'
|
|
13
|
+
require 'soap/rpc/rpc'
|
|
14
|
+
require 'soap/rpc/proxy'
|
|
15
|
+
require 'soap/rpc/element'
|
|
16
|
+
require 'soap/streamHandler'
|
|
17
|
+
require 'soap/property'
|
|
18
|
+
require 'soap/header/handlerset'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
module SOAP
|
|
22
|
+
module RPC
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Driver
|
|
26
|
+
include AttrProxy
|
|
27
|
+
|
|
28
|
+
attr_proxy :endpoint_url, true
|
|
29
|
+
attr_proxy :mapping_registry, true
|
|
30
|
+
attr_proxy :literal_mapping_registry, true
|
|
31
|
+
attr_proxy :allow_unqualified_element, true
|
|
32
|
+
attr_proxy :default_encodingstyle, true
|
|
33
|
+
attr_proxy :generate_explicit_type, true
|
|
34
|
+
attr_proxy :use_default_namespace, true
|
|
35
|
+
attr_proxy :return_response_as_xml, true
|
|
36
|
+
attr_proxy :headerhandler
|
|
37
|
+
attr_proxy :filterchain
|
|
38
|
+
attr_proxy :streamhandler
|
|
39
|
+
attr_proxy :test_loopback_response
|
|
40
|
+
attr_proxy :reset_stream
|
|
41
|
+
|
|
42
|
+
attr_reader :proxy
|
|
43
|
+
attr_reader :options
|
|
44
|
+
attr_accessor :soapaction
|
|
45
|
+
|
|
46
|
+
def inspect
|
|
47
|
+
"#<#{self.class}:#{@proxy.inspect}>"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def httpproxy
|
|
51
|
+
options["protocol.http.proxy"]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def httpproxy=(httpproxy)
|
|
55
|
+
options["protocol.http.proxy"] = httpproxy
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def wiredump_dev
|
|
59
|
+
options["protocol.http.wiredump_dev"]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def wiredump_dev=(wiredump_dev)
|
|
63
|
+
options["protocol.http.wiredump_dev"] = wiredump_dev
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def mandatorycharset
|
|
67
|
+
options["protocol.mandatorycharset"]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def mandatorycharset=(mandatorycharset)
|
|
71
|
+
options["protocol.mandatorycharset"] = mandatorycharset
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def wiredump_file_base
|
|
75
|
+
options["protocol.wiredump_file_base"]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def wiredump_file_base=(wiredump_file_base)
|
|
79
|
+
options["protocol.wiredump_file_base"] = wiredump_file_base
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def initialize(endpoint_url, namespace = nil, soapaction = nil)
|
|
83
|
+
@namespace = namespace
|
|
84
|
+
@soapaction = soapaction
|
|
85
|
+
@options = setup_options
|
|
86
|
+
@wiredump_file_base = nil
|
|
87
|
+
@proxy = Proxy.new(endpoint_url, @soapaction, @options)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def loadproperty(propertyname)
|
|
91
|
+
unless options.loadproperty(propertyname)
|
|
92
|
+
raise LoadError.new("No such property to load -- #{propertyname}")
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def add_rpc_method(name, *params)
|
|
97
|
+
add_rpc_method_with_soapaction_as(name, name, @soapaction, *params)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def add_rpc_method_as(name, name_as, *params)
|
|
101
|
+
add_rpc_method_with_soapaction_as(name, name_as, @soapaction, *params)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def add_rpc_method_with_soapaction(name, soapaction, *params)
|
|
105
|
+
add_rpc_method_with_soapaction_as(name, name, soapaction, *params)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def add_rpc_method_with_soapaction_as(name, name_as, soapaction, *params)
|
|
109
|
+
param_def = SOAPMethod.create_rpc_param_def(params)
|
|
110
|
+
qname = XSD::QName.new(@namespace, name_as)
|
|
111
|
+
@proxy.add_rpc_method(qname, soapaction, name, param_def)
|
|
112
|
+
add_rpc_method_interface(name, param_def)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# add_method is for shortcut of typical rpc/encoded method definition.
|
|
116
|
+
alias add_method add_rpc_method
|
|
117
|
+
alias add_method_as add_rpc_method_as
|
|
118
|
+
alias add_method_with_soapaction add_rpc_method_with_soapaction
|
|
119
|
+
alias add_method_with_soapaction_as add_rpc_method_with_soapaction_as
|
|
120
|
+
|
|
121
|
+
def add_document_method(name, soapaction, req_qname, res_qname)
|
|
122
|
+
param_def = SOAPMethod.create_doc_param_def(req_qname, res_qname)
|
|
123
|
+
@proxy.add_document_method(soapaction, name, param_def)
|
|
124
|
+
add_document_method_interface(name, param_def)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def add_rpc_operation(qname, soapaction, name, param_def, opt = {})
|
|
128
|
+
@proxy.add_rpc_operation(qname, soapaction, name, param_def, opt)
|
|
129
|
+
add_rpc_method_interface(name, param_def)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def add_document_operation(soapaction, name, param_def, opt = {})
|
|
133
|
+
@proxy.add_document_operation(soapaction, name, param_def, opt)
|
|
134
|
+
add_document_method_interface(name, param_def)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def invoke(headers, body)
|
|
138
|
+
if headers and !headers.is_a?(SOAPHeader)
|
|
139
|
+
headers = create_header(headers)
|
|
140
|
+
end
|
|
141
|
+
set_wiredump_file_base(body.elename.name)
|
|
142
|
+
env = @proxy.invoke(headers, body)
|
|
143
|
+
if env.nil?
|
|
144
|
+
return nil, nil
|
|
145
|
+
else
|
|
146
|
+
return env.header, env.body
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def call(name, *params)
|
|
151
|
+
set_wiredump_file_base(name)
|
|
152
|
+
@proxy.call(name, *params)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
private
|
|
156
|
+
|
|
157
|
+
def attrproxy
|
|
158
|
+
@proxy
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def set_wiredump_file_base(name)
|
|
162
|
+
if @wiredump_file_base
|
|
163
|
+
@proxy.set_wiredump_file_base("#{@wiredump_file_base}_#{name}")
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def create_header(headers)
|
|
168
|
+
header = SOAPHeader.new()
|
|
169
|
+
headers.each do |content, mustunderstand, encodingstyle|
|
|
170
|
+
header.add(SOAPHeaderItem.new(content, mustunderstand, encodingstyle))
|
|
171
|
+
end
|
|
172
|
+
header
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def setup_options
|
|
176
|
+
if opt = Property.loadproperty(::SOAP::PropertyName)
|
|
177
|
+
opt = opt["client"]
|
|
178
|
+
end
|
|
179
|
+
opt ||= Property.new
|
|
180
|
+
opt.add_hook("protocol.mandatorycharset") do |key, value|
|
|
181
|
+
@proxy.mandatorycharset = value
|
|
182
|
+
end
|
|
183
|
+
opt.add_hook("protocol.wiredump_file_base") do |key, value|
|
|
184
|
+
@wiredump_file_base = value
|
|
185
|
+
end
|
|
186
|
+
opt["protocol.http.charset"] ||= XSD::Charset.xml_encoding_label
|
|
187
|
+
opt["protocol.http.proxy"] ||= Env::HTTP_PROXY
|
|
188
|
+
opt["protocol.http.no_proxy"] ||= Env::NO_PROXY
|
|
189
|
+
opt
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def add_rpc_method_interface(name, param_def)
|
|
193
|
+
param_count = RPC::SOAPMethod.param_count(param_def,
|
|
194
|
+
RPC::SOAPMethod::IN, RPC::SOAPMethod::INOUT)
|
|
195
|
+
add_method_interface(name, param_count)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def add_document_method_interface(name, param_def)
|
|
199
|
+
param_count = RPC::SOAPMethod.param_count(param_def, RPC::SOAPMethod::IN)
|
|
200
|
+
add_method_interface(name, param_count)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Mapping.define_singleton_method calls define_method with proc and it
|
|
204
|
+
# exhausts much memory for each singleton Object. just instance_eval instead
|
|
205
|
+
# of it.
|
|
206
|
+
def add_method_interface(name, param_count)
|
|
207
|
+
instance_eval <<-EOS
|
|
208
|
+
def #{name}(*arg)
|
|
209
|
+
unless arg.size == #{param_count}
|
|
210
|
+
raise ArgumentError.new(
|
|
211
|
+
"wrong number of arguments (\#{arg.size} for #{param_count})")
|
|
212
|
+
end
|
|
213
|
+
call(#{name.dump}, *arg)
|
|
214
|
+
end
|
|
215
|
+
EOS
|
|
216
|
+
self.method(name)
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
end
|
|
222
|
+
end
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - RPC element definition.
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'soap/baseData'
|
|
11
|
+
require 'soap/rpc/methodDef'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module SOAP
|
|
15
|
+
|
|
16
|
+
# Add method definitions for RPC to common definition in element.rb
|
|
17
|
+
class SOAPBody < SOAPStruct
|
|
18
|
+
public
|
|
19
|
+
|
|
20
|
+
def request
|
|
21
|
+
root_node
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def response
|
|
25
|
+
root = root_node
|
|
26
|
+
if !@is_fault
|
|
27
|
+
if root.nil?
|
|
28
|
+
nil
|
|
29
|
+
elsif root.is_a?(SOAPBasetype)
|
|
30
|
+
root
|
|
31
|
+
else
|
|
32
|
+
# Initial element is [retval].
|
|
33
|
+
root[0]
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
root
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def outparams
|
|
41
|
+
root = root_node
|
|
42
|
+
if !@is_fault and !root.nil? and !root.is_a?(SOAPBasetype)
|
|
43
|
+
op = root[1..-1]
|
|
44
|
+
op = nil if op && op.empty?
|
|
45
|
+
op
|
|
46
|
+
else
|
|
47
|
+
nil
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def fault
|
|
52
|
+
if @is_fault
|
|
53
|
+
self['fault']
|
|
54
|
+
else
|
|
55
|
+
nil
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def fault=(fault)
|
|
60
|
+
@is_fault = true
|
|
61
|
+
add('fault', fault)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
module RPC
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class RPCError < Error; end
|
|
70
|
+
class MethodDefinitionError < RPCError; end
|
|
71
|
+
class ParameterError < RPCError; end
|
|
72
|
+
|
|
73
|
+
class SOAPMethod < SOAPStruct
|
|
74
|
+
RETVAL = :retval
|
|
75
|
+
IN = :in
|
|
76
|
+
OUT = :out
|
|
77
|
+
INOUT = :inout
|
|
78
|
+
|
|
79
|
+
attr_reader :param_def
|
|
80
|
+
attr_reader :inparam
|
|
81
|
+
attr_reader :outparam
|
|
82
|
+
attr_reader :retval_name
|
|
83
|
+
attr_reader :retval_class_name
|
|
84
|
+
|
|
85
|
+
def initialize(qname, param_def = nil)
|
|
86
|
+
super(nil)
|
|
87
|
+
@elename = qname
|
|
88
|
+
@encodingstyle = nil
|
|
89
|
+
|
|
90
|
+
@param_def = param_def
|
|
91
|
+
|
|
92
|
+
@signature = []
|
|
93
|
+
@inparam_names = []
|
|
94
|
+
@inoutparam_names = []
|
|
95
|
+
@outparam_names = []
|
|
96
|
+
|
|
97
|
+
@inparam = {}
|
|
98
|
+
@outparam = {}
|
|
99
|
+
@retval_name = nil
|
|
100
|
+
@retval_class_name = nil
|
|
101
|
+
|
|
102
|
+
init_params(@param_def) if @param_def
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def have_member
|
|
106
|
+
true
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def have_outparam?
|
|
110
|
+
@outparam_names.size > 0
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def input_params
|
|
114
|
+
collect_params(IN, INOUT)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def output_params
|
|
118
|
+
collect_params(OUT, INOUT)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def input_param_types
|
|
122
|
+
collect_param_types(IN, INOUT)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def output_param_types
|
|
126
|
+
collect_param_types(OUT, INOUT)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def set_param(params)
|
|
130
|
+
params.each do |param, data|
|
|
131
|
+
@inparam[param] = data
|
|
132
|
+
data.elename = XSD::QName.new(data.elename.namespace, param)
|
|
133
|
+
data.parent = self
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def set_outparam(params)
|
|
138
|
+
params.each do |param, data|
|
|
139
|
+
@outparam[param] = data
|
|
140
|
+
data.elename = XSD::QName.new(data.elename.namespace, param)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def get_paramtypes(names)
|
|
145
|
+
types = []
|
|
146
|
+
@signature.each do |io_type, name, type_qname|
|
|
147
|
+
if type_qname && idx = names.index(name)
|
|
148
|
+
types[idx] = type_qname
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
types
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def SOAPMethod.param_count(param_def, *type)
|
|
155
|
+
count = 0
|
|
156
|
+
param_def.each do |param|
|
|
157
|
+
param = MethodDef.to_param(param)
|
|
158
|
+
if type.include?(param.io_type.to_sym)
|
|
159
|
+
count += 1
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
count
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def SOAPMethod.derive_rpc_param_def(obj, name, *param)
|
|
166
|
+
if param.size == 1 and param[0].is_a?(Array)
|
|
167
|
+
return param[0]
|
|
168
|
+
end
|
|
169
|
+
if param.empty?
|
|
170
|
+
method = obj.method(name)
|
|
171
|
+
param_names = (1..method.arity.abs).collect { |i| "p#{i}" }
|
|
172
|
+
else
|
|
173
|
+
param_names = param
|
|
174
|
+
end
|
|
175
|
+
create_rpc_param_def(param_names)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def SOAPMethod.create_rpc_param_def(param_names)
|
|
179
|
+
param_def = []
|
|
180
|
+
param_names.each do |param_name|
|
|
181
|
+
param_def.push([IN, param_name, nil])
|
|
182
|
+
end
|
|
183
|
+
param_def.push([RETVAL, 'return', nil])
|
|
184
|
+
param_def
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def SOAPMethod.create_doc_param_def(req_qnames, res_qnames)
|
|
188
|
+
req_qnames = [req_qnames] if req_qnames.is_a?(XSD::QName)
|
|
189
|
+
res_qnames = [res_qnames] if res_qnames.is_a?(XSD::QName)
|
|
190
|
+
param_def = []
|
|
191
|
+
# req_qnames and res_qnames can be nil
|
|
192
|
+
if req_qnames
|
|
193
|
+
req_qnames.each do |qname|
|
|
194
|
+
param_def << [IN, qname.name, [nil, qname.namespace, qname.name]]
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
if res_qnames
|
|
198
|
+
res_qnames.each do |qname|
|
|
199
|
+
param_def << [OUT, qname.name, [nil, qname.namespace, qname.name]]
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
param_def
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
private
|
|
206
|
+
|
|
207
|
+
def collect_param_types(*type)
|
|
208
|
+
names = []
|
|
209
|
+
@signature.each do |io_type, name, type_qname|
|
|
210
|
+
names << type_qname if type.include?(io_type)
|
|
211
|
+
end
|
|
212
|
+
names
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def collect_params(*type)
|
|
216
|
+
names = []
|
|
217
|
+
@signature.each do |io_type, name, type_qname|
|
|
218
|
+
names << name if type.include?(io_type)
|
|
219
|
+
end
|
|
220
|
+
names
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def init_params(param_def)
|
|
224
|
+
param_def.each do |param|
|
|
225
|
+
param = MethodDef.to_param(param)
|
|
226
|
+
init_param(param)
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def init_param(param)
|
|
231
|
+
mapped_class = SOAPMethod.parse_mapped_class(param.mapped_class)
|
|
232
|
+
qname = param.qname
|
|
233
|
+
if qname.nil? and mapped_class
|
|
234
|
+
qname = TypeMap.respond_to?(:key) ? TypeMap.key(mapped_class) : TypeMap.index(mapped_class) # RubyJedi: compatible with Ruby 1.8.6 and above
|
|
235
|
+
end
|
|
236
|
+
case param.io_type
|
|
237
|
+
when IN
|
|
238
|
+
@signature.push([IN, param.name, qname])
|
|
239
|
+
@inparam_names.push(param.name)
|
|
240
|
+
when OUT
|
|
241
|
+
@signature.push([OUT, param.name, qname])
|
|
242
|
+
@outparam_names.push(param.name)
|
|
243
|
+
when INOUT
|
|
244
|
+
@signature.push([INOUT, param.name, qname])
|
|
245
|
+
@inoutparam_names.push(param.name)
|
|
246
|
+
when RETVAL
|
|
247
|
+
if @retval_name
|
|
248
|
+
raise MethodDefinitionError.new('duplicated retval')
|
|
249
|
+
end
|
|
250
|
+
@retval_name = param.name
|
|
251
|
+
@retval_class_name = mapped_class
|
|
252
|
+
else
|
|
253
|
+
raise MethodDefinitionError.new("unknown type: #{param.io_type}")
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def self.parse_mapped_class(mapped_class)
|
|
258
|
+
# the first element of typedef in param_def can be a String like
|
|
259
|
+
# "::SOAP::SOAPStruct" or "CustomClass[]". turn this String to a class if
|
|
260
|
+
# we can.
|
|
261
|
+
if mapped_class.is_a?(String)
|
|
262
|
+
if /\[\]\Z/ =~ mapped_class
|
|
263
|
+
# when '[]' is added, ignore this.
|
|
264
|
+
mapped_class = nil
|
|
265
|
+
else
|
|
266
|
+
mapped_class = Mapping.class_from_name(mapped_class)
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
mapped_class
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
class SOAPMethodRequest < SOAPMethod
|
|
275
|
+
attr_accessor :soapaction
|
|
276
|
+
|
|
277
|
+
def SOAPMethodRequest.create_request(qname, *params)
|
|
278
|
+
param_def = []
|
|
279
|
+
param_value = []
|
|
280
|
+
i = 0
|
|
281
|
+
params.each do |param|
|
|
282
|
+
param_name = "p#{i}"
|
|
283
|
+
i += 1
|
|
284
|
+
param_def << [IN, param_name, nil]
|
|
285
|
+
param_value << [param_name, param]
|
|
286
|
+
end
|
|
287
|
+
param_def << [RETVAL, 'return', nil]
|
|
288
|
+
o = new(qname, param_def)
|
|
289
|
+
o.set_param(param_value)
|
|
290
|
+
o
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def initialize(qname, param_def = nil, soapaction = nil)
|
|
294
|
+
super(qname, param_def)
|
|
295
|
+
@soapaction = soapaction
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
def each
|
|
299
|
+
input_params.each do |name|
|
|
300
|
+
unless @inparam[name]
|
|
301
|
+
raise ParameterError.new("parameter: #{name} was not given")
|
|
302
|
+
end
|
|
303
|
+
yield(name, @inparam[name])
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
def dup
|
|
308
|
+
req = self.class.new(@elename.dup, @param_def, @soapaction)
|
|
309
|
+
req.encodingstyle = @encodingstyle
|
|
310
|
+
req
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
def create_method_response(response_name = nil)
|
|
314
|
+
response_name ||=
|
|
315
|
+
XSD::QName.new(@elename.namespace, @elename.name + 'Response')
|
|
316
|
+
SOAPMethodResponse.new(response_name, @param_def)
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
class SOAPMethodResponse < SOAPMethod
|
|
322
|
+
|
|
323
|
+
def initialize(qname, param_def = nil)
|
|
324
|
+
super(qname, param_def)
|
|
325
|
+
@retval = nil
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
def retval
|
|
329
|
+
@retval
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
def retval=(retval)
|
|
333
|
+
@retval = retval
|
|
334
|
+
@retval.elename = @retval.elename.dup_name(@retval_name || 'return')
|
|
335
|
+
retval.parent = self
|
|
336
|
+
retval
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
def each
|
|
340
|
+
if @retval_name and !@retval.is_a?(SOAPVoid)
|
|
341
|
+
yield(@retval_name, @retval)
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
output_params.each do |name|
|
|
345
|
+
unless @outparam[name]
|
|
346
|
+
raise ParameterError.new("parameter: #{name} was not given")
|
|
347
|
+
end
|
|
348
|
+
yield(name, @outparam[name])
|
|
349
|
+
end
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
# To return(?) void explicitly.
|
|
355
|
+
# def foo(input_var)
|
|
356
|
+
# ...
|
|
357
|
+
# return SOAP::RPC::SOAPVoid.new
|
|
358
|
+
# end
|
|
359
|
+
class SOAPVoid < XSD::XSDAnySimpleType
|
|
360
|
+
include SOAPBasetype
|
|
361
|
+
extend SOAPModuleUtils
|
|
362
|
+
Name = XSD::QName.new(Mapping::RubyCustomTypeNamespace, nil)
|
|
363
|
+
|
|
364
|
+
public
|
|
365
|
+
def initialize()
|
|
366
|
+
@elename = Name
|
|
367
|
+
@id = nil
|
|
368
|
+
@precedents = []
|
|
369
|
+
@parent = nil
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
end
|
|
375
|
+
end
|