diff options
author | nahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-01-30 16:00:33 +0000 |
---|---|---|
committer | nahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-01-30 16:00:33 +0000 |
commit | 7200644b54bce12747bc383cfd8e68eb77b1aa35 (patch) | |
tree | ce64f11d41c0ea9b2eae6fd2133de58ba4f71185 /lib/soap | |
parent | 2a2fa6fd8b08871989d4d844e600331f95824e2f (diff) |
* lib/soap/wsdlDriver.rb, lib/wsdl/soap/operation.rb: add support of
"parts" attribute of soap:body element in WSDL.
* lib/wsdl/xmlSchema/schema.rb: friendly warning message for
simpleType element which is not supported for now.
* lib/soap/mapping/factory.rb: deleted unused methods.
* lib/soap/mapping/rubytypeFactory.rb: do no ignore case while xsi:type
string <-> Ruby class name matching.
* test/wsdl/soap/{soapbodyparts.wsdl,test_soapbodyparts.wsdl}: new
files.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@5588 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/soap')
-rw-r--r-- | lib/soap/mapping/factory.rb | 8 | ||||
-rw-r--r-- | lib/soap/mapping/rubytypeFactory.rb | 6 | ||||
-rw-r--r-- | lib/soap/wsdlDriver.rb | 24 |
3 files changed, 19 insertions, 19 deletions
diff --git a/lib/soap/mapping/factory.rb b/lib/soap/mapping/factory.rb index f181773687..bf68701229 100644 --- a/lib/soap/mapping/factory.rb +++ b/lib/soap/mapping/factory.rb @@ -87,14 +87,6 @@ class Factory Thread.current[:SOAPMarshalDataKey][node.id] = obj end - def name2typename(name) - capitalize(name) - end - - def capitalize(target) - target.gsub(/^([a-z])/) { $1.tr!('[a-z]', '[A-Z]') } - end - private def setiv2ary(obj, node, map) diff --git a/lib/soap/mapping/rubytypeFactory.rb b/lib/soap/mapping/rubytypeFactory.rb index 0b4af8b8e4..a447715add 100644 --- a/lib/soap/mapping/rubytypeFactory.rb +++ b/lib/soap/mapping/rubytypeFactory.rb @@ -344,9 +344,6 @@ private typestr = Mapping.elename2name(node['type'].data) klass = Mapping.class_from_name(typestr) if klass.nil? - klass = Mapping.class_from_name(name2typename(typestr)) - end - if klass.nil? return false end unless klass <= ::Struct @@ -401,9 +398,6 @@ private typestr = Mapping.elename2name(node.type.name) klass = Mapping.class_from_name(typestr) if klass.nil? - klass = Mapping.class_from_name(name2typename(typestr)) - end - if klass.nil? return nil end if klass <= ::Exception diff --git a/lib/soap/wsdlDriver.rb b/lib/soap/wsdlDriver.rb index 0961751474..d1a1a6cf29 100644 --- a/lib/soap/wsdlDriver.rb +++ b/lib/soap/wsdlDriver.rb @@ -205,11 +205,7 @@ class WSDLDriver log(DEBUG) { "call: parameters '#{ params.inspect }'." } op_info = @operations[method_name] - parts_names = op_info.bodyparts.collect { |part| part.name } - obj = create_method_obj(parts_names, params) - method = Mapping.obj2soap(obj, @wsdl_mapping_registry, op_info.optype_name) - method.elename = op_info.op_name - method.type = XSD::QName.new # Request should not be typed. + method = create_method_struct(op_info, params) req_header = nil req_body = SOAPBody.new(method) @@ -261,6 +257,24 @@ class WSDLDriver private + def create_method_struct(op_info, params) + parts_names = op_info.bodyparts.collect { |part| part.name } + obj = create_method_obj(parts_names, params) + method = Mapping.obj2soap(obj, @wsdl_mapping_registry, op_info.optype_name) + if method.members.size != parts_names.size + new_method = SOAPStruct.new + method.each do |key, value| + if parts_names.include?(key) + new_method.add(key, value) + end + end + method = new_method + end + method.elename = op_info.op_name + method.type = XSD::QName.new # Request should not be typed. + method + end + def create_method_obj(names, params) o = Object.new for idx in 0 ... params.length |