summaryrefslogtreecommitdiff
path: root/lib/soap/encodingstyle
diff options
context:
space:
mode:
authornahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-11-25 07:31:33 +0000
committernahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-11-25 07:31:33 +0000
commit6a09e1d9664f86b7deb576fb0dfe57e10503bb85 (patch)
tree49dc2abcb7640c805848e543d4e5d110cbde5ad6 /lib/soap/encodingstyle
parentec373c3e1c332f814225c3d49ded8217545470e2 (diff)
* lib/soap/**/*.rb, lib/wsdl/**/*.rb, lib/xsd/**/*.rb: changed license; GPL2 -> Ruby's.
* lib/soap/rpc/driver.rb, lib/soap/wsdlDriver.rb, lib/soap/streamHandler.rb: add interface to streamhandler. * lib/soap/marshal.rb: raise error if parse fails. * lib/soap/netHttpClient.rb: add https support. Patched by Oliver M. Bolzer. * lib/soap/netHttpClient.rb: dump HTTP response message body by itself. * lib/soap/rpc/driver.rb, lib/soap/rpc/proxy.rb, lib/soap/wsdlDriver.rb: add driver#mandatorycharset interface to foce using charset for parsing response from buggy server. * lib/soap/encodingstyle/soapHandler.rb: support Apache Axis's half typed multi-ref array. * lib/soap/mapping/factory.rb, lib/soap/mapping/registry.rb: map SOAPStruct which has multi-accessors which name are the same, to an array. * lib/soap/rpc/element.rb: fixed illegal parameter order. * lib/soap/rpc/element.rb: element name of response message could have the name other than 'return'. * lib/wsdl/operation.rb, lib/wsdl/operationBinding.rb, lib/wsdl/soap/classDefCreator.rb, lib/wsdl/soap/methodDefCreator.rb, lib/wsdl/soap/methodDefCreatorSupport.rb: WSDL/1.1 allows plural fault definition in a operation. [ruby-talk:84948] * test/wsdl/multiplefault.wsdl, test/wsdl/test_multiplefault.rb: add test for above fix. * lib/wsdl/soap/complexType.rb: support WSDL array definition with maxOccures="unbound". * lib/xsd/charset.rb: use cp932 under emx. Patched by Siena. / SHINAGAWA, Norihide in [ruby-dev:21972] * lib/xsd/xmlparser/parser.rb: set @charset nil by default. Nil means 'follow encoding declaration in XML'. * sample/soap/digraph.rb, sample/wsdl/amazon/wsdlDriver.rb, sample/wsdl/googleSearch/sampleClient.rb, sample/wsdl/googleSearch/wsdlDriver.rb, test/wsdl/test_emptycomplextype.rb, test/wsdl/marshal/test_wsdlmarshal.rb, test/xsd/test_xmlschemaparser.rb: use File.open(...) { |f| f.read } instead of File.open(...).read. [ruby-dev:21964] * test/wsdl/emptycomplextype.wsdl, test/wsdl/test_emptycomplextype.rb: simplify the test case. * test/wsdl/axisArray/*: add tests for axis's array encoding. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5022 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/soap/encodingstyle')
-rw-r--r--lib/soap/encodingstyle/aspDotNetHandler.rb23
-rw-r--r--lib/soap/encodingstyle/handler.rb23
-rw-r--r--lib/soap/encodingstyle/literalHandler.rb23
-rw-r--r--lib/soap/encodingstyle/soapHandler.rb111
4 files changed, 75 insertions, 105 deletions
diff --git a/lib/soap/encodingstyle/aspDotNetHandler.rb b/lib/soap/encodingstyle/aspDotNetHandler.rb
index b00084e3a9..e976433a7b 100644
--- a/lib/soap/encodingstyle/aspDotNetHandler.rb
+++ b/lib/soap/encodingstyle/aspDotNetHandler.rb
@@ -1,20 +1,9 @@
-=begin
-SOAP4R - ASP.NET EncodingStyle handler library
-Copyright (C) 2001, 2003 NAKAMURA, Hiroshi.
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-PRATICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 675 Mass
-Ave, Cambridge, MA 02139, USA.
-=end
+# SOAP4R - ASP.NET EncodingStyle handler library
+# Copyright (C) 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
+
+# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
+# redistribute it and/or modify it under the same terms of Ruby's license;
+# either the dual license version in 2003, or any later version.
require 'soap/encodingstyle/handler'
diff --git a/lib/soap/encodingstyle/handler.rb b/lib/soap/encodingstyle/handler.rb
index 2cbbd893d8..8ea23ef146 100644
--- a/lib/soap/encodingstyle/handler.rb
+++ b/lib/soap/encodingstyle/handler.rb
@@ -1,20 +1,9 @@
-=begin
-SOAP4R - EncodingStyle handler library
-Copyright (C) 2001, 2003 NAKAMURA, Hiroshi.
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-PRATICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 675 Mass
-Ave, Cambridge, MA 02139, USA.
-=end
+# SOAP4R - EncodingStyle handler library
+# Copyright (C) 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
+
+# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
+# redistribute it and/or modify it under the same terms of Ruby's license;
+# either the dual license version in 2003, or any later version.
require 'soap/soap'
diff --git a/lib/soap/encodingstyle/literalHandler.rb b/lib/soap/encodingstyle/literalHandler.rb
index 5ff0e5dd66..995e1a5361 100644
--- a/lib/soap/encodingstyle/literalHandler.rb
+++ b/lib/soap/encodingstyle/literalHandler.rb
@@ -1,20 +1,9 @@
-=begin
-SOAP4R - XML Literal EncodingStyle handler library
-Copyright (C) 2001, 2003 NAKAMURA, Hiroshi.
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-PRATICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 675 Mass
-Ave, Cambridge, MA 02139, USA.
-=end
+# SOAP4R - XML Literal EncodingStyle handler library
+# Copyright (C) 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
+
+# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
+# redistribute it and/or modify it under the same terms of Ruby's license;
+# either the dual license version in 2003, or any later version.
require 'soap/encodingstyle/handler'
diff --git a/lib/soap/encodingstyle/soapHandler.rb b/lib/soap/encodingstyle/soapHandler.rb
index 0c68810cce..51780f5520 100644
--- a/lib/soap/encodingstyle/soapHandler.rb
+++ b/lib/soap/encodingstyle/soapHandler.rb
@@ -1,20 +1,9 @@
-=begin
-SOAP4R - SOAP EncodingStyle handler library
-Copyright (C) 2001, 2003 NAKAMURA, Hiroshi.
+# SOAP4R - SOAP EncodingStyle handler library
+# Copyright (C) 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-PRATICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 675 Mass
-Ave, Cambridge, MA 02139, USA.
-=end
+# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
+# redistribute it and/or modify it under the same terms of Ruby's license;
+# either the dual license version in 2003, or any later version.
require 'soap/encodingstyle/handler'
@@ -172,10 +161,9 @@ class SOAPHandler < Handler
elsif href
o = SOAPReference.decode(elename, href)
@refpool << o
- elsif @decode_typemap &&
- (parent.node.class != SOAPBody || @is_first_top_ele)
- # multi-ref element should be parsed by decode_tag_by_type.
- @is_first_top_ele = false
+ elsif @decode_typemap
+ # to parse multi-ref element with decode_tag_by_type.
+ # && (parent.node.class != SOAPBody || @is_first_top_ele)
o = decode_tag_by_wsdl(ns, elename, type, parent.node, arytype, extraattr)
else
o = decode_tag_by_type(ns, elename, type, parent.node, arytype, extraattr)
@@ -344,15 +332,30 @@ private
end
def decode_tag_by_wsdl(ns, elename, typestr, parent, arytypestr, extraattr)
+ o = nil
if parent.class == SOAPBody
- # Unqualified name is allowed here.
- type = @decode_typemap[elename] || @decode_typemap.find_name(elename.name)
- unless type
- raise EncodingStyleError.new("Unknown operation '#{ elename }'.")
+ if @is_first_top_ele
+ # Unqualified name is allowed here.
+ @is_first_top_ele = false
+ type = @decode_typemap[elename] ||
+ @decode_typemap.find_name(elename.name)
+ unless type
+ raise EncodingStyleError.new("Unknown operation '#{ elename }'.")
+ end
+ o = SOAPStruct.new(elename)
+ o.definedtype = type
+ return o
+ elsif !typestr
+ # typeless multi-ref element.
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr,
+ extraattr)
+ else
+ # typed multi-ref element.
+ typename = ns.parse(typestr)
+ typedef = @decode_typemap[typename]
+ return decode_defined_compoundtype(elename, typename, typedef,
+ arytypestr)
end
- o = SOAPStruct.new(elename)
- o.definedtype = type
- return o
end
if parent.type == XSD::AnyTypeName
@@ -366,41 +369,41 @@ private
unless parenttype
raise EncodingStyleError.new("Unknown type '#{ parent.type }'.")
end
- typename = parenttype.child_type(elename)
- if typename
- if (klass = TypeMap[typename])
- return klass.decode(elename)
- elsif typename == XSD::AnyTypeName
- return decode_tag_by_type(ns, elename, typestr, parent, arytypestr,
- extraattr)
- end
+
+ definedtype_name = parenttype.child_type(elename)
+ if definedtype_name and (klass = TypeMap[definedtype_name])
+ return klass.decode(elename)
+ elsif definedtype_name == XSD::AnyTypeName
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr,
+ extraattr)
end
- type = if typename
- @decode_typemap[typename]
- else
- parenttype.child_defined_complextype(elename)
- end
- unless type
+ typedef = definedtype_name ? @decode_typemap[definedtype_name] :
+ parenttype.child_defined_complextype(elename)
+ decode_defined_compoundtype(elename, definedtype_name, typedef, arytypestr)
+ end
+
+ def decode_defined_compoundtype(elename, typename, typedef, arytypestr)
+ unless typedef
raise EncodingStyleError.new("Unknown type '#{ typename }'.")
end
-
- case type.compoundtype
+ case typedef.compoundtype
when :TYPE_STRUCT
o = SOAPStruct.decode(elename, typename)
- o.definedtype = type
+ o.definedtype = typedef
return o
when :TYPE_ARRAY
- expected_arytype = type.find_arytype
- actual_arytype = if arytypestr
- XSD::QName.new(expected_arytype.namespace,
- content_typename(expected_arytype.name) <<
- content_ranksize(arytypestr))
- else
- expected_arytype
- end
- o = SOAPArray.decode(elename, typename, actual_arytype)
- o.definedtype = type
+ expected_arytype = typedef.find_arytype
+ if arytypestr
+ actual_arytype = XSD::QName.new(expected_arytype.namespace,
+ content_typename(expected_arytype.name) <<
+ content_ranksize(arytypestr))
+ o = SOAPArray.decode(elename, typename, actual_arytype)
+ else
+ o = SOAPArray.new(typename, 1, expected_arytype)
+ o.elename = elename
+ end
+ o.definedtype = typedef
return o
end
return nil