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,43 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - Nested exception implementation
|
|
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
|
+
module SOAP
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module NestedException
|
|
14
|
+
attr_reader :cause
|
|
15
|
+
attr_reader :original_backtraace
|
|
16
|
+
|
|
17
|
+
def initialize(msg = nil, cause = nil)
|
|
18
|
+
super(msg)
|
|
19
|
+
@cause = cause
|
|
20
|
+
@original_backtrace = nil
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def set_backtrace(backtrace)
|
|
24
|
+
if defined?(@cause) and @cause.respond_to?(:backtrace)
|
|
25
|
+
@original_backtrace = backtrace
|
|
26
|
+
=begin
|
|
27
|
+
# for agressive backtrace abstraction: 'here' only should not be good
|
|
28
|
+
here = @original_backtrace[0]
|
|
29
|
+
backtrace = Array[*@cause.backtrace]
|
|
30
|
+
backtrace[0] = "#{backtrace[0]}: #{@cause} (#{@cause.class})"
|
|
31
|
+
backtrace.unshift(here)
|
|
32
|
+
=end
|
|
33
|
+
# just join the nested backtrace at the tail of backtrace
|
|
34
|
+
caused = Array[*@cause.backtrace]
|
|
35
|
+
caused[0] = "#{caused[0]}: #{@cause} (#{@cause.class}) [NESTED]"
|
|
36
|
+
backtrace += caused
|
|
37
|
+
end
|
|
38
|
+
super(backtrace)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
end
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - net/http wrapper
|
|
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 'net/http'
|
|
11
|
+
require 'soap/filter/filterchain'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module SOAP
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class NetHttpClient
|
|
18
|
+
|
|
19
|
+
SSLEnabled = begin
|
|
20
|
+
require 'net/https'
|
|
21
|
+
true
|
|
22
|
+
rescue LoadError
|
|
23
|
+
false
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
attr_reader :proxy
|
|
27
|
+
attr_accessor :no_proxy
|
|
28
|
+
attr_accessor :debug_dev
|
|
29
|
+
attr_accessor :ssl_config # ignored for now.
|
|
30
|
+
attr_accessor :protocol_version # ignored for now.
|
|
31
|
+
attr_accessor :connect_timeout
|
|
32
|
+
attr_accessor :send_timeout # ignored for now.
|
|
33
|
+
attr_accessor :receive_timeout
|
|
34
|
+
attr_reader :test_loopback_response
|
|
35
|
+
attr_reader :request_filter # ignored for now.
|
|
36
|
+
|
|
37
|
+
def initialize(proxy = nil, agent = nil)
|
|
38
|
+
@proxy = proxy ? URI.parse(proxy) : nil
|
|
39
|
+
@agent = agent
|
|
40
|
+
@debug_dev = nil
|
|
41
|
+
@test_loopback_response = []
|
|
42
|
+
@request_filter = Filter::FilterChain.new
|
|
43
|
+
@session_manager = SessionManager.new
|
|
44
|
+
@no_proxy = @ssl_config = @protocol_version = nil
|
|
45
|
+
@connect_timeout = @send_timeout = @receive_timeout = nil
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def proxy=(proxy)
|
|
49
|
+
if proxy.nil?
|
|
50
|
+
@proxy = nil
|
|
51
|
+
else
|
|
52
|
+
if proxy.is_a?(URI)
|
|
53
|
+
@proxy = proxy
|
|
54
|
+
else
|
|
55
|
+
@proxy = URI.parse(proxy)
|
|
56
|
+
end
|
|
57
|
+
if @proxy.scheme == nil or @proxy.scheme.downcase != 'http' or
|
|
58
|
+
@proxy.host == nil or @proxy.port == nil
|
|
59
|
+
raise ArgumentError.new("unsupported proxy `#{proxy}'")
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
reset_all
|
|
63
|
+
@proxy
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def set_auth(uri, user_id, passwd)
|
|
67
|
+
raise NotImplementedError.new("auth is not supported under soap4r + net/http.")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def set_basic_auth(uri, user_id, passwd)
|
|
71
|
+
# net/http does not handle url.
|
|
72
|
+
@basic_auth = [user_id, passwd]
|
|
73
|
+
raise NotImplementedError.new("basic_auth is not supported under soap4r + net/http.")
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def set_cookie_store(filename)
|
|
77
|
+
raise NotImplementedError.new
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def save_cookie_store(filename)
|
|
81
|
+
raise NotImplementedError.new
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def reset(url)
|
|
85
|
+
# no persistent connection. ignored.
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def reset_all
|
|
89
|
+
# no persistent connection. ignored.
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def post(url, req_body, header = {})
|
|
93
|
+
post_redirect(url, req_body, header, 10)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def get_content(url, header = {})
|
|
97
|
+
if str = @test_loopback_response.shift
|
|
98
|
+
return str
|
|
99
|
+
end
|
|
100
|
+
unless url.is_a?(URI)
|
|
101
|
+
url = URI.parse(url)
|
|
102
|
+
end
|
|
103
|
+
extra = header.dup
|
|
104
|
+
extra['User-Agent'] = @agent if @agent
|
|
105
|
+
res = start(url) { |http|
|
|
106
|
+
http.get(url.request_uri, extra)
|
|
107
|
+
}
|
|
108
|
+
res.body
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
private
|
|
112
|
+
|
|
113
|
+
def post_redirect(url, req_body, header, redirect_count)
|
|
114
|
+
if str = @test_loopback_response.shift
|
|
115
|
+
if @debug_dev
|
|
116
|
+
@debug_dev << "= Request\n\n"
|
|
117
|
+
@debug_dev << req_body
|
|
118
|
+
@debug_dev << "\n\n= Response\n\n"
|
|
119
|
+
@debug_dev << str
|
|
120
|
+
end
|
|
121
|
+
status = 200
|
|
122
|
+
reason = nil
|
|
123
|
+
contenttype = 'text/xml'
|
|
124
|
+
content = str
|
|
125
|
+
return Response.new(status, reason, contenttype, content)
|
|
126
|
+
return str
|
|
127
|
+
end
|
|
128
|
+
unless url.is_a?(URI)
|
|
129
|
+
url = URI.parse(url)
|
|
130
|
+
end
|
|
131
|
+
extra = header.dup
|
|
132
|
+
extra['User-Agent'] = @agent if @agent
|
|
133
|
+
res = start(url) { |http|
|
|
134
|
+
if @debug_dev
|
|
135
|
+
@debug_dev << "= Request\n\n"
|
|
136
|
+
@debug_dev << req_body << "\n"
|
|
137
|
+
end
|
|
138
|
+
http.post(url.request_uri, req_body, extra)
|
|
139
|
+
}
|
|
140
|
+
case res
|
|
141
|
+
when Net::HTTPRedirection
|
|
142
|
+
if redirect_count > 0
|
|
143
|
+
post_redirect(res['location'], req_body, header,
|
|
144
|
+
redirect_count - 1)
|
|
145
|
+
else
|
|
146
|
+
raise ArgumentError.new("Too many redirects")
|
|
147
|
+
end
|
|
148
|
+
else
|
|
149
|
+
Response.from_httpresponse(res)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def start(url)
|
|
154
|
+
http = create_connection(url)
|
|
155
|
+
response = nil
|
|
156
|
+
http.start { |worker|
|
|
157
|
+
response = yield(worker)
|
|
158
|
+
worker.finish
|
|
159
|
+
}
|
|
160
|
+
if @debug_dev
|
|
161
|
+
@debug_dev << "\n\n= Response\n\n"
|
|
162
|
+
@debug_dev << response.body << "\n"
|
|
163
|
+
end
|
|
164
|
+
response
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def create_connection(url)
|
|
168
|
+
proxy_host = proxy_port = nil
|
|
169
|
+
unless no_proxy?(url)
|
|
170
|
+
proxy_host = @proxy.host
|
|
171
|
+
proxy_port = @proxy.port
|
|
172
|
+
end
|
|
173
|
+
http = Net::HTTP::Proxy(proxy_host, proxy_port).new(url.host, url.port)
|
|
174
|
+
if http.respond_to?(:set_debug_output)
|
|
175
|
+
http.set_debug_output(@debug_dev)
|
|
176
|
+
end
|
|
177
|
+
http.open_timeout = @connect_timeout if @connect_timeout
|
|
178
|
+
http.read_timeout = @receive_timeout if @receive_timeout
|
|
179
|
+
case url
|
|
180
|
+
when URI::HTTPS
|
|
181
|
+
if SSLEnabled
|
|
182
|
+
http.use_ssl = true
|
|
183
|
+
else
|
|
184
|
+
raise RuntimeError.new("Cannot connect to #{url} (OpenSSL is not installed.)")
|
|
185
|
+
end
|
|
186
|
+
when URI::HTTP
|
|
187
|
+
# OK
|
|
188
|
+
else
|
|
189
|
+
raise RuntimeError.new("Cannot connect to #{url} (Not HTTP.)")
|
|
190
|
+
end
|
|
191
|
+
http
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
NO_PROXY_HOSTS = ['localhost']
|
|
195
|
+
|
|
196
|
+
def no_proxy?(uri)
|
|
197
|
+
if !@proxy or NO_PROXY_HOSTS.include?(uri.host)
|
|
198
|
+
return true
|
|
199
|
+
end
|
|
200
|
+
unless @no_proxy
|
|
201
|
+
return false
|
|
202
|
+
end
|
|
203
|
+
@no_proxy.scan(/([^:,]+)(?::(\d+))?/) do |host, port|
|
|
204
|
+
if /(\A|\.)#{Regexp.quote(host)}\z/i =~ uri.host &&
|
|
205
|
+
(!port || uri.port == port.to_i)
|
|
206
|
+
return true
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
false
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
class SessionManager
|
|
213
|
+
attr_accessor :connect_timeout
|
|
214
|
+
attr_accessor :send_timeout
|
|
215
|
+
attr_accessor :receive_timeout
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
class Response
|
|
219
|
+
attr_reader :status
|
|
220
|
+
attr_reader :reason
|
|
221
|
+
attr_reader :contenttype
|
|
222
|
+
attr_reader :content
|
|
223
|
+
|
|
224
|
+
def initialize(status, reason, contenttype, content)
|
|
225
|
+
@status = status
|
|
226
|
+
@reason = reason
|
|
227
|
+
@contenttype = contenttype
|
|
228
|
+
@content = content
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def self.from_httpresponse(res)
|
|
232
|
+
status = res.code.to_i
|
|
233
|
+
reason = res.message
|
|
234
|
+
contenttype = res['content-type']
|
|
235
|
+
content = res.body
|
|
236
|
+
new(status, reason, contenttype, content)
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - SOAP Namespace library
|
|
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 'xsd/datatypes'
|
|
11
|
+
require 'xsd/ns'
|
|
12
|
+
require 'soap/soap'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
module SOAP
|
|
16
|
+
|
|
17
|
+
## Rubyjedi: Provide these (deprecated) constants for backward compatibility with older ActionWebService
|
|
18
|
+
SOAPNamespaceTag = 'env'
|
|
19
|
+
XSDNamespaceTag = 'xsd'
|
|
20
|
+
XSINamespaceTag = 'xsi'
|
|
21
|
+
|
|
22
|
+
class NS < XSD::NS
|
|
23
|
+
KNOWN_TAG = XSD::NS::KNOWN_TAG.dup.update(
|
|
24
|
+
SOAP::EnvelopeNamespace => 'env'
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
def initialize(tag2ns = nil)
|
|
28
|
+
super(tag2ns)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def default_known_tag
|
|
34
|
+
KNOWN_TAG
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
end
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - SOAP XML Instance Parser library.
|
|
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 'xsd/xmlparser'
|
|
11
|
+
require 'soap/soap'
|
|
12
|
+
require 'soap/ns'
|
|
13
|
+
require 'soap/baseData'
|
|
14
|
+
require 'soap/encodingstyle/handler'
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
module SOAP
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Parser
|
|
21
|
+
include SOAP
|
|
22
|
+
|
|
23
|
+
class ParseError < Error; end
|
|
24
|
+
class FormatDecodeError < ParseError; end
|
|
25
|
+
class UnexpectedElementError < ParseError; end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
class ParseFrame
|
|
30
|
+
attr_reader :node
|
|
31
|
+
attr_reader :name
|
|
32
|
+
attr_reader :ns
|
|
33
|
+
attr_reader :encodingstyle
|
|
34
|
+
attr_reader :handler
|
|
35
|
+
|
|
36
|
+
class NodeContainer
|
|
37
|
+
def initialize(node)
|
|
38
|
+
@node = node
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def node
|
|
42
|
+
@node
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def replace_node(node)
|
|
46
|
+
@node = node
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
public
|
|
51
|
+
|
|
52
|
+
def initialize(ns, name, node, encodingstyle, handler)
|
|
53
|
+
@ns = ns
|
|
54
|
+
@name = name
|
|
55
|
+
@node = NodeContainer.new(node)
|
|
56
|
+
@encodingstyle = encodingstyle
|
|
57
|
+
@handler = handler
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# to avoid memory consumption
|
|
61
|
+
def update(ns, name, node, encodingstyle, handler)
|
|
62
|
+
@ns = ns
|
|
63
|
+
@name = name
|
|
64
|
+
@node.replace_node(node)
|
|
65
|
+
@encodingstyle = encodingstyle
|
|
66
|
+
@handler = handler
|
|
67
|
+
self
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
public
|
|
72
|
+
|
|
73
|
+
attr_accessor :envelopenamespace
|
|
74
|
+
attr_accessor :default_encodingstyle
|
|
75
|
+
attr_accessor :decode_typemap
|
|
76
|
+
attr_accessor :allow_unqualified_element
|
|
77
|
+
|
|
78
|
+
def initialize(opt = {})
|
|
79
|
+
@opt = opt
|
|
80
|
+
@parser = XSD::XMLParser.create_parser(self, opt)
|
|
81
|
+
@parsestack = nil
|
|
82
|
+
@recycleframe = nil
|
|
83
|
+
@lastnode = nil
|
|
84
|
+
@handlers = {}
|
|
85
|
+
@envelopenamespace = opt[:envelopenamespace] || EnvelopeNamespace
|
|
86
|
+
@default_encodingstyle = opt[:default_encodingstyle] || EncodingNamespace
|
|
87
|
+
@decode_typemap = opt[:decode_typemap] || nil
|
|
88
|
+
@allow_unqualified_element = opt[:allow_unqualified_element] || false
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def charset
|
|
92
|
+
@parser.charset
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def parse(string_or_readable)
|
|
96
|
+
@parsestack = []
|
|
97
|
+
@lastnode = nil
|
|
98
|
+
|
|
99
|
+
@handlers.each do |uri, handler|
|
|
100
|
+
handler.decode_prologue
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
@parser.do_parse(string_or_readable)
|
|
104
|
+
|
|
105
|
+
unless @parsestack.empty?
|
|
106
|
+
raise FormatDecodeError.new("Unbalanced tag in XML.")
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
@handlers.each do |uri, handler|
|
|
110
|
+
handler.decode_epilogue
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
@lastnode
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def start_element(name, raw_attrs)
|
|
117
|
+
lastframe = @parsestack.last
|
|
118
|
+
ns = parent = parent_encodingstyle = nil
|
|
119
|
+
if lastframe
|
|
120
|
+
ns = lastframe.ns
|
|
121
|
+
parent = lastframe.node
|
|
122
|
+
parent_encodingstyle = lastframe.encodingstyle
|
|
123
|
+
else
|
|
124
|
+
ns = SOAP::NS.new
|
|
125
|
+
parent = ParseFrame::NodeContainer.new(nil)
|
|
126
|
+
parent_encodingstyle = nil
|
|
127
|
+
end
|
|
128
|
+
# ns might be the same
|
|
129
|
+
ns, raw_attrs = XSD::XMLParser.filter_ns(ns, raw_attrs)
|
|
130
|
+
attrs = decode_attrs(ns, raw_attrs)
|
|
131
|
+
encodingstyle = attrs[AttrEncodingStyleName]
|
|
132
|
+
# Children's encodingstyle is derived from its parent.
|
|
133
|
+
if encodingstyle.nil?
|
|
134
|
+
if parent.node.is_a?(SOAPHeader)
|
|
135
|
+
encodingstyle = LiteralNamespace
|
|
136
|
+
else
|
|
137
|
+
encodingstyle = parent_encodingstyle || @default_encodingstyle
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
handler = find_handler(encodingstyle)
|
|
141
|
+
unless handler
|
|
142
|
+
raise FormatDecodeError.new("Unknown encodingStyle: #{ encodingstyle }.")
|
|
143
|
+
end
|
|
144
|
+
node = decode_tag(ns, name, attrs, parent, handler)
|
|
145
|
+
if @recycleframe
|
|
146
|
+
@parsestack << @recycleframe.update(ns, name, node, encodingstyle, handler)
|
|
147
|
+
@recycleframe = nil
|
|
148
|
+
else
|
|
149
|
+
@parsestack << ParseFrame.new(ns, name, node, encodingstyle, handler)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def characters(text)
|
|
154
|
+
# Ignore Text outside of SOAP Envelope.
|
|
155
|
+
if lastframe = @parsestack.last
|
|
156
|
+
# Need not to be cloned because character does not have attr.
|
|
157
|
+
decode_text(lastframe.ns, text, lastframe.handler)
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def end_element(name)
|
|
162
|
+
lastframe = @parsestack.pop
|
|
163
|
+
unless name == lastframe.name
|
|
164
|
+
raise UnexpectedElementError.new("Closing element name '#{ name }' does not match with opening element '#{ lastframe.name }'.")
|
|
165
|
+
end
|
|
166
|
+
decode_tag_end(lastframe.ns, lastframe.node, lastframe.handler)
|
|
167
|
+
@lastnode = lastframe.node.node
|
|
168
|
+
@recycleframe = lastframe
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
private
|
|
172
|
+
|
|
173
|
+
def decode_tag(ns, name, attrs, parent, handler)
|
|
174
|
+
ele = ns.parse(name)
|
|
175
|
+
# Envelope based parsing.
|
|
176
|
+
if ((ele.namespace == @envelopenamespace) ||
|
|
177
|
+
(@allow_unqualified_element && ele.namespace.nil?))
|
|
178
|
+
o = decode_soap_envelope(ns, ele, attrs, parent)
|
|
179
|
+
return o if o
|
|
180
|
+
end
|
|
181
|
+
# Encoding based parsing.
|
|
182
|
+
return handler.decode_tag(ns, ele, attrs, parent)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def decode_tag_end(ns, node, handler)
|
|
186
|
+
return handler.decode_tag_end(ns, node)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def decode_attrs(ns, attrs)
|
|
190
|
+
extraattr = {}
|
|
191
|
+
attrs.each do |key, value|
|
|
192
|
+
qname = ns.parse_local(key)
|
|
193
|
+
extraattr[qname] = value
|
|
194
|
+
end
|
|
195
|
+
extraattr
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def decode_text(ns, text, handler)
|
|
199
|
+
handler.decode_text(ns, text)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def decode_soap_envelope(ns, ele, attrs, parent)
|
|
203
|
+
o = nil
|
|
204
|
+
if ele.name == EleEnvelope
|
|
205
|
+
o = SOAPEnvelope.new
|
|
206
|
+
if ext = @opt[:external_content]
|
|
207
|
+
ext.each do |k, v|
|
|
208
|
+
o.external_content[k] = v
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
elsif ele.name == EleHeader
|
|
212
|
+
return nil unless parent.node.is_a?(SOAPEnvelope)
|
|
213
|
+
o = SOAPHeader.new
|
|
214
|
+
parent.node.header = o
|
|
215
|
+
elsif ele.name == EleBody
|
|
216
|
+
return nil unless parent.node.is_a?(SOAPEnvelope)
|
|
217
|
+
o = SOAPBody.new
|
|
218
|
+
parent.node.body = o
|
|
219
|
+
elsif ele.name == EleFault
|
|
220
|
+
if parent.node.is_a?(SOAPBody)
|
|
221
|
+
o = SOAPFault.new
|
|
222
|
+
parent.node.fault = o
|
|
223
|
+
elsif parent.node.is_a?(SOAPEnvelope)
|
|
224
|
+
# live.com server returns SOAPFault as a direct child of SOAPEnvelope.
|
|
225
|
+
# support it even if it's not spec compliant.
|
|
226
|
+
warn("Fault must be a child of Body.")
|
|
227
|
+
body = SOAPBody.new
|
|
228
|
+
parent.node.body = body
|
|
229
|
+
o = SOAPFault.new
|
|
230
|
+
body.fault = o
|
|
231
|
+
else
|
|
232
|
+
return nil
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
o.extraattr.update(attrs) if o
|
|
236
|
+
o
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def find_handler(encodingstyle)
|
|
240
|
+
unless @handlers.key?(encodingstyle)
|
|
241
|
+
handler_factory = SOAP::EncodingStyle::Handler.handler(encodingstyle) ||
|
|
242
|
+
SOAP::EncodingStyle::Handler.handler(EncodingNamespace)
|
|
243
|
+
handler = handler_factory.new(@parser.charset)
|
|
244
|
+
handler.decode_typemap = @decode_typemap
|
|
245
|
+
handler.decode_prologue
|
|
246
|
+
@handlers[encodingstyle] = handler
|
|
247
|
+
end
|
|
248
|
+
@handlers[encodingstyle]
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
end
|