Changeset 2000
- Timestamp:
- 10/09/07 23:16:36 (1 year ago)
- Files:
-
- trunk/lib/soap/attrproxy.rb (added)
- trunk/lib/soap/generator.rb (modified) (1 diff)
- trunk/lib/soap/mapping/encodedregistry.rb (modified) (1 diff)
- trunk/lib/soap/mapping/mapping.rb (modified) (5 diffs)
- trunk/lib/soap/mapping/rubytypeFactory.rb (modified) (4 diffs)
- trunk/lib/soap/rpc/driver.rb (modified) (3 diffs)
- trunk/lib/soap/rpc/httpserver.rb (modified) (4 diffs)
- trunk/lib/soap/rpc/proxy.rb (modified) (1 diff)
- trunk/lib/soap/rpc/soaplet.rb (modified) (1 diff)
- trunk/lib/soap/streamHandler.rb (modified) (1 diff)
- trunk/lib/soap/wsdlDriver.rb (modified) (4 diffs)
- trunk/lib/wsdl/xmlSchema/attribute.rb (modified) (5 diffs)
- trunk/lib/wsdl/xmlSchema/attributeGroup.rb (modified) (5 diffs)
- trunk/lib/wsdl/xmlSchema/element.rb (modified) (5 diffs)
- trunk/lib/wsdl/xmlSchema/group.rb (modified) (5 diffs)
- trunk/lib/wsdl/xmlSchema/ref.rb (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/generator.rb
r1975 r2000 299 299 end 300 300 301 SOAPGenerator = Generator # for backward compatibility302 303 301 304 302 end trunk/lib/soap/mapping/encodedregistry.rb
r1998 r2000 403 403 end 404 404 405 if RUBY_VERSION >= '1.8.0' 406 def addextend2obj(obj, attr) 407 return unless attr 408 attr.split(/ /).reverse_each do |mstr| 409 obj.extend(Mapping.module_from_name(mstr)) 410 end 411 end 412 else 413 # (class < false; self; end).ancestors includes "TrueClass" under 1.6... 414 def addextend2obj(obj, attr) 415 return unless attr 416 attr.split(/ /).reverse_each do |mstr| 417 m = Mapping.module_from_name(mstr) 418 obj.extend(m) 419 end 405 def addextend2obj(obj, attr) 406 return unless attr 407 attr.split(/ /).reverse_each do |mstr| 408 obj.extend(Mapping.module_from_name(mstr)) 420 409 end 421 410 end trunk/lib/soap/mapping/mapping.rb
r1982 r2000 92 92 def self.fault2exception(fault, registry = nil) 93 93 registry ||= Mapping::DefaultRegistry 94 detail = if fault.detail 95 soap2obj(fault.detail, registry) || "" 96 else 97 "" 98 end 94 detail = "" 95 if fault.detail 96 begin 97 fault.detail.type ||= XSD::QName::EMPTY 98 detail = soap2obj(fault.detail, registry) || "" 99 rescue MappingError 100 detail = fault.detail 101 end 102 end 99 103 if detail.is_a?(Mapping::SOAPException) 100 104 begin … … 151 155 end 152 156 153 if Object.respond_to?(:allocate) 154 # ruby/1.7 or later. 155 def self.create_empty_object(klass) 156 klass.allocate 157 end 158 else 159 MARSHAL_TAG = { 160 String => ['"', 1], 161 Regexp => ['/', 2], 162 Array => ['[', 1], 163 Hash => ['{', 1] 164 } 165 def self.create_empty_object(klass) 166 if klass <= Struct 167 name = klass.name 168 return ::Marshal.load(sprintf("\004\006S:%c%s\000", name.length + 5, name)) 169 end 170 if MARSHAL_TAG.has_key?(klass) 171 tag, terminate = MARSHAL_TAG[klass] 172 return ::Marshal.load(sprintf("\004\006%s%s", tag, "\000" * terminate)) 173 end 174 MARSHAL_TAG.each do |k, v| 175 if klass < k 176 name = klass.name 177 tag, terminate = v 178 return ::Marshal.load(sprintf("\004\006C:%c%s%s%s", name.length + 5, name, tag, "\000" * terminate)) 179 end 180 end 181 name = klass.name 182 ::Marshal.load(sprintf("\004\006o:%c%s\000", name.length + 5, name)) 183 end 157 def self.create_empty_object(klass) 158 klass.allocate 184 159 end 185 160 … … 470 445 is_anonymous = definition[:is_anonymous] 471 446 schema_basetype = definition[:schema_basetype] 472 # wrap if needed for backward compatibility473 if schema_ns474 schema_name = Mapping.to_qname(schema_name, schema_ns) if schema_name475 schema_type = Mapping.to_qname(schema_type, schema_ns) if schema_type476 # no need for schema_basetype bacause it's introduced later477 end478 447 schema_qualified = definition[:schema_qualified] 479 448 schema_element = definition[:schema_element] … … 498 467 end 499 468 500 # for backward compatibility501 469 # returns SchemaComplexTypeDefinition 502 470 def self.parse_schema_definition(schema_element, default_ns) … … 527 495 minoccurs, maxoccurs = occurrence 528 496 else 529 # for backward compatibility530 497 minoccurs, maxoccurs = 1, 1 531 498 end trunk/lib/soap/mapping/rubytypeFactory.rb
r1873 r2000 125 125 end 126 126 param.add('source', SOAPBase64.new(obj.source)) 127 if obj.respond_to?('options') 128 # Regexp#options is from Ruby/1.7 129 options = obj.options 130 else 131 options = 0 132 obj.inspect.sub(/^.*\//, '').each_byte do |c| 133 options += case c 134 when ?i 135 1 136 when ?x 137 2 138 when ?m 139 4 140 when ?n 141 16 142 when ?e 143 32 144 when ?s 145 48 146 when ?u 147 64 148 end 149 end 150 end 127 options = obj.options 151 128 param.add('options', SOAPInt.new(options)) 152 129 addiv2soapattr(param, obj, map) … … 217 194 end 218 195 when ::IO, ::Binding, ::Continuation, ::Data, ::Dir, ::File::Stat, 219 ::MatchData, Method, ::Proc, :: Thread, ::ThreadGroup220 # from 1.8: Process::Status,UnboundMethod196 ::MatchData, Method, ::Proc, ::Process::Status, ::Thread, 197 ::ThreadGroup, ::UnboundMethod 221 198 return nil 222 199 when ::SOAP::Mapping::Object … … 267 244 end 268 245 singleton_class = class << obj; self; end 269 if ! singleton_methods_true(obj).empty? or246 if !obj.singleton_methods(true).empty? or 270 247 !singleton_class.instance_variables.empty? 271 248 raise TypeError.new("singleton can't be dumped #{obj}") … … 281 258 setiv2soap(param, obj, map) 282 259 param 283 end284 285 if RUBY_VERSION >= '1.8.0'286 def singleton_methods_true(obj)287 obj.singleton_methods(true)288 end289 else290 def singleton_methods_true(obj)291 obj.singleton_methods292 end293 260 end 294 261 trunk/lib/soap/rpc/driver.rb
r1974 r2000 8 8 9 9 require 'soap/soap' 10 require 'soap/attrproxy' 10 11 require 'soap/mapping' 11 12 require 'soap/rpc/rpc' … … 22 23 23 24 class Driver 24 class << self 25 if RUBY_VERSION >= "1.7.0" 26 def __attr_proxy(symbol, assignable = false) 27 name = symbol.to_s 28 define_method(name) { 29 @proxy.__send__(name) 30 } 31 if assignable 32 aname = name + '=' 33 define_method(aname) { |rhs| 34 @proxy.__send__(aname, rhs) 35 } 36 end 37 end 38 else 39 def __attr_proxy(symbol, assignable = false) 40 name = symbol.to_s 41 module_eval <<-EOS 42 def #{name} 43 @proxy.#{name} 44 end 45 EOS 46 if assignable 47 module_eval <<-EOS 48 def #{name}=(value) 49 @proxy.#{name} = value 50 end 51 EOS 52 end 53 end 54 end 55 end 56 57 __attr_proxy :endpoint_url, true 58 __attr_proxy :mapping_registry, true 59 __attr_proxy :literal_mapping_registry, true 60 __attr_proxy :allow_unqualified_element, true 61 __attr_proxy :default_encodingstyle, true 62 __attr_proxy :generate_explicit_type, true 63 __attr_proxy :use_default_namespace, true 64 __attr_proxy :return_response_as_xml, true 65 __attr_proxy :headerhandler 66 __attr_proxy :filterchain 67 __attr_proxy :streamhandler 68 __attr_proxy :test_loopback_response 69 __attr_proxy :reset_stream 25 include AttrProxy 26 27 attr_proxy :endpoint_url, true 28 attr_proxy :mapping_registry, true 29 attr_proxy :literal_mapping_registry, true 30 attr_proxy :allow_unqualified_element, true 31 attr_proxy :default_encodingstyle, true 32 attr_proxy :generate_explicit_type, true 33 attr_proxy :use_default_namespace, true 34 attr_proxy :return_response_as_xml, true 35 attr_proxy :headerhandler 36 attr_proxy :filterchain 37 attr_proxy :streamhandler 38 attr_proxy :test_loopback_response 39 attr_proxy :reset_stream 70 40 71 41 attr_reader :proxy … … 183 153 184 154 private 155 156 def attrproxy 157 @proxy 158 end 185 159 186 160 def set_wiredump_file_base(name) trunk/lib/soap/rpc/httpserver.rb
r1974 r2000 8 8 9 9 require 'logger' 10 require 'soap/attrproxy' 10 11 require 'soap/rpc/soaplet' 11 12 require 'soap/streamHandler' … … 18 19 19 20 class HTTPServer < Logger::Application 21 include AttrProxy 22 20 23 attr_reader :server 21 24 attr_accessor :default_namespace 22 25 23 class << self 24 if RUBY_VERSION >= "1.7.0" 25 def __attr_proxy(symbol, assignable = false) 26 name = symbol.to_s 27 define_method(name) { 28 @router.__send__(name) 29 } 30 if assignable 31 aname = name + '=' 32 define_method(aname) { |rhs| 33 @router.__send__(aname, rhs) 34 } 35 end 36 end 37 else 38 def __attr_proxy(symbol, assignable = false) 39 name = symbol.to_s 40 module_eval <<-EOS 41 def #{name} 42 @router.#{name} 43 end 44 EOS 45 if assignable 46 module_eval <<-EOS 47 def #{name}=(value) 48 @router.#{name} = value 49 end 50 EOS 51 end 52 end 53 end 54 end 55 56 __attr_proxy :mapping_registry, true 57 __attr_proxy :literal_mapping_registry, true 58 __attr_proxy :generate_explicit_type, true 59 __attr_proxy :use_default_namespace, true 26 attr_proxy :mapping_registry, true 27 attr_proxy :literal_mapping_registry, true 28 attr_proxy :generate_explicit_type, true 29 attr_proxy :use_default_namespace, true 60 30 61 31 def initialize(config) … … 75 45 @server.mount('/wsdl', WEBrick::HTTPServlet::FileHandler, wsdldir) 76 46 end 77 # for backward compatibility78 47 @server.mount('/', @soaplet) 79 48 end … … 160 129 private 161 130 131 def attrproxy 132 @router 133 end 134 162 135 def run 163 136 @server.start trunk/lib/soap/rpc/proxy.rb
r1983 r2000 177 177 conn_data.send_contenttype = mime.headers['content-type'].str 178 178 end 179 conn_data = @streamhandler.send(@endpoint_url, conn_data,180 reqopt[:soapaction])179 conn_data.soapaction = reqopt[:soapaction] 180 conn_data = @streamhandler.send(@endpoint_url, conn_data) 181 181 if conn_data.receive_string.empty? 182 182 return nil trunk/lib/soap/rpc/soaplet.rb
r1829 r2000 49 49 @authenticator = nil 50 50 @config = {} 51 end52 53 # for backward compatibility54 def app_scope_router55 @router56 end57 58 # for backward compatibility59 def add_servant(obj, namespace)60 @router.add_rpc_servant(obj, namespace)61 51 end 62 52 trunk/lib/soap/streamHandler.rb
r1885 r2000 168 168 end 169 169 170 def send(url, conn_data, soapaction = nil, charset = @charset) 171 conn_data.soapaction ||= soapaction # for backward conpatibility 170 def send(url, conn_data, charset = @charset) 172 171 conn_data = send_post(url, conn_data, charset) 173 172 @client.save_cookie_store if @cookie_store trunk/lib/soap/wsdlDriver.rb
r1975 r2000 11 11 require 'xsd/qname' 12 12 require 'xsd/codegen/gensupport' 13 require 'soap/attrproxy' 13 14 require 'soap/mapping/wsdlencodedregistry' 14 15 require 'soap/mapping/wsdlliteralregistry' … … 55 56 WSDLDriver.new(@wsdl, port, nil) 56 57 end 57 58 # Backward compatibility.59 alias createDriver create_driver60 58 61 59 def dump_method_signatures(servicename = nil, portname = nil) … … 181 179 182 180 class WSDLDriver 183 class << self 184 if RUBY_VERSION >= "1.7.0" 185 def __attr_proxy(symbol, assignable = false) 186 name = symbol.to_s 187 define_method(name) { 188 @servant.__send__(name) 189 } 190 if assignable 191 aname = name + '=' 192 define_method(aname) { |rhs| 193 @servant.__send__(aname, rhs) 194 } 195 end 196 end 197 else 198 def __attr_proxy(symbol, assignable = false) 199 name = symbol.to_s 200 module_eval <<-EOS 201 def #{name} 202 @servant.#{name} 203 end 204 EOS 205 if assignable 206 module_eval <<-EOS 207 def #{name}=(value) 208 @servant.#{name} = value 209 end 210 EOS 211 end 212 end 213 end 214 end 215 216 __attr_proxy :options 217 __attr_proxy :headerhandler 218 __attr_proxy :streamhandler 219 __attr_proxy :test_loopback_response 220 __attr_proxy :endpoint_url, true 221 __attr_proxy :mapping_registry, true # for RPC unmarshal 222 __attr_proxy :wsdl_mapping_registry, true # for RPC marshal 223 __attr_proxy :default_encodingstyle, true 224 __attr_proxy :generate_explicit_type, true 225 __attr_proxy :allow_unqualified_element, true 181 include AttrProxy 182 183 attr_proxy :options 184 attr_proxy :headerhandler 185 attr_proxy :streamhandler 186 attr_proxy :test_loopback_response 187 attr_proxy :endpoint_url, true 188 attr_proxy :mapping_registry, true # for RPC unmarshal 189 attr_proxy :wsdl_mapping_registry, true # for RPC marshal 190 attr_proxy :default_encodingstyle, true 191 attr_proxy :generate_explicit_type, true 192 attr_proxy :allow_unqualified_element, true 226 193 227 194 def httpproxy … … 269 236 end 270 237 271 # Backward compatibility. 272 alias generateEncodeType= generate_explicit_type= 238 private 239 240 def attrproxy 241 @servant 242 end 273 243 274 244 class Servant__ trunk/lib/wsdl/xmlSchema/attribute.rb
r1824 r2000 8 8 9 9 require 'wsdl/info' 10 require 'wsdl/xmlSchema/ref' 10 11 11 12 … … 15 16 16 17 class Attribute < Info 17 class << self 18 if RUBY_VERSION > "1.7.0" 19 def attr_reader_ref(symbol) 20 name = symbol.to_s 21 define_method(name) { 22 instance_variable_get("@#{name}") || 23 (refelement ? refelement.__send__(name) : nil) 24 } 25 end 26 else 27 def attr_reader_ref(symbol) 28 name = symbol.to_s 29 module_eval <<-EOS 30 def #{name} 31 @#{name} || (refelement ? refelement.#{name} : nil) 32 end 33 EOS 34 end 35 end 36 end 18 include Ref 37 19 38 20 attr_writer :use … … 52 34 attr_reader_ref :fixed 53 35 54 attr_accessor :ref55 36 attr_accessor :arytype 56 37 … … 67 48 @refelement = nil 68 49 @arytype = nil 69 end70 71 def refelement72 @refelement ||= root.collect_attributes[@ref]73 50 end 74 51 … … 117 94 parent.is_a?(Schema) 118 95 end 96 97 def refelement 98 @refelement ||= root.collect_attributes[@ref] 99 end 119 100 end 120 101 trunk/lib/wsdl/xmlSchema/attributeGroup.rb
r1917 r2000 8 8 9 9 require 'wsdl/info' 10 require 'wsdl/xmlSchema/ref' 10 11 11 12 … … 15 16 16 17 class AttributeGroup < Info 17 class << self 18 if RUBY_VERSION > "1.7.0" 19 def attr_reader_ref(symbol) 20 name = symbol.to_s 21 define_method(name) { 22 instance_variable_get("@#{name}") || 23 (refelement ? refelement.__send__(name) : nil) 24 } 25 end 26 else 27 def attr_reader_ref(symbol) 28 name = symbol.to_s 29 module_eval <<-EOS 30 def #{name} 31 @#{name} || (refelement ? refelement.#{name} : nil) 32 end 33 EOS 34 end 35 end 36 end 18 include Ref 37 19 38 20 attr_writer :name # required … … 42 24 attr_reader_ref :attributes 43 25 44 attr_accessor :ref45 46 26 def initialize 47 27 super … … 50 30 @ref = nil 51 31 @refelement = nil 52 end53 54 def refelement55 @refelement ||= root.collect_attributegroups[@ref]56 32 end 57 33 … … 80 56 end 81 57 end 58 59 private 60 61 def refelement 62 @refelement ||= root.collect_attributegroups[@ref] 63 end 82 64 end 83 65 trunk/lib/wsdl/xmlSchema/element.rb
r1906 r2000 8 8 9 9 require 'wsdl/info' 10 require 'wsdl/xmlSchema/ref' 10 11 11 12 … … 15 16 16 17 class Element < Info 17 class << self 18 if RUBY_VERSION > "1.7.0" 19 def attr_reader_ref(symbol) 20 name = symbol.to_s 21 define_method(name) { 22 instance_variable_get("@#{name}") || 23 (refelement ? refelement.__send__(name) : nil) 24 } 25 end 26 else 27 def attr_reader_ref(symbol) 28 name = symbol.to_s 29 module_eval <<-EOS 30 def #{name} 31 @#{name} || (refelement ? refelement.#{name} : nil) 32 end 33 EOS 34 end 35 end 36 end 18 include Ref 37 19 38 20 attr_writer :name # required … … 56 38 attr_reader_ref :abstract 57 39 58 attr_accessor :ref59 60 40 def initialize(name = nil, type = nil) 61 41 super() … … 76 56 def empty? 77 57 !(local_simpletype || local_complextype || constraint || type) 78 end79 80 def refelement81 @refelement ||= (@ref ? root.collect_elements[@ref] : nil)82 58 end 83 59 … … 167 143 parent.is_a?(Schema) 168 144 end 145 146 def refelement 147 @refelement ||= (@ref ? root.collect_elements[@ref] : nil) 148 end 169 149 end 170 150 trunk/lib/wsdl/xmlSchema/group.rb
r1917 r2000 8 8 9 9 require 'wsdl/info' 10 require 'wsdl/xmlSchema/ref' 10 11 11 12 … … 15 16 16 17 class Group < Info 17 class << self 18 if RUBY_VERSION > "1.7.0" 19 def attr_reader_ref(symbol) 20 name = symbol.to_s 21 define_method(name) { 22 instance_variable_get("@#{name}") || 23 (refelement ? refelement.__send__(name) : nil) 24 } 25 end 26 else 27 def attr_reader_ref(symbol) 28 name = symbol.to_s 29 module_eval <<-EOS 30 def #{name} 31 @#{name} || (refelement ? refelement.#{name} : nil) 32 end 33 EOS 34 end 35 end 36 end 18 include Ref 37 19 38 20 attr_writer :name # required … … 44 26 attr_reader_ref :content 45 27 46 attr_accessor :ref47 48 28 def initialize(name = nil) 49 29 super() … … 54 34 @ref = nil 55 35 @refelement = nil 56 end57 58 def refelement59 @refelement ||= (@ref ? root.collect_modelgroups[@ref] : nil)60 36 end 61 37 … … 112 88 end 113 89 end 90 91 private 92 93 def refelement 94 @refelement ||= (@ref ? root.collect_modelgroups[@ref] : nil) 95 end 114 96 end 115 97