0. In this document...
This is Release Notes of SOAP4R.
Target SOAP4R version: SOAP4R/1.3.7
1. Changes
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.
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
- 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
- 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:
- SOAP4R is a Ruby library program. You have to install Ruby itself. Ruby/1.6 series are required. It does not works on 1.4 series because of class variable.
- SOAP4R delegates XML related processing to NQXML module. You have to install NQXML module.
- To play with SOAP-RPC client sample, you have to install Apache SOAP.
6. Restrictions
The following features of the SOAP 1.1 (W3C Note) spec are NOT currently supported:
- SOAP Envelope
- SOAP actor attribute
- SOAP mustUnderstand attribute
- SOAP Fault Codes
- SOAP Encoding
- encoding/decoding using XML Schema; Only xsi:type in SOAP Encoding is checked
- Marshalling references to href/id (Unmarshalling is OK)
- Othres
- Transport binding except HTTP server and client
- HTTP Extension Framework (M-POST)
7. History
- 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.
- Datatypes:
- 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.
- Added SOAPXMLParser and SOAPSAXDriver for XMLParser which uses expat.
You can get the module from RAA: XMLParser module.
- Added in 1.3.4.2:
- 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.
- 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)
- 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)
- nakahiro@sarion.co.jp
- URL
- http://www.jin.gr.jp/~nahi/ (Japanese)
9. Copyright
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.