| | 56 | Thousands of lines are changed in this release |
|---|
| | 57 | (*.rb in current SOAP4R distribution has 30kloc or over). |
|---|
| | 58 | But the biggest change is coding convention, camelCase to non_camel_case. |
|---|
| | 59 | Though I tried to keep compatibility between 1.5.0 and 1.4.8, but there's no |
|---|
| | 60 | way to keep it at a few point. If you'll find your code which was developed |
|---|
| | 61 | for 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> |
|---|
| | 97 | Thanks to all of soap4r users for their support. |
|---|
| | 98 | </p> |
|---|
| | 99 | |
|---|
| | 100 | <h2 id="install" name="install">2. Install</h2> |
|---|
| | 101 | |
|---|
| | 102 | <p> |
|---|
| | 103 | At first, see <a href="#dependencies">Dependencies</a> section. |
|---|
| | 104 | You may need to install some extra packages. |
|---|
| | 105 | Next, 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> |
|---|
| | 112 | Necessary files will be installed to suitable directory. |
|---|
| | 113 | </p> |
|---|
| | 114 | |
|---|
| | 115 | <p> |
|---|
| | 116 | Files 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. |
|---|
| | 125 | See <a href="#samples">Samples</a> section.</dd> |
|---|
| | 126 | |
|---|
| | 127 | <dt class="path">test/</dt> |
|---|
| | 128 | <dd>Some tests. |
|---|
| | 129 | Unit test MUST cover all lines of code, but far from enough so far... |
|---|
| | 130 | <br/> |
|---|
| | 131 | test/interopR2/ directory includes Clients/Server for |
|---|
| | 132 | <a href="http://www.xmethods.net/ilab/">`SOAPBuilders Interoperability Lab.'</a> |
|---|
| | 133 | Followings are advanced examples to use complex type transmit, |
|---|
| | 134 | sending 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> |
|---|
| | 146 | Simply 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> |
|---|
| | 157 | Comments, information such as interoperability between SOAP4R and another implementation are welcomed. |
|---|
| | 158 | Feel 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> |
|---|
| | 165 | SOAP4R is written in <a href="http://www.ruby-lang.org">Ruby</a> and |
|---|
| | 166 | aims to use with Ruby application. |
|---|
| | 167 | You have to install Ruby itself. |
|---|
| | 168 | Ruby/1.6 series or later is required. |
|---|
| | 169 | It does not works on 1.4 series because it does not have class variable. |
|---|
| | 170 | </p> |
|---|
| | 171 | |
|---|
| | 172 | <p> |
|---|
| | 173 | SOAP4R depends on following Ruby modules in |
|---|
| | 174 | <a href="http://raa.ruby-lang.org">RAA</a>. |
|---|
| | 175 | You 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. |
|---|
| | 181 | For now, one of following XML processor must be installed |
|---|
| | 182 | (SOAP4R automatically detects it in runtime). |
|---|
| | 183 | FYI: xmlscan and REXML are scheduled to be included in ruby/1.8's standard |
|---|
| | 184 | distribution. Version following each project is the version tested with soap4r. |
|---|
| | 185 | <br/> |
|---|
| | 186 | Note: 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. |
|---|
| | 199 | ruby/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. |
|---|
| | 206 | Note: From ruby/1.8, this module is included in standard distribution. |
|---|
| | 207 | You 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. |
|---|
| | 211 | It is requred when you use ruby/1.6 and want automatic CES conversion between |
|---|
| | 212 | SJIS <-> UTF8 and EUC <-> UTF8. |
|---|
| | 213 | Under ruby/1.8, soap4r uses iconv in standard distribution library. |
|---|
| | 214 | Note: SJIS <-> EUC uses NKF module which is in standard distribution. |
|---|
| | 215 | I 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> |
|---|
| | 223 | Samples are in sample/ directory of distribution. |
|---|
| | 224 | Some samples try to connect to public servers. |
|---|
| | 225 | Set environment variable HTTP_PROXY if you are in a firewall and you have |
|---|
| | 226 | http 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> |
|---|
| | 238 | which 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> |
|---|
| | 247 | which namespace URI is 'http://www.SoapClient.com/xml/SQLDataSoap.xsd'. |
|---|
| | 248 | <pre class="path"> |
|---|
| | 249 | $ ./whois.rb ruby-lang.org |
|---|
| | 250 | </pre> |
|---|
| | 251 | CAUTION: This WhoIs server does not handle non-ascii characters correctly. |
|---|
| | 252 | Querying 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. |
|---|
| | 257 | It creates a digraph that contains multi-ref-ed nodes at first |
|---|
| | 258 | and marshals this object to get serialized XML instance. |
|---|
| | 259 | Then reads and unmarshals this XML instance to recover a object |
|---|
| | 260 | which 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; |
|---|
| | 265 | stockquote and addressbook in Apache-SOAP. |
|---|
| | 266 | You have to install Apache-SOAP and deploy demostration programs.<br /> |
|---|
| | 267 | To 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. |
|---|
| | 275 | You need to get a developer's key to use it. |
|---|
| | 276 | See 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. |
|---|
| | 281 | See wsdlDriver.rb. |
|---|
| | 282 | </dd> |
|---|
| | 283 | |
|---|
| | 284 | <dt class="path">Calc/</dt> |
|---|
| | 285 | <dd>Calc service contains 2 servers and 2 clients. |
|---|
| | 286 | calc.rb is hosted by server.rb, calc2.rb is hosted by server2.rb. |
|---|
| | 287 | client.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. |
|---|
| | 291 | This module responds 'add', 'sub', 'multi' and 'div'.</dd> |
|---|
| | 292 | <dt>server.rb</dt> |
|---|
| | 293 | <dd>Standalone server. |
|---|
| | 294 | It requires calc.rb and serve module methods of this module. |
|---|
| | 295 | To run this server; |
|---|
| | 296 | <pre class="path"> |
|---|
| | 297 | $ ./server.rb |
|---|
| | 298 | </pre> |
|---|
| | 299 | </dd> |
|---|
| | 300 | <dt>server.cgi</dt> |
|---|
| | 301 | <dd>CGI version. |
|---|
| | 302 | To run this server, copy server.cgi and calc.rb to suitable directory |
|---|
| | 303 | of your WWW server. |
|---|
| | 304 | </dd> |
|---|
| | 305 | <dt>client.rb</dt> |
|---|
| | 306 | <dd>It connects to server.rb or server.cgi, |
|---|
| | 307 | and hit methods served by calc.rb. |
|---|
| | 308 | To run the client; |
|---|
| | 309 | <pre class="path"> |
|---|
| | 310 | $ ./client.rb |
|---|
| | 311 | </pre> |
|---|
| | 312 | Is it stacked? Did you run the server.rb?<br/> |
|---|
| | 313 | Turn logger and wireDumpDev in its source on to see logs and wire dumps of |
|---|
| | 314 | SOAP transport.</dd> |
|---|
| | 315 | |
|---|
| | 316 | <dt>calc2.rb</dt> |
|---|
| | 317 | <dd>Calc server definition using class and instance methods. |
|---|
| | 318 | An instance of this class holds its value. Methods 'set' and 'get' is to |
|---|
| | 319 | set/get the value. |
|---|
| | 320 | It also responds to '+', '-', '*', and '/'. |
|---|
| | 321 | </dd> |
|---|
| | 322 | <dt>server2.rb</dt> |
|---|
| | 323 | <dd>It requires calc2.rb and creates an instance of CalcService2 |
|---|
| | 324 | that responds all SOAP requests. |
|---|
| | 325 | Since '+', '-' and so on of calc2.rb are not valid name as an element |
|---|
| | 326 | in XML instance, |
|---|
| | 327 | this sample register the method '+' as 'add', '-' as 'sub', and so on. |
|---|
| | 328 | </dd> |
|---|
| | 329 | <dt>server2.cgi</dt> |
|---|
| | 330 | <dd>CGI version. |
|---|
| | 331 | To run this server, copy server2.cgi and calc2.rb to suitable directory |
|---|
| | 332 | of your WWW server. |
|---|
| | 333 | </dd> |
|---|
| | 334 | <dt>client2.rb</dt> |
|---|
| | 335 | <dd>It connects to server2.rb or server2.cgi. |
|---|
| | 336 | Set 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 |
|---|
| | 345 | Exchange service. |
|---|
| | 346 | Including 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 |
|---|
| | 349 | after connecting to another site by SOAP to get the real rate. |
|---|
| | 350 | So that this class is the SOAP server for local client and |
|---|
| | 351 | is also a SOAP client for public server. |
|---|
| | 352 | An instance of this class is hosted by server.rb. |
|---|
| | 353 | The instance responds to only 'getRate' which receives two country code |
|---|
| | 354 | such as 'USA' and 'Japan'.</dd> |
|---|
| | 355 | <dt>server.rb</dt> |
|---|
| | 356 | <dd>It requires exchange.rb and creates an instance of ExchangeService |
|---|
| | 357 | that responds all SOAP requests. |
|---|
| | 358 | To run this server; |
|---|
| | 359 | <pre class="path"> |
|---|
| | 360 | $ ./server.rb |
|---|
| | 361 | </pre> |
|---|
| | 362 | </dd> |
|---|
| | 363 | <dt>server.cgi</dt> |
|---|
| | 364 | <dd>CGI version. |
|---|
| | 365 | To run this server, copy server.cgi and exchange.rb to suitable directory |
|---|
| | 366 | of your WWW server. |
|---|
| | 367 | </dd> |
|---|
| | 368 | <dt>client.rb</dt> |
|---|
| | 369 | <dd>It connects to server.rb. |
|---|
| | 370 | Turn logger and wireDumpDev in its source on to see logs and wire dumps of |
|---|
| | 371 | SOAP transport. |
|---|
| | 372 | To 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 |
|---|
| | 382 | object reference. |
|---|
| | 383 | <dl> |
|---|
| | 384 | <dt>iSampleStruct.rb</dt> |
|---|
| | 385 | <dd>It includes common definitions for client and server of |
|---|
| | 386 | SampleStruct service. |
|---|
| | 387 | Definition of SampleStruct class and namespace URI of this service.</dd> |
|---|
| | 388 | <dt>sampleStruct.rb</dt> |
|---|
| | 389 | <dd>Definition of servant class SampleStructService. |
|---|
| | 390 | An instance of this class is hosted by server.rb. |
|---|
| | 391 | The instance responds to only 'hi' which receives a SampleStruct and wraps |
|---|
| | 392 | it 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 |
|---|
| | 395 | that responds all SOAP requests. |
|---|
| | 396 | To run this server; |
|---|
| | 397 | <pre class="path"> |
|---|
| | 398 | $ ./server.rb |
|---|
| | 399 | </pre> |
|---|
| | 400 | </dd> |
|---|
| | 401 | <dt>server.cgi</dt> |
|---|
| | 402 | <dd>CGI version. |
|---|
| | 403 | To run this server, copy server.cgi and sampleStruct.rb to suitable directory |
|---|
| | 404 | of your WWW server. |
|---|
| | 405 | </dd> |
|---|
| | 406 | <dt>client.rb</dt> |
|---|
| | 407 | <dd>It connects to server.rb. |
|---|
| | 408 | Turn logger and wireDumpDev in its source on to see logs and wire dumps of |
|---|
| | 409 | SOAP transport. |
|---|
| | 410 | To 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. |
|---|
| | 420 | These 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> |
|---|
| | 427 | Since 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. |
|---|
| | 433 | It is powered by WEBrick so you must install |
|---|
| | 434 | <a href="http://raa.ruby-lang.org/list.rhtml?name=webrick">[RAA:WEBrick]</a> |
|---|
| | 435 | to run it.</li> |
|---|
| | 436 | <li>soaplet.rb: A bricklet to add a SOAP function to WEBrick. |
|---|
| | 437 | It hosts exchange.rb, sampleStruct.rb below, and it is mounted to httpd.rb |
|---|
| | 438 | to 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 |
|---|
| | 443 | after connecting to another site by SOAP to get the real rate. |
|---|
| | 444 | An instance of this class is instanciated in httpd.rb and this instance |
|---|
| | 445 | respond 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 |
|---|
| | 457 | and returns it. |
|---|
| | 458 | An instance of this class is instanciated in httpd.rb and this instance |
|---|
| | 459 | respond 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> |
|---|
| | 466 | Run the server; |
|---|
| | 467 | <pre class="path"> |
|---|
| | 468 | $ ruby httpd.rb |
|---|
| | 469 | </pre> |
|---|
| | 470 | Then, run clients; |
|---|
| | 471 | <pre class="path"> |
|---|
| | 472 | $ ruby sampleStruct.rb |
|---|
| | 473 | $ ruby exchangeClient.rb |
|---|
| | 474 | </pre> |
|---|
| | 475 | Set '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>. |
|---|
| | 481 | This service is implemented with ASP.NET so that it's also a sample of |
|---|
| | 482 | a client which connects to ASP.NET. |
|---|
| | 483 | CAUTION: 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 |
|---|
| | 501 | to 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> |
|---|
| | 508 | The following features of the |
|---|
| | 509 | <a href="http://www.w3.org/TR/SOAP/">SOAP 1.1 (W3C Note)</a> |
|---|
| | 510 | spec 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. |
|---|
| | 535 | Check 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.) |
|---|
| | 540 | Check 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>. |
|---|
| | 545 | Feel free to add your comment there. |
|---|
| | 546 | Any 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 "Round 2"</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). |
|---|
| | 559 | But the biggest change is coding convention, camelCase to non_camel_case. |
|---|
| | 560 | Though I tried to keep compatibility between 1.5.0 and 1.4.8, but there's no |
|---|
| | 561 | way to keep it at a few point. If you'll find your code which was developed |
|---|
| | 562 | for 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> |
|---|
| 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 <-> UTF8 and EUC <-> UTF8. |
|---|
| 231 | | Note: SJIS <-> 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 "Round 2"</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 |
|---|