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,268 @@
|
|
1
|
+
# SOAP4R - SOAP XML Instance Generator library.
|
2
|
+
# Copyright (C) 2001, 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/xsd/ns'
|
10
|
+
require 'action_web_service/soap/soap'
|
11
|
+
require 'action_web_service/soap/baseData'
|
12
|
+
require 'action_web_service/soap/encodingstyle/handler'
|
13
|
+
|
14
|
+
|
15
|
+
module SOAP
|
16
|
+
|
17
|
+
|
18
|
+
###
|
19
|
+
## CAUTION: MT-unsafe
|
20
|
+
#
|
21
|
+
class SOAPGenerator
|
22
|
+
include SOAP
|
23
|
+
|
24
|
+
class FormatEncodeError < Error; end
|
25
|
+
|
26
|
+
public
|
27
|
+
|
28
|
+
attr_accessor :charset
|
29
|
+
attr_accessor :default_encodingstyle
|
30
|
+
attr_accessor :generate_explicit_type
|
31
|
+
attr_accessor :use_numeric_character_reference
|
32
|
+
|
33
|
+
def initialize(opt = {})
|
34
|
+
@reftarget = nil
|
35
|
+
@handlers = {}
|
36
|
+
@charset = opt[:charset] || XSD::Charset.xml_encoding_label
|
37
|
+
@default_encodingstyle = opt[:default_encodingstyle] || EncodingNamespace
|
38
|
+
@generate_explicit_type =
|
39
|
+
opt.key?(:generate_explicit_type) ? opt[:generate_explicit_type] : true
|
40
|
+
@elementformdefault = opt[:elementformdefault]
|
41
|
+
@attributeformdefault = opt[:attributeformdefault]
|
42
|
+
@use_numeric_character_reference = opt[:use_numeric_character_reference]
|
43
|
+
@indentstr = opt[:no_indent] ? '' : ' '
|
44
|
+
@buf = @indent = @curr = nil
|
45
|
+
end
|
46
|
+
|
47
|
+
def generate(obj, io = nil)
|
48
|
+
@buf = io || ''
|
49
|
+
@indent = ''
|
50
|
+
|
51
|
+
prologue
|
52
|
+
@handlers.each do |uri, handler|
|
53
|
+
handler.encode_prologue
|
54
|
+
end
|
55
|
+
|
56
|
+
ns = XSD::NS.new
|
57
|
+
@buf << xmldecl
|
58
|
+
encode_data(ns, obj, nil)
|
59
|
+
|
60
|
+
@handlers.each do |uri, handler|
|
61
|
+
handler.encode_epilogue
|
62
|
+
end
|
63
|
+
epilogue
|
64
|
+
|
65
|
+
@buf
|
66
|
+
end
|
67
|
+
|
68
|
+
def encode_data(ns, obj, parent)
|
69
|
+
if obj.is_a?(SOAPEnvelopeElement)
|
70
|
+
encode_element(ns, obj, parent)
|
71
|
+
return
|
72
|
+
end
|
73
|
+
if @reftarget && !obj.precedents.empty?
|
74
|
+
add_reftarget(obj.elename.name, obj)
|
75
|
+
ref = SOAPReference.new(obj)
|
76
|
+
ref.elename = ref.elename.dup_name(obj.elename.name)
|
77
|
+
obj.precedents.clear # Avoid cyclic delay.
|
78
|
+
obj.encodingstyle = parent.encodingstyle
|
79
|
+
# SOAPReference is encoded here.
|
80
|
+
obj = ref
|
81
|
+
end
|
82
|
+
encodingstyle = obj.encodingstyle
|
83
|
+
# Children's encodingstyle is derived from its parent.
|
84
|
+
encodingstyle ||= parent.encodingstyle if parent
|
85
|
+
obj.encodingstyle = encodingstyle
|
86
|
+
handler = find_handler(encodingstyle || @default_encodingstyle)
|
87
|
+
unless handler
|
88
|
+
raise FormatEncodeError.new("Unknown encodingStyle: #{ encodingstyle }.")
|
89
|
+
end
|
90
|
+
if !obj.elename.name
|
91
|
+
raise FormatEncodeError.new("Element name not defined: #{ obj }.")
|
92
|
+
end
|
93
|
+
handler.encode_data(self, ns, obj, parent)
|
94
|
+
handler.encode_data_end(self, ns, obj, parent)
|
95
|
+
end
|
96
|
+
|
97
|
+
def add_reftarget(name, node)
|
98
|
+
unless @reftarget
|
99
|
+
raise FormatEncodeError.new("Reftarget is not defined.")
|
100
|
+
end
|
101
|
+
@reftarget.add(name, node)
|
102
|
+
end
|
103
|
+
|
104
|
+
def encode_child(ns, child, parent)
|
105
|
+
indent_backup, @indent = @indent, @indent + @indentstr
|
106
|
+
encode_data(ns.clone_ns, child, parent)
|
107
|
+
@indent = indent_backup
|
108
|
+
end
|
109
|
+
|
110
|
+
def encode_element(ns, obj, parent)
|
111
|
+
attrs = {}
|
112
|
+
if obj.is_a?(SOAPBody)
|
113
|
+
@reftarget = obj
|
114
|
+
obj.encode(self, ns, attrs) do |child|
|
115
|
+
indent_backup, @indent = @indent, @indent + @indentstr
|
116
|
+
encode_data(ns.clone_ns, child, obj)
|
117
|
+
@indent = indent_backup
|
118
|
+
end
|
119
|
+
@reftarget = nil
|
120
|
+
else
|
121
|
+
if obj.is_a?(SOAPEnvelope)
|
122
|
+
# xsi:nil="true" can appear even if dumping without explicit type.
|
123
|
+
SOAPGenerator.assign_ns(attrs, ns,
|
124
|
+
XSD::InstanceNamespace, XSINamespaceTag)
|
125
|
+
if @generate_explicit_type
|
126
|
+
SOAPGenerator.assign_ns(attrs, ns, XSD::Namespace, XSDNamespaceTag)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
obj.encode(self, ns, attrs) do |child|
|
130
|
+
indent_backup, @indent = @indent, @indent + @indentstr
|
131
|
+
encode_data(ns.clone_ns, child, obj)
|
132
|
+
@indent = indent_backup
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def encode_name(ns, data, attrs)
|
138
|
+
if element_local?(data)
|
139
|
+
data.elename.name
|
140
|
+
else
|
141
|
+
if element_qualified?(data)
|
142
|
+
SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace, '')
|
143
|
+
else
|
144
|
+
SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace)
|
145
|
+
end
|
146
|
+
ns.name(data.elename)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def encode_name_end(ns, data)
|
151
|
+
if element_local?(data)
|
152
|
+
data.elename.name
|
153
|
+
else
|
154
|
+
ns.name(data.elename)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def encode_tag(elename, attrs = nil)
|
159
|
+
if !attrs or attrs.empty?
|
160
|
+
@buf << "\n#{ @indent }<#{ elename }>"
|
161
|
+
elsif attrs.size == 1
|
162
|
+
key, value = attrs.shift
|
163
|
+
@buf << %Q[\n#{ @indent }<#{ elename } #{ key }="#{ value }">]
|
164
|
+
else
|
165
|
+
@buf << "\n#{ @indent }<#{ elename } " <<
|
166
|
+
attrs.collect { |key, value|
|
167
|
+
%Q[#{ key }="#{ value }"]
|
168
|
+
}.join("\n#{ @indent }#{ @indentstr * 2 }") <<
|
169
|
+
'>'
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def encode_tag_end(elename, cr = nil)
|
174
|
+
if cr
|
175
|
+
@buf << "\n#{ @indent }</#{ elename }>"
|
176
|
+
else
|
177
|
+
@buf << "</#{ elename }>"
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def encode_rawstring(str)
|
182
|
+
@buf << str
|
183
|
+
end
|
184
|
+
|
185
|
+
EncodeMap = {
|
186
|
+
'&' => '&',
|
187
|
+
'<' => '<',
|
188
|
+
'>' => '>',
|
189
|
+
'"' => '"',
|
190
|
+
'\'' => ''',
|
191
|
+
"\r" => '
'
|
192
|
+
}
|
193
|
+
EncodeCharRegexp = Regexp.new("[#{EncodeMap.keys.join}]")
|
194
|
+
def encode_string(str)
|
195
|
+
if @use_numeric_character_reference and !XSD::Charset.is_us_ascii(str)
|
196
|
+
str.gsub!(EncodeCharRegexp) { |c| EncodeMap[c] }
|
197
|
+
@buf << str.unpack("U*").collect { |c|
|
198
|
+
if c == 0x9 or c == 0xa or c == 0xd or (c >= 0x20 and c <= 0x7f)
|
199
|
+
c.chr
|
200
|
+
else
|
201
|
+
sprintf("&#x%x;", c)
|
202
|
+
end
|
203
|
+
}.join
|
204
|
+
else
|
205
|
+
@buf << str.gsub(EncodeCharRegexp) { |c| EncodeMap[c] }
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def element_local?(element)
|
210
|
+
element.elename.namespace.nil?
|
211
|
+
end
|
212
|
+
|
213
|
+
def element_qualified?(element)
|
214
|
+
if element.respond_to?(:qualified)
|
215
|
+
if element.qualified.nil?
|
216
|
+
@elementformdefault
|
217
|
+
else
|
218
|
+
element.qualified
|
219
|
+
end
|
220
|
+
else
|
221
|
+
@elementformdefault
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def self.assign_ns(attrs, ns, namespace, tag = nil)
|
226
|
+
if namespace.nil?
|
227
|
+
raise FormatEncodeError.new("empty namespace")
|
228
|
+
end
|
229
|
+
unless ns.assigned?(namespace)
|
230
|
+
tag = ns.assign(namespace, tag)
|
231
|
+
if tag == ''
|
232
|
+
attr = 'xmlns'
|
233
|
+
else
|
234
|
+
attr = "xmlns:#{tag}"
|
235
|
+
end
|
236
|
+
attrs[attr] = namespace
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
private
|
241
|
+
|
242
|
+
def prologue
|
243
|
+
end
|
244
|
+
|
245
|
+
def epilogue
|
246
|
+
end
|
247
|
+
|
248
|
+
def find_handler(encodingstyle)
|
249
|
+
unless @handlers.key?(encodingstyle)
|
250
|
+
handler = SOAP::EncodingStyle::Handler.handler(encodingstyle).new(@charset)
|
251
|
+
handler.generate_explicit_type = @generate_explicit_type
|
252
|
+
handler.encode_prologue
|
253
|
+
@handlers[encodingstyle] = handler
|
254
|
+
end
|
255
|
+
@handlers[encodingstyle]
|
256
|
+
end
|
257
|
+
|
258
|
+
def xmldecl
|
259
|
+
if @charset
|
260
|
+
%Q[<?xml version="1.0" encoding="#{ @charset }" ?>]
|
261
|
+
else
|
262
|
+
%Q[<?xml version="1.0" ?>]
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
|
268
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# SOAP4R - SOAP Header handler item
|
2
|
+
# Copyright (C) 2003, 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/soap/element'
|
10
|
+
|
11
|
+
|
12
|
+
module SOAP
|
13
|
+
module Header
|
14
|
+
|
15
|
+
|
16
|
+
class Handler
|
17
|
+
attr_reader :elename
|
18
|
+
attr_reader :mustunderstand
|
19
|
+
attr_reader :encodingstyle
|
20
|
+
|
21
|
+
def initialize(elename)
|
22
|
+
@elename = elename
|
23
|
+
@mustunderstand = false
|
24
|
+
@encodingstyle = nil
|
25
|
+
end
|
26
|
+
|
27
|
+
# Should return a SOAP/OM, a SOAPHeaderItem or nil.
|
28
|
+
def on_outbound
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
# Given header is a SOAPHeaderItem or nil.
|
33
|
+
def on_inbound(header, mustunderstand = false)
|
34
|
+
# do something.
|
35
|
+
end
|
36
|
+
|
37
|
+
def on_outbound_headeritem
|
38
|
+
item = on_outbound
|
39
|
+
if item.nil?
|
40
|
+
nil
|
41
|
+
elsif item.is_a?(::SOAP::SOAPHeaderItem)
|
42
|
+
item.elename = @elename
|
43
|
+
item
|
44
|
+
else
|
45
|
+
item.elename = @elename
|
46
|
+
::SOAP::SOAPHeaderItem.new(item, @mustunderstand, @encodingstyle)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def on_inbound_headeritem(header)
|
51
|
+
on_inbound(header.element, header.mustunderstand)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# SOAP4R - SOAP Header handler set
|
2
|
+
# Copyright (C) 2003, 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/xsd/namedelements'
|
10
|
+
|
11
|
+
|
12
|
+
module SOAP
|
13
|
+
module Header
|
14
|
+
|
15
|
+
|
16
|
+
class HandlerSet
|
17
|
+
def initialize
|
18
|
+
@store = XSD::NamedElements.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def dup
|
22
|
+
obj = HandlerSet.new
|
23
|
+
obj.store = @store.dup
|
24
|
+
obj
|
25
|
+
end
|
26
|
+
|
27
|
+
def add(handler)
|
28
|
+
@store << handler
|
29
|
+
end
|
30
|
+
alias << add
|
31
|
+
|
32
|
+
def delete(handler)
|
33
|
+
@store.delete(handler)
|
34
|
+
end
|
35
|
+
|
36
|
+
def include?(handler)
|
37
|
+
@store.include?(handler)
|
38
|
+
end
|
39
|
+
|
40
|
+
# returns: Array of SOAPHeaderItem
|
41
|
+
def on_outbound
|
42
|
+
@store.collect { |handler|
|
43
|
+
handler.on_outbound_headeritem
|
44
|
+
}.compact
|
45
|
+
end
|
46
|
+
|
47
|
+
# headers: SOAPHeaderItem enumerable object
|
48
|
+
def on_inbound(headers)
|
49
|
+
headers.each do |name, item|
|
50
|
+
handler = @store.find { |handler|
|
51
|
+
handler.elename == item.element.elename
|
52
|
+
}
|
53
|
+
if handler
|
54
|
+
handler.on_inbound_headeritem(item)
|
55
|
+
elsif item.mustunderstand
|
56
|
+
raise UnhandledMustUnderstandHeaderError.new(item.element.elename.to_s)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
protected
|
62
|
+
|
63
|
+
def store=(store)
|
64
|
+
@store = store
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# SOAP4R - SOAP Simple header item handler
|
2
|
+
# Copyright (C) 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/soap/header/handler'
|
10
|
+
require 'action_web_service/soap/baseData'
|
11
|
+
|
12
|
+
|
13
|
+
module SOAP
|
14
|
+
module Header
|
15
|
+
|
16
|
+
|
17
|
+
class SimpleHandler < SOAP::Header::Handler
|
18
|
+
def initialize(elename)
|
19
|
+
super(elename)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Should return a Hash, String or nil.
|
23
|
+
def on_simple_outbound
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
|
27
|
+
# Given header is a Hash, String or nil.
|
28
|
+
def on_simple_inbound(header, mustunderstand)
|
29
|
+
end
|
30
|
+
|
31
|
+
def on_outbound
|
32
|
+
h = on_simple_outbound
|
33
|
+
h ? SOAPElement.from_obj(h, elename.namespace) : nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def on_inbound(header, mustunderstand)
|
37
|
+
h = header.respond_to?(:to_obj) ? header.to_obj : header.data
|
38
|
+
on_simple_inbound(h, mustunderstand)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# SOAP4R - HTTP config loader.
|
2
|
+
# Copyright (C) 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/soap/property'
|
10
|
+
|
11
|
+
|
12
|
+
module SOAP
|
13
|
+
|
14
|
+
|
15
|
+
module HTTPConfigLoader
|
16
|
+
module_function
|
17
|
+
|
18
|
+
def set_options(client, options)
|
19
|
+
client.proxy = options["proxy"]
|
20
|
+
options.add_hook("proxy") do |key, value|
|
21
|
+
client.proxy = value
|
22
|
+
end
|
23
|
+
client.no_proxy = options["no_proxy"]
|
24
|
+
options.add_hook("no_proxy") do |key, value|
|
25
|
+
client.no_proxy = value
|
26
|
+
end
|
27
|
+
if client.respond_to?(:protocol_version=)
|
28
|
+
client.protocol_version = options["protocol_version"]
|
29
|
+
options.add_hook("protocol_version") do |key, value|
|
30
|
+
client.protocol_version = value
|
31
|
+
end
|
32
|
+
end
|
33
|
+
ssl_config = options["ssl_config"] ||= ::SOAP::Property.new
|
34
|
+
set_ssl_config(client, ssl_config)
|
35
|
+
ssl_config.add_hook(true) do |key, value|
|
36
|
+
set_ssl_config(client, ssl_config)
|
37
|
+
end
|
38
|
+
basic_auth = options["basic_auth"] ||= ::SOAP::Property.new
|
39
|
+
set_basic_auth(client, basic_auth)
|
40
|
+
basic_auth.add_hook do |key, value|
|
41
|
+
set_basic_auth(client, basic_auth)
|
42
|
+
end
|
43
|
+
options.add_hook("connect_timeout") do |key, value|
|
44
|
+
client.connect_timeout = value
|
45
|
+
end
|
46
|
+
options.add_hook("send_timeout") do |key, value|
|
47
|
+
client.send_timeout = value
|
48
|
+
end
|
49
|
+
options.add_hook("receive_timeout") do |key, value|
|
50
|
+
client.receive_timeout = value
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def set_basic_auth(client, basic_auth)
|
55
|
+
basic_auth.values.each do |url, userid, passwd|
|
56
|
+
client.set_basic_auth(url, userid, passwd)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def set_ssl_config(client, ssl_config)
|
61
|
+
ssl_config.each do |key, value|
|
62
|
+
cfg = client.ssl_config
|
63
|
+
if cfg.nil?
|
64
|
+
raise NotImplementedError.new("SSL not supported")
|
65
|
+
end
|
66
|
+
case key
|
67
|
+
when 'client_cert'
|
68
|
+
cfg.client_cert = cert_from_file(value)
|
69
|
+
when 'client_key'
|
70
|
+
cfg.client_key = key_from_file(value)
|
71
|
+
when 'client_ca'
|
72
|
+
cfg.client_ca = value
|
73
|
+
when 'ca_path'
|
74
|
+
cfg.set_trust_ca(value)
|
75
|
+
when 'ca_file'
|
76
|
+
cfg.set_trust_ca(value)
|
77
|
+
when 'crl'
|
78
|
+
cfg.set_crl(value)
|
79
|
+
when 'verify_mode'
|
80
|
+
cfg.verify_mode = ssl_config_int(value)
|
81
|
+
when 'verify_depth'
|
82
|
+
cfg.verify_depth = ssl_config_int(value)
|
83
|
+
when 'options'
|
84
|
+
cfg.options = value
|
85
|
+
when 'ciphers'
|
86
|
+
cfg.ciphers = value
|
87
|
+
when 'verify_callback'
|
88
|
+
cfg.verify_callback = value
|
89
|
+
when 'cert_store'
|
90
|
+
cfg.cert_store = value
|
91
|
+
else
|
92
|
+
raise ArgumentError.new("unknown ssl_config property #{key}")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def ssl_config_int(value)
|
98
|
+
if value.nil? or value.to_s.empty?
|
99
|
+
nil
|
100
|
+
else
|
101
|
+
begin
|
102
|
+
Integer(value)
|
103
|
+
rescue ArgumentError
|
104
|
+
::SOAP::Property::Util.const_from_name(value.to_s)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def cert_from_file(filename)
|
110
|
+
OpenSSL::X509::Certificate.new(File.open(filename) { |f| f.read })
|
111
|
+
end
|
112
|
+
|
113
|
+
def key_from_file(filename)
|
114
|
+
OpenSSL::PKey::RSA.new(File.open(filename) { |f| f.read })
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
|
119
|
+
end
|