summaryrefslogtreecommitdiff
path: root/lib/soap
diff options
context:
space:
mode:
authornahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-01-30 16:00:33 +0000
committernahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-01-30 16:00:33 +0000
commit7200644b54bce12747bc383cfd8e68eb77b1aa35 (patch)
treece64f11d41c0ea9b2eae6fd2133de58ba4f71185 /lib/soap
parent2a2fa6fd8b08871989d4d844e600331f95824e2f (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.rb8
-rw-r--r--lib/soap/mapping/rubytypeFactory.rb6
-rw-r--r--lib/soap/wsdlDriver.rb24
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