Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 941

Show
Ignore:
Timestamp:
09/13/03 21:48:54 (5 years ago)
Author:
nahi
Message:

Document for 1.5.0

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RELEASE_en.html

    r762 r941  
    1919 
    2020<p class="status"> 
    21 Last modified: January 17, 2003<br /> 
     21Last modified: September 13, 2003<br /> 
    2222Created: July 17, 2000 
    2323</p> 
     
    3434 
    3535<p> 
    36 Target SOAP4R version: SOAP4R/1.4.8 
     36Target SOAP4R version: SOAP4R/1.5.0 
    3737</p> 
    3838 
     
    5454 
    5555<p> 
     56Thousands of lines are changed in this release 
     57(*.rb in current SOAP4R distribution has 30kloc or over). 
     58But the biggest change is coding convention, camelCase to non_camel_case. 
     59Though I tried to keep compatibility between 1.5.0 and 1.4.8, but there's no 
     60way to keep it at a few point.  If you'll find your code which was developed 
     61for 1.4.8 does not run under 1.5.0, feel free to ask 
     62<a href="mailto:nakahiro@sarion.co.jp">me</a> to solve the problem. 
     63</p> 
     64<ul> 
     65  <li>Dependency libraries; 
     66  <ul> 
     67    <li>Add net/http support.  Users can try sample SOAP clients without installing http-access2.  For actual usage, consider installing http-access2 for speed and thread-safe SOAP client.  CAUTION: Building SOAP CGI server needs http-access2 to be installed.</li> 
     68    <li>Soap4r standalone server requires webrick module to be installed instead of GServer.rb and httpserver.rb.</li> 
     69    <li>Supports iconv.  To use utf-8, you need to install iconv(included in ruby/1.8) or uconv.</li> 
     70    <li>Suspend NQXML XML parser support.</li> 
     71    <li>Remove REXML processor version check.  No longer needed.</li> 
     72    <li>Rewrite tests with test/unit.</li> 
     73  </ul></li> 
     74 
     75  <li>Features; 
     76  <ul> 
     77    <li>Efforts to support messaging with document/literal and ASP.NET interoperability.</li> 
     78    <li>Add document/literal messaging interface to wsdlDriver.rb.  See a very brief example in sample/soapbox/wsdlDriver.rb though I still didn't try to login to Jabber server..  Jabber folks?</li> 
     79    <li>XML pretty printing.</li> 
     80    <li>Better Ruby object mapping.  Rewrote RubytypeFactory to support more Ruby objects.  Tests in AMarshal(http://cvs.m17n.org/~akr/amarshal/) much helped it.  Thanks very much to Tanaka Akira-san.</li> 
     81    <li>SOAPMarshal accepts IO as an output device like Marshal#dump.</li> 
     82    <li>SOAPElement: constructor signature change.  Added extraattrs attribute.</li> 
     83    <li>XSDDateTimeImpl: to_time did not set usec.</li> 
     84    <li>StreamHandler: add reset method to shutdown a connection to a site.</li> 
     85  </ul></li> 
     86 
     87  <li>Others; 
     88  <ul> 
     89    <li>Simplify installer and remove uninstaller.  Saving inventory file in src dir could be the problem.</li> 
     90    <li>Class/Module architecture relocation.</li> 
     91    <li>Changing coding convention to fit with Ruby's.  Added lib/soap/compat.rb which defines compatibility definitions for 1.4.8.  lib/soap/compat.rb warns when the library is loaded.</li> 
     92    <li>Many warnings raised under 1.8, caused by illegal references like XSD::XSDInt in typeMap.rb.  Soap4r defined toplevel::XSDInt.  Define XSD* classes in XSD module and introduce it to toplevel.</li> 
     93  </ul></li> 
     94</ul> 
     95 
     96<p> 
     97Thanks to all of soap4r users for their support. 
     98</p> 
     99 
     100<h2 id="install" name="install">2. Install</h2> 
     101 
     102<p> 
     103At first, see <a href="#dependencies">Dependencies</a> section. 
     104You may need to install some extra packages. 
     105Next, get the archived file of SOAP4R and extract it, then simply try; 
     106</p> 
     107<pre class="path"> 
     108$ ruby install.rb 
     109</pre> 
     110 
     111<p> 
     112Necessary files will be installed to suitable directory. 
     113</p> 
     114 
     115<p> 
     116Files in lib/soap directory are SOAP4R library program itself. 
     117</p> 
     118 
     119<dl> 
     120<dt class="path">lib/</dt> 
     121<dd>Libraries.</dd> 
     122 
     123<dt class="path">sample/</dt> 
     124<dd>SOAP4R samples. 
     125See <a href="#samples">Samples</a> section.</dd> 
     126 
     127<dt class="path">test/</dt> 
     128<dd>Some tests. 
     129Unit test MUST cover all lines of code, but far from enough so far... 
     130<br/> 
     131test/interopR2/ directory includes Clients/Server for 
     132<a href="http://www.xmethods.net/ilab/">`SOAPBuilders Interoperability Lab.'</a> 
     133Followings are advanced examples to use complex type transmit, 
     134sending base64 encoded string, multi-dimensional array, and so on. 
     135<ul> 
     136<li>test/interopR2/server.rb is a RPC Server side implementation.</li> 
     137<li>test/interopR2/client.rb is a RPC Client side implementation.</li> 
     138<li>test/interopR2/base.rb includes common definitions for client/server.</li> 
     139</ul> 
     140</dd> 
     141</dl> 
     142 
     143<h2 id="uninstall" name="uninstall">3. Uninstall</h2> 
     144 
     145<p> 
     146Simply delete installed files. 
     147</p> 
     148 
     149<h2 id="whats" name="whats">4. What is SOAP4R?</h2> 
     150 
     151<p> 
     152'SOAP4R' is an implementation of 
     153<a href="http://www.w3.org/TR/SOAP/">Simple Object Access Protocol (SOAP) 1.1 (W3C Note)</a>. 
     154</p> 
     155 
     156<p> 
     157Comments, information such as interoperability between SOAP4R and another implementation are welcomed. 
     158Feel free sending mail to 
     159<a href="mailto:nakahiro@sarion.co.jp" class="path">nakahiro@sarion.co.jp</a>. 
     160</p> 
     161 
     162<h2 id="dependencies" name="dependencies">5. Dependencies</h2> 
     163 
     164<p> 
     165SOAP4R is written in <a href="http://www.ruby-lang.org">Ruby</a> and 
     166aims to use with Ruby application. 
     167You have to install Ruby itself. 
     168Ruby/1.6 series or later is required. 
     169It does not works on 1.4 series because it does not have class variable. 
     170</p> 
     171 
     172<p> 
     173SOAP4R depends on following Ruby modules in 
     174<a href="http://raa.ruby-lang.org">RAA</a>. 
     175You also have to install these modules to use SOAP4R. 
     176</p> 
     177 
     178<dl> 
     179<dt class="path">XML processor</dt> 
     180<dd>SOAP4R requires a XML processor package installed. 
     181For now, one of following XML processor must be installed 
     182(SOAP4R automatically detects it in runtime). 
     183FYI: xmlscan and REXML are scheduled to be included in ruby/1.8's standard 
     184distribution.  Version following each project is the version tested with soap4r. 
     185<br/> 
     186Note: ruby/1.8 includes REXML so you don't have to install extra XML parser library. 
     187<ul> 
     188<li><a href="http://raa.ruby-lang.org/list.rhtml?name=xmlscan">[RAA:xmlscan]</a> (0.2.3, 0.3.x)</li> 
     189<li><a href="http://raa.ruby-lang.org/list.rhtml?name=rexml">[RAA:REXML]</a> (2.7.1)</li> 
     190<li><a href="http://raa.ruby-lang.org/list.rhtml?name=rexml-stable">[RAA:REXML-stable]</a> (2.4.8)</li> 
     191<li><a href="http://raa.ruby-lang.org/list.rhtml?name=xmlparser">[RAA:XMLParser]</a> (0.6.5)</li> 
     192</ul></dd> 
     193 
     194<dt class="path"><a href="http://raa.ruby-lang.org/list.rhtml?name=devel-logger">[RAA:devel-logger]</a> (1.1.0)</dt> 
     195<dd>Logging utility by NaHi.</dd> 
     196 
     197<dt class="path"><a href="http://raa.ruby-lang.org/list.rhtml?name=webrick">[RAA:webrick]</a> (1.3.1) (required for soap server)</dt> 
     198<dd>TCP server toolkit by Gotoyuzo. 
     199ruby/1.8 includes WEBrick in standard distribution library.</dd> 
     200 
     201<dt class="path"><a href="http://raa.ruby-lang.org/list.rhtml?name=http-access2">[RAA:http-access2]</a> (2.0.0) (required for SOAP CGI server, recommended for SOAP client)</dt> 
     202<dd>Yet another HTTP client implementation by NaHi.</dd> 
     203 
     204<dt class="path"><a href="http://raa.ruby-lang.org/list.rhtml?name=date2">[RAA:date2]</a> (3.2) (required under ruby/1.6)</dt> 
     205<dd>Date and DateTime implementation by Todayoshi Funaba. 
     206Note: From ruby/1.8, this module is included in standard distribution. 
     207You don't have to install it if you are using ruby/1.8 or later.</dd> 
     208 
     209<dt class="path"><a href="http://raa.ruby-lang.org/list.rhtml?name=uconv">[RAA:uconv]</a> (0.4.10) (required for UTF-8 handling under ruby/1.6)</dt> 
     210<dd>by Yoshida Masato. 
     211It is requred when you use ruby/1.6 and want automatic CES conversion between 
     212SJIS &lt;-&gt; UTF8 and EUC &lt;-&gt; UTF8. 
     213Under ruby/1.8, soap4r uses iconv in standard distribution library. 
     214Note: SJIS &lt;-&gt; EUC uses NKF module which is in standard distribution. 
     215I will support Iconv for more conversion set. 
     216</dd> 
     217 
     218</dl> 
     219 
     220<h2 id="samples" name="samples">6. Samples</h2> 
     221 
     222<p> 
     223Samples are in sample/ directory of distribution. 
     224Some samples try to connect to public servers. 
     225Set environment variable HTTP_PROXY if you are in a firewall and you have 
     226http proxy to the internet like; 
     227</p> 
     228<pre class="path"> 
     229$ export HTTP_PROXY=http://myproxyserver:8080 
     230  or 
     231$ setenv HTTP_PROXY http://myproxyserver:8080 
     232</pre> 
     233 
     234<dl> 
     235<dt class="path">babelfish.rb</dt> 
     236<dd>A client for 
     237<a href="http://www.xmethods.com/ve2/ViewListing.po?serviceid=14">BabelFish</a> 
     238which namespace URI is 'urn:xmethodsBabelFish'. 
     239<pre class="path"> 
     240$ ./babelfish.rb "Text to translate" [ translation pattern like 'en_fr' ] 
     241</pre> 
     242</dd> 
     243 
     244<dt class="path">whois.rb</dt> 
     245<dd>A client for 
     246<a href="http://www.xmethods.com/ve2/ViewListing.po?serviceid=34">SQLData's WHOIS</a> 
     247which namespace URI is 'http://www.SoapClient.com/xml/SQLDataSoap.xsd'. 
     248<pre class="path"> 
     249$ ./whois.rb ruby-lang.org 
     250</pre> 
     251CAUTION: This WhoIs server does not handle non-ascii characters correctly. 
     252Querying domain which entry contains Japanese or so will hang.  Gee. 
     253</dd> 
     254 
     255<dt class="path">digraph.rb</dt> 
     256<dd>A sample of SOAP marshalling/unmarshalling. 
     257It creates a digraph that contains multi-ref-ed nodes at first 
     258and marshals this object to get serialized XML instance. 
     259Then reads and unmarshals this XML instance to recover a object 
     260which has the same links among nodes in the digraph. 
     261</dd> 
     262 
     263<dt class="path">apacheClient.rb</dt> 
     264<dd>SOAP-RPC client sample which connects with demonstration server; 
     265stockquote and addressbook in Apache-SOAP. 
     266You have to install Apache-SOAP and deploy demostration programs.<br /> 
     267To execute; 
     268<pre class="path"> 
     269$ ./apacheClient.rb http://localhsot:2020/xml-soap/rpcrouter/rpcrouter.jsp 
     270</pre> 
     271</dd> 
     272 
     273<dt class="path">GoogleSearch/</dt> 
     274<dd>A sample client to search with <a href="http://www.google.com/apis/">Google Web API</a> using WSDL. 
     275You need to get a developer's key to use it. 
     276See wsdlDriver.rb. 
     277</dd> 
     278 
     279<dt class="path">Amazon/</dt> 
     280<dd>A sample client to connect with <a href="http://associates.amazon.com/exec/panama/associates/ntg/browse/-/1067662/086-5207681-4585409">AmazonWebServices</a> using WSDL. 
     281See wsdlDriver.rb. 
     282</dd> 
     283 
     284<dt class="path">Calc/</dt> 
     285<dd>Calc service contains 2 servers and 2 clients. 
     286calc.rb is hosted by server.rb, calc2.rb is hosted by server2.rb. 
     287client.rb is for server.rb, client2.rb is for server2.rb. 
     288<dl> 
     289<dt>calc.rb</dt> 
     290<dd>Calc server definition using module and module methods. 
     291This module responds 'add', 'sub', 'multi' and 'div'.</dd> 
     292<dt>server.rb</dt> 
     293<dd>Standalone server. 
     294It requires calc.rb and serve module methods of this module. 
     295To run this server; 
     296<pre class="path"> 
     297$ ./server.rb 
     298</pre> 
     299</dd> 
     300<dt>server.cgi</dt> 
     301<dd>CGI version. 
     302To run this server, copy server.cgi and calc.rb to suitable directory 
     303of your WWW server. 
     304</dd> 
     305<dt>client.rb</dt> 
     306<dd>It connects to server.rb or server.cgi, 
     307and hit methods served by calc.rb. 
     308To run the client; 
     309<pre class="path"> 
     310$ ./client.rb 
     311</pre> 
     312Is it stacked?  Did you run the server.rb?<br/> 
     313Turn logger and wireDumpDev in its source on to see logs and wire dumps of 
     314SOAP transport.</dd> 
     315 
     316<dt>calc2.rb</dt> 
     317<dd>Calc server definition using class and instance methods. 
     318An instance of this class holds its value.  Methods 'set' and 'get' is to 
     319set/get the value. 
     320It also responds to '+', '-', '*', and '/'. 
     321</dd> 
     322<dt>server2.rb</dt> 
     323<dd>It requires calc2.rb and creates an instance of CalcService2 
     324that responds all SOAP requests. 
     325Since '+', '-' and so on of calc2.rb are not valid name as an element 
     326in XML instance, 
     327this sample register the method '+' as 'add', '-' as 'sub', and so on. 
     328</dd> 
     329<dt>server2.cgi</dt> 
     330<dd>CGI version. 
     331To run this server, copy server2.cgi and calc2.rb to suitable directory 
     332of your WWW server. 
     333</dd> 
     334<dt>client2.rb</dt> 
     335<dd>It connects to server2.rb or server2.cgi. 
     336Set a value at first and call methods like 'puts objAtServer + 2'.</dd> 
     337</dl> 
     338</dd> 
     339 
     340<dt class="path">Exchange/</dt> 
     341<dd>A sample to retrieve the currency rate from public SOAP service.</dd> 
     342<dl> 
     343<dt>iExchange.rb</dt> 
     344<dd>It includes common definitions for client and server of 
     345Exchange service. 
     346Including only a definition of namespace URI of this service.</dd> 
     347<dt>exchange.rb</dt> 
     348<dd>Definition of servant class ExchangeService which returns the currency rate 
     349after connecting to another site by SOAP to get the real rate. 
     350So that this class is the SOAP server for local client and  
     351is also a SOAP client for public server. 
     352An instance of this class is hosted by server.rb. 
     353The instance responds to only 'getRate' which receives two country code 
     354such as 'USA' and 'Japan'.</dd> 
     355<dt>server.rb</dt> 
     356<dd>It requires exchange.rb and creates an instance of ExchangeService 
     357that responds all SOAP requests. 
     358To run this server; 
     359<pre class="path"> 
     360$ ./server.rb 
     361</pre> 
     362</dd> 
     363<dt>server.cgi</dt> 
     364<dd>CGI version. 
     365To run this server, copy server.cgi and exchange.rb to suitable directory 
     366of your WWW server. 
     367</dd> 
     368<dt>client.rb</dt> 
     369<dd>It connects to server.rb. 
     370Turn logger and wireDumpDev in its source on to see logs and wire dumps of 
     371SOAP transport. 
     372To run the client; 
     373<pre class="path"> 
     374$ ./client.rb 
     375</pre> 
     376</dd> 
     377</dl> 
     378</dd> 
     379 
     380<dt class="path">SampleStruct/</dt> 
     381<dd>A sample to transmit complex structured object which has recursive 
     382object reference. 
     383<dl> 
     384<dt>iSampleStruct.rb</dt> 
     385<dd>It includes common definitions for client and server of 
     386SampleStruct service. 
     387Definition of SampleStruct class and namespace URI of this service.</dd> 
     388<dt>sampleStruct.rb</dt> 
     389<dd>Definition of servant class SampleStructService. 
     390An instance of this class is hosted by server.rb. 
     391The instance responds to only 'hi' which receives a SampleStruct and wraps 
     392it in the new instance of SampleStruct to return .</dd> 
     393<dt>server.rb</dt> 
     394<dd>It requires sampleStruct.rb and creates an instance of SampleStructService 
     395that responds all SOAP requests. 
     396To run this server; 
     397<pre class="path"> 
     398$ ./server.rb 
     399</pre> 
     400</dd> 
     401<dt>server.cgi</dt> 
     402<dd>CGI version. 
     403To run this server, copy server.cgi and sampleStruct.rb to suitable directory 
     404of your WWW server. 
     405</dd> 
     406<dt>client.rb</dt> 
     407<dd>It connects to server.rb. 
     408Turn logger and wireDumpDev in its source on to see logs and wire dumps of 
     409SOAP transport. 
     410To run the client; 
     411<pre class="path"> 
     412$ ./client.rb 
     413</pre> 
     414</dd> 
     415</dl> 
     416</dd> 
     417 
     418<dt class="path">RAA/</dt> 
     419<dd>SOAP-RPC client samples. 
     420These programs connect to RAA SOAP Interface on www.ruby-lang.org. 
     421<ul> 
     422<li>soap4r.rb: Ruby program using SOAP4R</li> 
     423<li>xmlrpc4r.rb: Ruby program using xmlrpc4r</li> 
     424<li>pocketSOAP.js: JScript program using pocketSOAP</li> 
     425<li>SOAP::Lite.pl: Perl program using SOAP::Lite for Perl</li> 
     426</ul> 
     427Since the server is (still) under testing phase so stable operation is not expected.</dd> 
     428 
     429<dt class="path">webrick/</dt> 
     430<dd>SOAP-RPC server samples which runs with WEBrick. 
     431<ul> 
     432<li>httpd.rb: HTTP server which soaplet.rb mounts to. 
     433It is powered by WEBrick so you must install 
     434<a href="http://raa.ruby-lang.org/list.rhtml?name=webrick">[RAA:WEBrick]</a> 
     435to run it.</li> 
     436<li>soaplet.rb: A bricklet to add a SOAP function to WEBrick. 
     437It hosts exchange.rb, sampleStruct.rb below, and it is mounted to httpd.rb 
     438to serve ExchangeService and SampleStructService.</li> 
     439<li>ExchangeService 
     440<dl> 
     441<dt>exchange.rb</dt> 
     442<dd>A server class definition which returns the currency rate 
     443after connecting to another site by SOAP to get the real rate. 
     444An instance of this class is instanciated in httpd.rb and this instance 
     445respond to each HTTP request.</dd> 
     446<dt>exchangeClient.rb</dt> 
     447<dd>A client to connect soaplet.rb via SOAP/HTTP to call exchange.rb.</dd> 
     448<dt>iExchange.rb</dt> 
     449<dd>Common class(type) definitions for server and client.</dd> 
     450</dl> 
     451</li> 
     452 
     453<li>SampleStructService 
     454<dl> 
     455<dt>sampleStruct.rb</dt> 
     456<dd>A server class definition which wraps a given struct 
     457and returns it. 
     458An instance of this class is instanciated in httpd.rb and this instance 
     459respond to each HTTP request.</dd> 
     460<dt>sampleStructClient.rb</dt> 
     461<dd>A client to connect soaplet.rb via SOAP/HTTP to call sampleStruct.rb</dd> 
     462<dt>iSampleStruct.rb</dt> 
     463<dd>Common class(type) definitions for server and client.</dd> 
     464</dl></li> 
     465</ul> 
     466Run the server; 
     467<pre class="path"> 
     468$ ruby httpd.rb 
     469</pre> 
     470Then, run clients; 
     471<pre class="path"> 
     472$ ruby sampleStruct.rb 
     473$ ruby exchangeClient.rb 
     474</pre> 
     475Set 'logger' and 'wireDumpDev' in clients to see log and wiredumps of SOAP. 
     476</dd> 
     477 
     478<dt class="path">ICD</dt> 
     479<dd>A client for 
     480<a href="http://www.iwebmethod.net/">Insider's Computer Dictionary Web Service</a>. 
     481This service is implemented with ASP.NET so that it's also a sample of 
     482a client which connects to ASP.NET. 
     483CAUTION: this sample contains non-ascii chars in its source and dumped results. 
     484<dl> 
     485<dt>IICD.rb</dt> 
     486<dd>Class(type) definitions for this server.</dd> 
     487<dt>icd.rb</dt> 
     488<dd>Client implementation.  To run the client; 
     489<pre class="path"> 
     490$ ./icd.rb 
     491</pre> 
     492</dd> 
     493</dl> 
     494</dd> 
     495 
     496<dt class="path">WSDemo</dt> 
     497<dd>A sample of messaging client.  Server side sample does not exist now...</dd> 
     498 
     499<dt class="path">RWiki</dt> 
     500<dd>A sample CGI server which receives a request via SOAP and dispatches it 
     501to RWiki server via dRuby.  Naive SOAP/dRuby bridge implementation.</dd> 
     502 
     503</dl> 
     504 
     505<h2 id="restrictions" name="restrictions">7. Restrictions</h2> 
     506 
     507<p> 
     508The following features of the 
     509<a href="http://www.w3.org/TR/SOAP/">SOAP 1.1 (W3C Note)</a> 
     510spec are <strong>NOT</strong> currently supported: 
     511</p> 
     512 
     513<ul> 
     514<li style="margin-top: 2ex;">SOAP Envelope 
     515<ul> 
     516<li>SOAP actor attribute</li> 
     517<li>SOAP mustUnderstand attribute</li> 
     518<li>SOAP Fault Codes</li> 
     519</ul></li> 
     520<li style="margin-top: 2ex;">SOAP Encoding 
     521<ul> 
     522<li>Decoding using XML Schema</li> 
     523</ul></li> 
     524<li style="margin-top: 2ex;">Othres 
     525<ul> 
     526<li>Transport binding except HTTP server and client</li> 
     527</ul></li> 
     528</ul> 
     529 
     530<h2 id="resources" name="resources">8. Resources</h2> 
     531 
     532<dl> 
     533<dt class="path"><a href="http://raa.ruby-lang.org/list.rhtml?name=soap4r">[RAA:soap4r]</a></dt> 
     534<dd>I will post a new release to RAA. 
     535Check RAA to get a new stable (I hope) version.</dd> 
     536 
     537<dt class="path"><a href="http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/lib/soap4r/">CVS</a></dt> 
     538<dd>There is the SOAP4R CVS repository in cvs.ruby-lang.org. 
     539(Thanks to knu, the maintainer of cvs.ruby-lang.org.) 
     540Check here to get most recent (but could be unstable) version.</dd> 
     541 
     542<dt class="path"><a href="http://rrr.jin.gr.jp/rwiki?cmd=view&name=soap4r">SOAP4R Wiki</a></dt> 
     543<dd>There is a wiki for SOAP4R, running under 
     544<a href="http://www.ruby-lang.org/raa/list.rhtml?name=rwiki">[RAA:RWiki]</a>. 
     545Feel free to add your comment there. 
     546Any comments are welcomed. (as always)</dd> 
     547 
     548<dt class="path"><a href="http://rrr.jin.gr.jp/soap4r?cmd=view;name=InteropResults">InteropResults</a></dt> 
     549<dd>Test results of <a href="http://www.whitemesa.com/interop.htm">SOAPBuilders Interoperability Lab &quot;Round 2&quot;</a>.</dd> 
     550 
     551</dl> 
     552 
     553<h2 id="history" name="history">9. History</h2> 
     554 
     555<dl> 
     556<dt>1.5.0 - January 17, 2003</dt> 
     557<dd>Thousands of lines are changed in this release 
     558(*.rb in current SOAP4R distribution has 30kloc or over). 
     559But the biggest change is coding convention, camelCase to non_camel_case. 
     560Though I tried to keep compatibility between 1.5.0 and 1.4.8, but there's no 
     561way to keep it at a few point.  If you'll find your code which was developed 
     562for 1.4.8 does not run under 1.5.0, feel free to ask 
     563<a href="mailto:nakahiro@sarion.co.jp">me</a> to solve the problem. 
     564<ul> 
     565  <li>Dependency libraries; 
     566  <ul> 
     567    <li>Add net/http support.  Users can try sample SOAP clients without installing http-access2.  For actual usage, consider installing http-access2 for speed and thread-safe SOAP client.  CAUTION: Building SOAP CGI server needs http-access2 to be installed.</li> 
     568    <li>Soap4r standalone server requires webrick module to be installed instead of GServer.rb and httpserver.rb.</li> 
     569    <li>Supports iconv.  To use utf-8, you need to install iconv(included in ruby/1.8) or uconv.</li> 
     570    <li>Suspend NQXML XML parser support.</li> 
     571    <li>Remove REXML processor version check.  No longer needed.</li> 
     572    <li>Rewrite tests with test/unit.</li> 
     573  </ul></li> 
     574 
     575  <li>Features; 
     576  <ul> 
     577    <li>Efforts to support messaging with document/literal and ASP.NET interoperability.</li> 
     578    <li>Add document/literal messaging interface to wsdlDriver.rb.  See a very brief example in sample/soapbox/wsdlDriver.rb though I still didn't try to login to Jabber server..  Jabber folks?</li> 
     579    <li>XML pretty printing.</li> 
     580    <li>Better Ruby object mapping.  Rewrote RubytypeFactory to support more Ruby objects.  Tests in AMarshal(http://cvs.m17n.org/~akr/amarshal/) much helped it.  Thanks very much to Tanaka Akira-san.</li> 
     581    <li>SOAPMarshal accepts IO as an output device like Marshal#dump.</li> 
     582    <li>SOAPElement: constructor signature change.  Added extraattrs attribute.</li> 
     583    <li>XSDDateTimeImpl: to_time did not set usec.</li> 
     584    <li>StreamHandler: add reset method to shutdown a connection to a site.</li> 
     585  </ul></li> 
     586 
     587  <li>Others; 
     588  <ul> 
     589    <li>Simplify installer and remove uninstaller.  Saving inventory file in src dir could be the problem.</li> 
     590    <li>Class/Module architecture relocation.</li> 
     591    <li>Changing coding convention to fit with Ruby's.  Added lib/soap/compat.rb which defines compatibility definitions for 1.4.8.  lib/soap/compat.rb warns when the library is loaded.</li> 
     592    <li>Many warnings raised under 1.8, caused by illegal references like XSD::XSDInt in typeMap.rb.  Soap4r defined toplevel::XSDInt.  Define XSD* classes in XSD module and introduce it to toplevel.</li> 
     593  </ul></li> 
     594</ul> 
     595</dd> 
     596 
     597<dt>1.4.8 - January 17, 2003</dt> 
     598<dd> 
    56599This version has these enhancements and bug fixes; 
    57 </p> 
    58600<ul> 
    59601  <li>Avoid warnings; 
     
    91633  <li>wsdl2ruby: Add --force option to override existing file.</li> 
    92634  <li>Fixed many bugs.</li> 
    93 </ul> 
    94  
    95 <h2 id="install" name="install">2. Install</h2> 
    96  
    97 <p> 
    98 At first, see <a href="#dependencies">Dependencies</a> section. 
    99 You may need to install some extra packages. 
    100 Next, get the archived file of SOAP4R and extract it, then simply try; 
    101 </p> 
    102 <pre class="path"> 
    103 $ ruby install.rb 
    104 </pre> 
    105  
    106 <p> 
    107 Necessary files will be installed to suitable directory. 
    108 </p> 
    109  
    110 <p> 
    111 Files in lib/soap directory are SOAP4R library program itself. 
    112 Followings are redistributed files in redist/. 
    113 </p> 
    114  
    115 <dl> 
    116 <dt class="path">GServer</dt> 
    117 <dd>by John W. Small: <a href="http://fairfax2.laser.net/~jsmall/rubycorner.html">http://fairfax2.laser.net/~jsmall/rubycorner.html</a></dd> 
    118  
    119 <dt class="path">httpserver.rb</dt> 
    120 <dd>by Michael Neumann: httpserver.rb in <a href="http://www.ruby-lang.org/raa/list.rhtml?name=xml-rpc">[RAA:XML-RPC]</a></dd> 
    121 </dl> 
    122  
    123 <p> 
    124 Files in archive: 
    125 </p> 
    126  
    127 <dl> 
    128 <dt class="path">lib/soap/</dt> 
    129 <dd>SOAP4R library.</dd> 
    130  
    131 <dt class="path">lib/wsdl/</dt> 
    132 <dd>WSDL4R library.</dd> 
    133  
    134 <dt class="path">sample/</dt> 
    135 <dd>SOAP4R samples. 
    136 See <a href="#samples">Samples</a> section.</dd> 
    137  
    138 <dt class="path">test/</dt> 
    139 <dd>Clients/Server for 
    140 <a href="http://www.xmethods.net/ilab/">`SOAPBuilders Interoperability Lab.'</a> 
    141 Followings are advanced examples to use complex type transmit, 
    142 sending base64 encoded string, multi-dimensional array, and so on. 
    143 <ul> 
    144 <li>test/interopR2/server.cgi is a RPC Server side implementation.</li> 
    145 <li>test/interopR2/client*.rb is a RPC Client side implementation.</li> 
    146 <li>test/interopR2/base.rb includes common definitions for client/server.</li> 
    147 </ul> 
    148 </dd> 
    149  
    150 <dt class="path">redist/</dt> 
    151 <dd>Redistributed modules which SOAP4R uses. 
    152 I would appriciate to authors of these programs. 
    153 </dd> 
    154  
    155 </dl> 
    156  
    157 <h2 id="uninstall" name="uninstall">3. Uninstall</h2> 
    158  
    159 <p> 
    160 To uninstall; 
    161 </p> 
    162  
    163 <pre class="path"> 
    164 $ ruby uninstall.rb 
    165 </pre> 
    166  
    167 <p> 
    168 Of cource, modules listed at <a href="#dependencies">Dependencies</a> 
    169 which you may install are not uninstalled. 
    170 </p> 
    171  
    172 <h2 id="whats" name="whats">4. What is SOAP4R?</h2> 
    173  
    174 <p> 
    175 'SOAP4R' is an implementation of 
    176 <a href="http://www.w3.org/TR/SOAP/">Simple Object Access Protocol (SOAP) 1.1 (W3C Note)</a>. 
    177 </p> 
    178  
    179 <p> 
    180 Comments, information such as interoperability between SOAP4R and another implementation are welcomed. 
    181 Feel free sending mail to 
    182 <a href="mailto:nakahiro@sarion.co.jp" class="path">nakahiro@sarion.co.jp</a>. 
    183 </p> 
    184  
    185 <h2 id="dependencies" name="dependencies">5. Dependencies</h2> 
    186  
    187 <p> 
    188 SOAP4R is written in <a href="http://www.ruby-lang.org">Ruby</a> and 
    189 aims to use with Ruby application. 
    190 You have to install Ruby itself. 
    191 Ruby/1.6 series are required. 
    192 It does not works on 1.4 series because it does not have class variable. 
    193 </p> 
    194  
    195 <p> 
    196 SOAP4R depends on following Ruby modules in 
    197 <a href="http://www.ruby-lang.org/raa/">RAA</a>. 
    198 You also have to install these modules to use SOAP4R. 
    199 </p> 
    200  
    201 <dl> 
    202 <dt class="path">XML processor</dt> 
    203 <dd>SOAP4R requires a XML processor package installed. 
    204 For now, one of following XML processor must be installed 
    205 (SOAP4R automatically detects it in runtime). 
    206 FYI: xmlscan and REXML are scheduled to be included in ruby/1.8's standard 
    207 distribution.  Version following each project is the version tested with soap4r. 
    208 <ul> 
    209 <li><a href="http://www.ruby-lang.org/raa/list.rhtml?name=xmlscan">[RAA:xmlscan]</a> (0.1.3 or 0.2.0-20030116)</li> 
    210 <li><a href="http://www.ruby-lang.org/raa/list.rhtml?name=rexml">[RAA:REXML]</a> (2.5.3)</li> 
    211 <li><a href="http://www.ruby-lang.org/raa/list.rhtml?name=rexml-stable">[RAA:REXML-stable]</a> (2.4.5)</li> 
    212 <li><a href="http://www.ruby-lang.org/raa/list.rhtml?name=xmlparser">[RAA:XMLParser]</a> (0.6.5)</li> 
    213 <li><a href="http://www.ruby-lang.org/raa/list.rhtml?name=nqxml">[RAA:NQXML]</a> (1.1.3p1)</li> 
    214 </ul></dd> 
    215  
    216 <dt class="path"><a href="http://www.ruby-lang.org/raa/list.rhtml?name=date2">[RAA:date2]</a> (3.2)</dt> 
    217 <dd>Date and DateTime implementation by Todayoshi Funaba. 
    218 Note: From ruby/1.8, this module is included in standard distribution. 
    219 You don't have to install it if you are using ruby/1.8 or later.</dd> 
    220  
    221 <dt class="path"><a href="http://www.ruby-lang.org/raa/list.rhtml?name=devel-logger">[RAA:devel-logger]</a> (1.0.1)</dt> 
    222 <dd>Logging utility by NaHi.</dd> 
    223  
    224 <dt class="path"><a href="http://www.ruby-lang.org/raa/list.rhtml?name=http-access2">[RAA:http-access2]</a> (version j)</dt> 
    225 <dd>Yet another HTTP client implementation by NaHi.</dd> 
    226  
    227 <dt class="path"><a href="http://www.ruby-lang.org/raa/list.rhtml?name=Uconv">[RAA:Uconv]</a> (optional) (0.4.10)</dt> 
    228 <dd>by Yoshida Masato. 
    229 It is requred when you want automatic CES conversion between 
    230 SJIS &lt;-&gt; UTF8 and EUC &lt;-&gt; UTF8. 
    231 Note: SJIS &lt;-&gt; EUC uses NKF module which is in standard distribution. 
    232 I will support Iconv for more conversion set. 
    233 </dd> 
    234  
    235 </dl> 
    236  
    237 <h2 id="samples" name="samples">6. Samples</h2> 
    238  
    239 <p> 
    240 Samples are in sample/ directory of distribution. 
    241 Some samples try to connect to public servers. 
    242 Set environment variable HTTP_PROXY if you are in a firewall and you have 
    243 http proxy to the internet like; 
    244 </p> 
    245 <pre class="path"> 
    246 $ export HTTP_PROXY=http://myproxyserver:8080 
    247   or 
    248 $ setenv HTTP_PROXY http://myproxyserver:8080 
    249 </pre> 
    250  
    251 <dl> 
    252 <dt class="path">babelfish.rb</dt> 
    253 <dd>A client for 
    254 <a href="http://www.xmethods.com/ve2/ViewListing.po?serviceid=14">BabelFish</a> 
    255 which namespace URI is 'urn:xmethodsBabelFish'. 
    256 <pre class="path"> 
    257 $ ./babelfish.rb "Text to translate" [ translation pattern like 'en_fr' ] 
    258 </pre> 
    259 </dd> 
    260  
    261 <dt class="path">whois.rb</dt> 
    262 <dd>A client for 
    263 <a href="http://www.xmethods.com/ve2/ViewListing.po?serviceid=34">SQLData's WHOIS</a> 
    264 which namespace URI is 'http://www.SoapClient.com/xml/SQLDataSoap.xsd'. 
    265 <pre class="path"> 
    266 $ ./whois.rb ruby-lang.org 
    267 </pre> 
    268 CAUTION: This WhoIs server does not handle non-ascii characters correctly. 
    269 Querying domain which entry contains Japanese or so will hang.  Gee. 
    270 </dd> 
    271  
    272 <dt class="path">digraph.rb</dt> 
    273 <dd>A sample of SOAP marshalling/unmarshalling. 
    274 It creates a digraph that contains multi-ref-ed nodes at first 
    275 and marshals this object to get serialized XML instance. 
    276 Then reads and unmarshals this XML instance to recover a object 
    277 which has the same links among nodes in the digraph. 
    278 </dd> 
    279  
    280 <dt class="path">apacheClient.rb</dt> 
    281 <dd>SOAP-RPC client sample which connects with demonstration server; 
    282 stockquote and addressbook in Apache-SOAP. 
    283 You have to install Apache-SOAP and deploy demostration programs.<br /> 
    284 To execute; 
    285 <pre class="path"> 
    286 $ ./apacheClient.rb http://localhsot:2020/xml-soap/rpcrouter/rpcrouter.jsp 
    287 </pre> 
    288 </dd> 
    289  
    290 <dt class="path">GoogleSearch/</dt> 
    291 <dd>A sample client to search with <a href="http://www.google.com/apis/">Google Web API</a> using WSDL. 
    292 You need to get a developer's key to use it. 
    293 See wsdlDriver.rb. 
    294 </dd> 
    295  
    296 <dt class="path">Amazon/</dt> 
    297 <dd>A sample client to connect with <a href="http://associates.amazon.com/exec/panama/associates/ntg/browse/-/1067662/086-5207681-4585409">AmazonWebServices</a> using WSDL. 
    298 You need to get a developer's token to use it. 
    299 See wsdlDriver.rb. 
    300 </dd> 
    301  
    302 <dt class="path">Calc/</dt> 
    303 <dd>Calc service contains 2 servers and 2 clients. 
    304 calc.rb is hosted by server.rb, calc2.rb is hosted by server2.rb. 
    305 client.rb is for server.rb, client2.rb is for server2.rb. 
    306 <dl> 
    307 <dt>calc.rb</dt> 
    308 <dd>Calc server definition using module and module methods. 
    309 This module responds 'add', 'sub', 'multi' and 'div'.</dd> 
    310 <dt>server.rb</dt> 
    311 <dd>Standalone server. 
    312 It requires calc.rb and serve module methods of this module. 
    313 To run this server; 
    314 <pre class="path"> 
    315 $ ./server.rb 
    316 </pre> 
    317 </dd> 
    318 <dt>server.cgi</dt> 
    319 <dd>CGI version. 
    320 To run this server, copy server.cgi and calc.rb to suitable directory 
    321 of your WWW server. 
    322 </dd> 
    323 <dt>client.rb</dt> 
    324 <dd>It connects to server.rb or server.cgi, 
    325 and hit methods served by calc.rb. 
    326 To run the client; 
    327 <pre class="path"> 
    328 $ ./client.rb 
    329 </pre> 
    330 Is it stacked?  Did you run the server.rb?<br/> 
    331 Turn logger and wireDumpDev in its source on to see logs and wire dumps of 
    332 SOAP transport.</dd> 
    333  
    334 <dt>calc2.rb</dt> 
    335 <dd>Calc server definition using class and instance methods. 
    336 An instance of this class holds its value.  Methods 'set' and 'get' is to 
    337 set/get the value. 
    338 It also responds to '+', '-', '*', and '/'. 
    339 </dd> 
    340 <dt>server2.rb</dt> 
    341 <dd>It requires calc2.rb and creates an instance of CalcService2 
    342 that responds all SOAP requests. 
    343 Since '+', '-' and so on of calc2.rb are not valid name as an element 
    344 in XML instance, 
    345 this sample register the method '+' as 'add', '-' as 'sub', and so on. 
    346 </dd> 
    347 <dt>server2.cgi</dt> 
    348 <dd>CGI version. 
    349 To run this server, copy server2.cgi and calc2.rb to suitable directory 
    350 of your WWW server. 
    351 </dd> 
    352 <dt>client2.rb</dt> 
    353 <dd>It connects to server2.rb or server2.cgi. 
    354 Set a value at first and call methods like 'puts objAtServer + 2'.</dd> 
    355 </dl> 
    356 </dd> 
    357  
    358 <dt class="path">Exchange/</dt> 
    359 <dd>A sample to retrieve the currency rate from public SOAP service.</dd> 
    360 <dl> 
    361 <dt>iExchange.rb</dt> 
    362 <dd>It includes common definitions for client and server of 
    363 Exchange service. 
    364 Including only a definition of namespace URI of this service.</dd> 
    365 <dt>exchange.rb</dt> 
    366 <dd>Definition of servant class ExchangeService which returns the currency rate 
    367 after connecting to another site by SOAP to get the real rate. 
    368 So that this class is the SOAP server for local client and  
    369 is also a SOAP client for public server. 
    370 An instance of this class is hosted by server.rb. 
    371 The instance responds to only 'getRate' which receives two country code 
    372 such as 'USA' and 'Japan'.</dd> 
    373 <dt>server.rb</dt> 
    374 <dd>It requires exchange.rb and creates an instance of ExchangeService 
    375 that responds all SOAP requests. 
    376 To run this server; 
    377 <pre class="path"> 
    378 $ ./server.rb 
    379 </pre> 
    380 </dd> 
    381 <dt>server.cgi</dt> 
    382 <dd>CGI version. 
    383 To run this server, copy server.cgi and exchange.rb to suitable directory 
    384 of your WWW server. 
    385 </dd> 
    386 <dt>client.rb</dt> 
    387 <dd>It connects to server.rb. 
    388 Turn logger and wireDumpDev in its source on to see logs and wire dumps of 
    389 SOAP transport. 
    390 To run the client; 
    391 <pre class="path"> 
    392 $ ./client.rb 
    393 </pre> 
    394 </dd> 
    395 </dl> 
    396 </dd> 
    397  
    398 <dt class="path">SampleStruct/</dt> 
    399 <dd>A sample to transmit complex structured object which has recursive 
    400 object reference. 
    401 <dl> 
    402 <dt>iSampleStruct.rb</dt> 
    403 <dd>It includes common definitions for client and server of 
    404 SampleStruct service. 
    405 Definition of SampleStruct class and namespace URI of this service.</dd> 
    406 <dt>sampleStruct.rb</dt> 
    407 <dd>Definition of servant class SampleStructService. 
    408 An instance of this class is hosted by server.rb. 
    409 The instance responds to only 'hi' which receives a SampleStruct and wraps 
    410 it in the new instance of SampleStruct to return .</dd> 
    411 <dt>server.rb</dt> 
    412 <dd>It requires sampleStruct.rb and creates an instance of SampleStructService 
    413 that responds all SOAP requests. 
    414 To run this server; 
    415 <pre class="path"> 
    416 $ ./server.rb 
    417 </pre> 
    418 </dd> 
    419 <dt>server.cgi</dt> 
    420 <dd>CGI version. 
    421 To run this server, copy server.cgi and sampleStruct.rb to suitable directory 
    422 of your WWW server. 
    423 </dd> 
    424 <dt>client.rb</dt> 
    425 <dd>It connects to server.rb. 
    426 Turn logger and wireDumpDev in its source on to see logs and wire dumps of 
    427 SOAP transport. 
    428 To run the client; 
    429 <pre class="path"> 
    430 $ ./client.rb 
    431 </pre> 
    432 </dd> 
    433 </dl> 
    434 </dd> 
    435  
    436 <dt class="path">RAA/</dt> 
    437 <dd>SOAP-RPC client samples. 
    438 These programs connect to RAA SOAP Interface on www.ruby-lang.org. 
    439 <ul> 
    440 <li>soap4r.rb: Ruby program using SOAP4R</li> 
    441 <li>xmlrpc4r.rb: Ruby program using xmlrpc4r</li> 
    442 <li>pocketSOAP.js: JScript program using pocketSOAP</li> 
    443 <li>SOAP::Lite.pl: Perl program using SOAP::Lite for Perl</li> 
    444 </ul> 
    445 Since the server is (still) under testing phase so stable operation is not expected.</dd> 
    446  
    447 <dt class="path">webrick/</dt> 
    448 <dd>SOAP-RPC server samples which runs with WEBrick. 
    449 <ul> 
    450 <li>httpd.rb: HTTP server which soaplet.rb mounts to. 
    451 It is powered by WEBrick so you must install 
    452 <a href="http://www.ruby-lang.org/raa/list.rhtml?name=webrick">[RAA:WEBrick]</a> 
    453 to run it.</li> 
    454 <li>soaplet.rb: A bricklet to add a SOAP function to WEBrick. 
    455 It hosts exchange.rb, sampleStruct.rb below, and it is mounted to httpd.rb 
    456 to serve ExchangeService and SampleStructService.</li> 
    457 <li>ExchangeService 
    458 <dl> 
    459 <dt>exchange.rb</dt> 
    460 <dd>A server class definition which returns the currency rate 
    461 after connecting to another site by SOAP to get the real rate. 
    462 An instance of this class is instanciated in httpd.rb and this instance 
    463 respond to each HTTP request.</dd> 
    464 <dt>exchangeClient.rb</dt> 
    465 <dd>A client to connect soaplet.rb via SOAP/HTTP to call exchange.rb.</dd> 
    466 <dt>iExchange.rb</dt> 
    467 <dd>Common class(type) definitions for server and client.</dd> 
    468 </dl> 
    469 </li> 
    470  
    471 <li>SampleStructService 
    472 <dl> 
    473 <dt>sampleStruct.rb</dt> 
    474 <dd>A server class definition which wraps a given struct 
    475 and returns it. 
    476 An instance of this class is instanciated in httpd.rb and this instance 
    477 respond to each HTTP request.</dd> 
    478 <dt>sampleStructClient.rb</dt> 
    479 <dd>A client to connect soaplet.rb via SOAP/HTTP to call sampleStruct.rb</dd> 
    480 <dt>iSampleStruct.rb</dt> 
    481 <dd>Common class(type) definitions for server and client.</dd> 
    482 </dl></li> 
    483 </ul> 
    484 Run the server; 
    485 <pre class="path"> 
    486 $ ruby httpd.rb 
    487 </pre> 
    488 Then, run clients; 
    489 <pre class="path"> 
    490 $ ruby sampleStruct.rb 
    491 $ ruby exchangeClient.rb 
    492 </pre> 
    493 Set 'logger' and 'wireDumpDev' in clients to see log and wiredumps of SOAP. 
    494 </dd> 
    495  
    496 <dt class="path">ICD</dt> 
    497 <dd>A client for 
    498 <a href="http://www.iwebmethod.net/">Insider's Computer Dictionary Web Service</a>. 
    499 This service is implemented with ASP.NET so that it's also a sample of 
    500 a client which connects to ASP.NET. 
    501 CAUTION: this sample contains non-ascii chars in its source and dumped results. 
    502 <dl> 
    503 <dt>IICD.rb</dt> 
    504 <dd>Class(type) definitions for this server.</dd> 
    505 <dt>icd.rb</dt> 
    506 <dd>Client implementation.  To run the client; 
    507 <pre class="path"> 
    508 $ ./icd.rb 
    509 </pre> 
    510 </dd> 
    511 </dl> 
    512 </dd> 
    513  
    514 <dt class="path">WSDemo</dt> 
    515 <dd>A sample of messaging client.  Server side sample does not exist now...</dd> 
    516  
    517 <dt class="path">RWiki</dt> 
    518 <dd>A sample CGI server which receives a request via SOAP and dispatches it 
    519 to RWiki server via dRuby.  Naive SOAP/dRuby bridge implementation.</dd> 
    520  
    521 </dl> 
    522  
    523 <h2 id="restrictions" name="restrictions">7. Restrictions</h2> 
    524  
    525 <p> 
    526 The following features of the 
    527 <a href="http://www.w3.org/TR/SOAP/">SOAP 1.1 (W3C Note)</a> 
    528 spec are <strong>NOT</strong> currently supported: 
    529 </p> 
    530  
    531 <ul> 
    532 <li style="margin-top: 2ex;">SOAP Envelope 
    533 <ul> 
    534 <li>SOAP actor attribute</li> 
    535 <li>SOAP mustUnderstand attribute</li> 
    536 <li>SOAP Fault Codes</li> 
    537 </ul></li> 
    538 <li style="margin-top: 2ex;">SOAP Encoding 
    539 <ul> 
    540 <li>Decoding using XML Schema</li> 
    541 </ul></li> 
    542 <li style="margin-top: 2ex;">Othres 
    543 <ul> 
    544 <li>Transport binding except HTTP server and client</li> 
    545 </ul></li> 
    546 </ul> 
    547  
    548 <h2 id="resources" name="resources">8. Resources</h2> 
    549  
    550 <dl> 
    551 <dt class="path"><a href="http://www.ruby-lang.org/raa/list.rhtml?name=soap4r">[RAA:soap4r]</a></dt> 
    552 <dd>I will post a new release to RAA. 
    553 Check RAA to get a new stable (I hope) version.</dd> 
    554  
    555 <dt class="path"><a href="http://www.ruby-lang.org/~knu/cgi-bin/cvsweb.cgi/lib/soap4r/">CVS</a></dt> 
    556 <dd>There is the SOAP4R CVS repository in cvs.ruby-lang.org. 
    557 (Thanks to knu, the maintainer of cvs.ruby-lang.org.) 
    558 Check here to get most recent (but could be unstable) version.</dd> 
    559  
    560 <dt class="path"><a href="http://www.jin.gr.jp/~nahi/Ruby/SOAP4R/wiki.cgi">SOAP4R Wiki</a></dt> 
    561 <dd>There is a wiki for SOAP4R, running under 
    562 <a href="http://www.ruby-lang.org/raa/list.rhtml?name=rwiki">[RAA:RWiki]</a>. 
    563 Feel free to add your comment there. 
    564 Any comments are welcomed. (as always)</dd> 
    565  
    566 <dt class="path"><a href="http://www.jin.gr.jp/~nahi/Ruby/SOAP4R/wiki.cgi?cmd=view;name=InteropResults">InteropResults</a></dt> 
    567 <dd>Test results of <a href="http://www.whitemesa.com/interop.htm">SOAPBuilders Interoperability Lab &quot;Round 2&quot;</a>.</dd> 
    568  
    569 </dl> 
    570  
    571 <h2 id="history" name="history">9. History</h2> 
    572  
    573 <dl> 
    574 <dt>1.4.8 - January 17, 2002</dt> 
    575 <dd> 
    576 This version has these enhancements and bug fixes; 
    577 <ul> 
    578   <li>Avoid warnings; 
    579   <ul> 
    580     <li>Use Object#class instead of Object#type.</li> 
    581     <li>Avoid implicit use a String as a regexp source.</li> 
    582   </ul></li> 
    583   <li>Add wsdlDriver which reads WSDL file and allow client to call procedures.  Here is an example to search Google. 
    584   <pre> 
    585     require 'soap/wsdlDriver' 
    586     searchWord = ARGV.shift 
    587     # You must get key from http://www.google.com/apis/ to use Google Web APIs. 
    588     key = File.open(File.expand_path("~/.google_key")).read.chomp 
    589     GOOGLE_WSDL = 'http://api.google.com/GoogleSearch.wsdl' 
    590     # Load WSDL and create driver. 
    591     google = SOAP::WSDLDriverFactory.new(GOOGLE_WSDL).createDriver 
    592     # Just invoke! 
    593     result = google.doGoogleSearch(key, searchWord, 0, 10, false, "", false, "", 'utf-8', 'utf-8') 
    594     result.resultElements.each do |ele| 
    595       puts "== #{ele.title}: #{ele.URL}" 
    596       puts ele.snippet 
    597       puts 
    598     end 
    599   </pre></li> 
    600   <li>WSDLDriver client examples of AmazonWebServices, RAA and RNN (Japanese Ruby blog site) are also included in sample/ dir.</li> 
    601   <li>Support xmlscan XML processor.</li> 
    602   <li>Changed XML processor detection scheme.  Search xmlscan, REXML, XMLParser and NQXML in this order.</li> 
    603   <li>Rewrite charset handling of XML processor. 
    604   <ul> 
    605     <li>If you only use us-ascii and utf-8, all XML processors should work without uconv module.</li> 
    606     <li>With xmlscan/0.2 or later, you can handle euc-jp or shift_jis encoded XML instance WITHOUT uconv module.</li> 
    607     <li>With other XML processors includes xmlscan/0.1, you