Release Notes - SOAP4R

Last modified: December 28, 2001
Created: July 17, 2000


0. In this document...

This is Release Notes of SOAP4R.

Target SOAP4R version: SOAP4R/1.4.2

  1. Changes
  2. Install
  3. Uninstall
  4. What is SOAP4R?
  5. Dependencies
  6. Restrictions
  7. History
  8. Author
  9. Copyright

1. Changes

Many changes around Ruby language mapping for SOAP. I replaced DRb's marshalling format with SOAP marshalling and it passed about all unit test packed in DRb package. Only test failed was regards to packet size. You might be able to use SOAP::Marshal.(un|)marshal for serializing objects instead of Marshal.(load|dump).

2. Install

Simply, get the archived file and extract it. Then, try;

"ruby install.rb"

Necessary files will be installed to suitable directory.

Files in lib/soap directory are SOAP4R library program itself. Followings are redistributed files in redist/.

date3.rb
by Funaba-san (http://www.kt.rim.or.jp/~tadf/ruby-en.html)
parsedate3.rb
by Funaba-san (http://www.kt.rim.or.jp/~tadf/ruby-en.html)
GServer
by John W. Small: http://fairfax2.laser.net/~jsmall/rubycorner.html
httpserver.rb
by Michael Neumann: httpserver.rb in [RAA:XML-RPC]
application.rb
by NaHi: http://www.jin.gr.jp/~nahi/Ruby/Application/application.rb
http-access2
by NaHi: [RAA:http-access2]

Files in archive:

lib/soap/
SOAP4R library program.
test/
Clients/Server for `SOAPBuilders Interoperability Lab.' Because of no documents or "How-to" things there, test/interopR2/server.cgi is a must RPC Server side sample to check. test/interopR2/client*.rb is a must RPC Client side sample to check. test/interopR2/base.rb includes common definitions for client/server side.
sample/
Sample program using SOAP4R.
sample/apacheClient.rb
SOAP-RPC client sample. It connects with demonstration server programs stockquote and addressbook in Apache-SOAP. You have to install Apache-SOAP and deploy demostration programs.
To execute;
./apacheClient.rb http://localhsot:2020/xml-soap/rpcrouter/rpcrouter.jsp
sample/RAA/*
SOAP-RPC client samples.
  • soap4r.rb, soap4rApp.rb: Ruby program using SOAP4R
  • xmlrpc4r.rb: Ruby program using xmlrpc4r
  • pocketSOAP.js: JScript program using pocketSOAP
  • SOAP::Lite.pl: Perl program using SOAP::Lite for Perl
There programs connect with testing RAA server on www.ruby-lang.org. Since the server is under testing phase so stable operation is not expected.
redist/
Redistributed programs which SOAP4R is using. I would appriciate to authors of these programs.
redist/archive/
Archives. Follow the term of each archive to use these programs.

3. Uninstall

Delete created files at installation.

ruby -rrbconfig -e 'include Config; puts CONFIG["sitedir"] + "/" + CONFIG["MAJOR"] + "." + CONFIG["MINOR"]'

should dump the installation root directory. Here, check "soap" directory and filename of files in "redist" directory.

4. What is SOAP4R?

'SOAP4R' is a Ruby library program to handle Simple Object Access Protocol (SOAP) 1.1 (W3C Note).

Comments, information such as interoperability between SOAP4R and another implementation are welcomed. Feel free sending mail to nakahiro@sarion.co.jp.

5. Dependencies

SOAP4R depends on below programs:

6. Restrictions

The following features of the SOAP 1.1 (W3C Note) spec are NOT currently supported:

7. History

1.4.2 - December 28, 2001
Many changes around Ruby language mapping for SOAP. I replaced DRb's marshalling format with SOAP marshalling and it passed about all unit test packed in DRb package. Only test failed was regards to packet size. You might be able to use SOAP::Marshal.(un|)marshal for serializing objects instead of Marshal.(load|dump).
  • Illegal decoding of a position-less element after position-ed element. Fixed.
  • Add Rubytype encoding/decoding support: Regexp, Class, Module and Symbol.
  • Added an option of MappingRegistry to raise an exception when unknown Struct. The option is set 'false' by default so that same behaviour as before.
1.4.1 - December 7, 2001
SOAP4R/1.4 contained many bugs (as usual...) 1.4.1 is a maintenance release. Some bugs are fixed. Thanks to Michael Neumann.
  • instance_eval in SOAPStruct#add for adding accessor illegaly overrode important methods for SOAP4R such as name, name= and so on. Removed this instance_eval and rewrote other codes which did depend the code. Thanks to MNeumann for reporting it and giving a suggestion to fix it.
  • Fixed charset handling. Illegal charset was set when automatic XML processor detecting.
  • Removed unused code(self.decode) in element.rb.
  • Illegal constant access when SOAP format error. Fixed.
  • LiteralEncodingNamespace moved to SOAP module.
1.4 - December 5, 2001
  • Datatypes:
    • XSDFloat: Bug in rounding double float to single float. Fixed.
    • SOAPElement: Added for literal encoding.
    • Removed SOAP encoding functions from baseData. EncondingStyleHandler should decide how to encode SOAP data model. (ie. ASP.NET seems to have its own encoding style.)
    • SOAPHeaderItem: Changed interface for easy use.
  • SOAP Encoding:
    • Encoding by itself, not using NQXML's tree object model.
    • At last, supported multi-ref encoding!
    • marshal.rb: Marshalling with Envelope and Body. To marshal multi-ref'd object, Body is needed. CAUTION: Not compatible between former implementation.
    • Add EncodingStyleHandlerLiteral and set it to default.
    • Renamed encoding.rb to encodingStyleHandler.rb.
    • Added ASP.NET encoding handler. ASP.NET seems to use literal encoding (by default) but it is easier with this encodingStyleHandler to access the service which is built with ASP.NET.
    • Changed element name escape.
      • :: <=> \.\.
      • [^a-zA-Z0-9_-] <=> \.[0-F][0-F]
      Limitation: Using SOAP4R's RPC function, you cannot use the name which contains '.' for method name, class/struct name, and accessor name. In Ruby world, it should not be a problem I believe.
  • RPC related functions:
    • Driver: Added 'invoke' method for messaging.
    • Driver: Content of SOAPFault detail element is set in the exception which is thrown from SOAP Node to client application.
    • Processor: Changed Processor.(un|)marshal interface. An instance of NS for parsing/generating XML instance is prepared in parser/generator.
    • mappingRegistry.rb is devided from rpcUtils.rb.
1.3.8 - October 4, 2001
Feedback from SOAPBuilders Interoperability Lab "Round 2" and Michael Neumann. Thanks!
  • Datatypes:
    • XSDFloat: Creating float data from junk string such as "123.0junk" was converted to 0.0. It should be avoided. Fixed.
    • XSDFloat: Fixed double -> single rounding code.
  • RPC related functions:
    • Changed typename <=> NCName strategy. '::' <=> '.'
    • Added mappingRegistry argument to interfaces for SOAP object creation.
  • Others:
    • Set faultstring '(No faultstring)' to SOAP Fault when empty faultstring element.
    • server.rb: Added mappingRegistry interface.
    • marshal.rb: Create NCName from typename.
1.3.7 - August 24, 2001
Feedback from SOAPBuilders Interoperability Lab "Round 2" and Michael Neumann. Thanks!
  • Datatypes:
    • All datatypes try to keep nil correctly.
    • XSDInt/Integer/Long: to_i -> Integer() to detect format error.
    • XSDDateTime, XSDDate, XSDTime: Add trailing 'Z' to indicate UTC.
    • SOAPStruct: Accept untyped struct.
    • Map(Hash): Let <item> untyped.
    • Apache allows only 'item' in Map type.
  • Stream handler:
    • Removed MPOST support.
    • ECONNRESET was not caught. Fixed.
    • Added timeout support.
  • Others:
    • Changed using URI library: URb -> URI; following its name change.
    • Added NQXML/1.1.0 support. A XMLDecl now recognized as a XMLDecl, not a PI.
1.3.6 - July 27, 2001
Many feedbacks from Michael Neumann. Thanks!
  • hexBinary type: Added.
  • nil type: Should not be xsd:nil but xsi:nil.
  • Added StandaloneServer implementation. Thanks to Michael Neumann!
  • Illegal parsing of XMLDecl. Fixed.
  • RPC's 'inout' param was not supported. Fixed. Thanks to Michael Neumann!
  • URb::Generic#path returns '' when abs_path is empty (such as http://foo). Added checking code.
  • Use http-access2 instead of original HTTP implementation. http-access2 supports HTTP/1.1's persistent connection.
1.3.5 - July 14, 2001
Many feedbacks from Michael Neumann. I much appreciate valuable comments to him. Thanks!
  • Changed using URI library: uri -> URb.
  • Types changed:
    • All: Triming data except XSDString before parsing it.
    • String: Regexp for XML Char check did not work under $KCODE = 'UTF8' condition. Fixed.
    • Nil: 2001xsd:nil must not accept a value '1'. 1999xsd:null must not accept a value 'true' because these are not a boolean but only a flag for nil. Fixed.
  • Supported XML parser:
    • Added automatic CES conversion support for NQXMLParser. (Depends on uconv module). Set $KCODE for regexps used in NQXML parser.
    • Moved SOAPNQXML*Parser to nqxmlparser.rb.
  • RPC related functions changed:
    • Added marshalling/unmarshalling Ruby's object using SOAP Encoding.
    • Parallelize of signatures of 'addMethod': proxy.rb <-> rpcRouter.rb, driver.rb <-> cgistub.rb.
    • Void return if 'retval' is not defined.
    • Added SOAP's Long type to default mapping table.
1.3.4.2 - July 11, 2001
SOAP4R/1.3.4 was once packed in July 10, 2001. But, thanks to MNeumann and knu, I found I had forgotten to pack 'redist' directory with it. I added some fix from developing version and repack it as 1.3.4.2. Sorry for frequently release...

Feedback from `SOAPBuilders Interoperability Lab.' and Michael Neumann. Thanks!
  • Added in 1.3.4.2:
    • Type Decimal: Silly bug fixed. 0.0001 was converted to 0.1
    • CGIStub returns HTTP status 500 when returning SOAP Fault. Returned 200 because I don't like this spec., but SOAP/1.2 W3C WD 9 July 2001 have adopted it. Hmm...
    • RPC client(driver.rb): Exception#set_backtrace was omitted when transmitting exception by SOAP Fault.
  • Types changed:
    • Array: Incomplete sparse array support. Fixed.
    • Date: Added.
    • Time: Added.
    • DateTime: Added precision of time support.
    • String: Default data should not be nil but ''.
    • Nil: Attribute value of xsi:nil might be '1' instead of 'true'. Fixed.
  • Supported XML parser:
    • Added SOAPXMLParser and SOAPSAXDriver for XMLParser which uses expat. You can get the module from RAA: XMLParser module.
      To use XMLParser -> add "require 'soap/xmlparser'".
      To use SAX driver of XMLParser -> add "require 'soap/saxdriver'".
      To use NQXMLParser -> nothing to do.
      FYI:
      • XMLParser version is faster than others
      • SAXDriver version is extremely slow
      • NQXMLParser version is somewhat slower than XMLParser version
      • XMLParser is a Ruby extension module; To use it, you must compile and install it.
      • So far, automatic code conversion support is for XMLParser and SAXDriver. See below.
    • Added automatic CES conversion support: UTF-8 <-> EUC, SJIS. Requires Uconv module. Works with XMLParser module only now.
    • Added XMLDecl for CES.
1.3.3 - July 4, 2001
Feedback from `SOAPBuilders Interoperability Lab.' and Michael Neumann. Thanks!
  • Added SOAP4R Installer by Michael Neumann. Thanks!
  • Types changed:
    • Boolean: Accepts 1 and 0 in addition to true and falue.
    • Float: handles single-precision 32-bit floating point. Ruby's float is doule-precision.
    • Double: Added. Mapped to Ruby's Float.
    • DateTime: Added TZ support.
    • Long: Added.
    • Int: Changed class hierarchy; derived from Long now.
    • Array: Added 'position' and 'offset' support.
    • Array: Added M-D Array support.
    • Decimal: Added but it's incomplete now.
  • Illegal error message when a type not found in SOAP-ENC.
  • Tries to transmit \r safely. To be checked...
  • Parse Fault items like 'faultcode' as same as Body ie. href/id.
  • rpcUtils.rb was completely re-written.
    • Added mappingRegistry interface.
    • Changed soap2obj and obj2soap's interface.
    • Bignum might be int or integer. It's dependent on platform. Changed to check range -2147483648~+2147483647 itself.
    • ary2md: Added. Converting Array ((of Array)...) to M-D Array.
    • struct2obj: Illegal dependency on ordering of Struct#members. Fixed.
    • Ruby's Array should be converted to SOAP's Array of anyType. Fixed.
  • Dump HTTP header even when an error was raised.
1.3.2 - June 21, 2001
Feedback from `SOAPBuilders Interoperability Lab.'
  • "nil='1'" should be "nil='true'" in 2001 schema whereas "null='1'" in 1999 schema. Fixed.
  • SOAP Array was not typed with xsi:type.
  • Fixed serialization root handling algorithm.
  • Supported kind of SOAP-ENC:String style typed element.
  • Default namespace was not derived to child element. Fixed.
  • Support default encodingStyle.
  • Added support for void type (SOAP::RPCUtils::SOAPVoid).
1.3.1 - May 30, 2001
Feedback from `SOAPBuilders Interoperability Lab.'
  • Heading and trailing whtespaces in Base64 string could not be processed. Fixed.
  • Illegal typeNamespace of SOAP's base64 type. Fixed.
  • Added NaN, INF, -INF support of Float type.
  • Extracted xsd:1999 type support to XMLSchemaDatatypes1999.rb. Use it with 'require "soap/XMLSchemaDatatypes1999"'.
  • Added 'root' attribute support.
  • Return status 500 when Fault.
1.3.0 - May 20, 2001
  • Adopted NQXML module instead of XMLParser module extensively. (You can implement your SOAP parser with XMLParser module. See the last part of lib/soap/parser.rb)
    • Use NQXML's streamingParser or tokenizer instead of XMLParser's DOMParser for unmarshalling.
    • Use NQXML's document instead of XMLParser's DOM for marshalling.
  • Passed major(?) part of inteoperability test in `SOAPBuilders Interoperability Lab.' See test/interop/README.txt.
  • Changed module namespace. SOAPFoo -> SOAP::Foo.
  • Added float datatype support.
  • Changed dateTime marshalling format. No timezone was added to marshalled string because SOAP4R does not support timezone now.
1.2.0 - March 30, 2001
Checked interoperability with Apache-SOAP, pocketSOAP/0.91, SOAP::Lite for Perl, and SOAP/Perl/0.28. It seems to work good except SOAP/Perl/0.28.
  • Added href/id unmarshalling support. (href/id marshalling has not been supported yet)
  • Added SOAP's base64 type support.
  • SOAPTimeInstant -> SOAPDateTime. Following XML Schema PR.
  • SOAPStruct can have multiple accessor which have same name. Should I separate it from original SOAPStruct?
  • Unknown attribute in Header Item raised an exception. Omitted.
  • Router can handle methods which belong to different namespace.
  • Added an option to allow unqualified SOAP element.
  • Added Apache's Map type support. Ruby's Hash are mapped to it now. (Ruby's Hash marshalled by 1.1 processor in the old way can be unmarshalled, but 1.2 processor marshals it in the new way and 1.1 processor does not unmarshals it into Hash. Incompatibility between SOAP4R/1.2 and 1.1)
  • Unknown type 'unknown:SOAPStruct' was incorrectly unmarshalled into SOAPStruct. Fixed.
  • Added utility methods map! and members to SOAPArray and SOAPStruct.
  • Added methods request, response, and fault to SOAPBody.
1.1.0 - March 23, 2001
Made many changes. Since it is tested only for my limited use, please be careful to use. Any comments especially "cannot connect to XXX implementation" are welcomed. Feel free sending mail to nakahiro@sarion.co.jp.
  • Added RPC server support.
  • Divided RPC client/server implementation from core.
  • Added Date, Hash type support. (Unknown type is converted to Struct as usual)
  • Adopted Date in date3.rb by Funaba-san instead of Time as TimeInstant.
  • Many encoding/decoding bugs around SOAPArray and SOAPStruct were fixed.
1.0.2 - November 11, 2000
Since the previous package dated, refreshes some points.
  • Ruby: ruby 1.6.x
  • uri.rb: 4.22
  • sample: xml-soap/2.0
1.0.1 - July 27, 2000
Handles SOAP/1.1 arrays. 1.0.0 cannot handles SOAP/1.1 arrays... Bare in mind there still be many restrictions around SOAP arrays.
1.0.0 - July 17, 2000
It is the initial released version of SOAP4R. :-)

8. Author

Name
NAKAMURA, Hiroshi (aka NaHi or nakahiro)
E-mail
nakahiro@sarion.co.jp
URL
http://www.jin.gr.jp/~nahi/ (Japanese)

SOAP4R
Copyright © 2000, 2001 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 PARTICULAR PURPOSE. See the GNU General Public License(the file named `COPYING') 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.