0. In this document...
このドキュメントは,SOAP4Rのリリースノートです. 本文書が含まれているリリースパッケージについての解説です.
本文書が対象としているSOAP4Rのバージョンは, SOAP4R/1.3.7 です.
1. Changes
SOAPBuilders Interoperability Lab "Round 2" で検出された非互換性をいくつか修正しました.
- データ型:
- 全てのデータ型で,nilを扱えるようにしました.
- XSDInt/Integer/Long: '123junk'のような不正な値を検出するために,to_i -> Integer()を使うようにしました.
- XSDDateTime, XSDDate, XSDTime: 明示的にUTCであることを表すため,末尾に'Z'を付けるようにしました.
- SOAPStruct: xsi:typeが明示されていない構造体でも受けつけるようにしました.
- Map(Hash): item要素の型は型付けしないようにしました.Apache系のSOAP実装が求めています.
- ストリーム関連:
- MPOST対応コードを削りました.
- ECONNRESETを検出していませんでした.修正しました.
- タイムアウトをサポートしました.
- その他:
- URbでなくURIモジュールを使うようにしました.URbがURIに名前を変更したのに追従しただけです.
- NQXML/1.1.0に対応しました.
2. Install
パッケージを取得し,展開・伸長してください.そして;
"ruby install.rb"
とすると,必要なファイルが適当なディレクトリにコピーされます.
lib/soapディレクトリに含まれているファイルが,SOAP4Rのライブラリプログラム本体です. 下記は,redistディレクトリに含まれる再配布パッケージ群です.
- date3.rb
- by ふなばさん(http://www.kt.rim.or.jp/~tadf/ruby.html)
- parsedate3.rb
- by ふなばさん(http://www.kt.rim.or.jp/~tadf/ruby.html)
- GServer
- by John W. Small
- httpserver.rb
- by Michael Neumann: httpserver.rb in [RAA:XML-RPC]
- application.rb
- by なひ: http://www.jin.gr.jp/~nahi/Ruby/Application/application.rb
- http-access2
- by なひ: [RAA:http-access2]
パッケージ中の各ファイルの解説です.
- lib/
- SOAP4Rのライブラリプログラム本体.
- test/
- `SOAPBuilders Interoperability Lab.' 用のクライアントおよびサーバ. 現時点ではドキュメントも「ハウツー」モノも存在しません.ので, test/interopR2/server.cgiはRPCサーバサイドの実装サンプルとして要チェックです. test/interopR2/client*.rbはRPCクライアントサイドの実装サンプルとして要チェックです. test/interopR2/base.rbは,RPCサーバ/クライアントサイド共有の定義を含んでいます.
- sample/
- SOAP4Rを利用するサンプルプログラム.
- sample/apacheClient.rb
- SOAP-RPCクライアントのサンプルプログラム.
Apache SOAPの,stockquoteおよびaddressbookデモに接続する.
先にサーバ側のインストール & deployを済ませておくこと.
./sampleClient.rb http://localhsot:2020/xml-soap/rpcrouter/rpcrouter.jsp
などとして起動する. - sample/RAA/*
- SOAP-RPCクライアントのサンプルプログラムその2.
www.ruby-lang.orgにあるRAAサーバに接続するプログラム群です.
- soap4r.rb, soap4rApp.rb: SOAP4Rを使うRubyスクリプト
- xmlrpc4r.rb: xmlrpc4r(RAAにあります)を使うRubyスクリプト
- pocketSOAP.js: pocketSOAPを使うJScriptスクリプト
- SOAP::Lite.pl: SOAP::Lite for Perlを使うPerlスクリプト
- redist/
- 各種再配布パッケージから,SOAP4Rで利用するファイル群. 利用させて頂いているみなさん,どうもありがとうございます.
- redist/archive/
- 各種再配布パッケージそのもの. 各パッケージの著作権および各種隣接権については,各パッケージに記載されているものに従うこと.
3. Uninstall
インストール時に作成されたファイルを全部消してください.
ruby -rrbconfig -e 'include Config; puts CONFIG["sitedir"] + "/" + CONFIG["MAJOR"] + "." + CONFIG["MINOR"]'
は,インストール先ディレクトリを表示するはずです. このディレクトリで,"soap"ディレクトリおよび,"redist" ディレクトリに含まれるファイル名をチェックしてください.
4. What is SOAP4R?
SOAP4Rは, Simple Object Access Protocol (SOAP) 1.1 (W3C Note) をRubyから利用するためのライブラリプログラムです. SOAPについての詳細は, SOAP-ml-JP Home Page にあるリンク集, SOAP-ml-JP Links を御覧ください.
他実装との互換性の情報を募集しています. 「〜につないでみたが上手くいかない」「上手くいった」という情報がありましたら, お気軽に nakahiro@sarion.co.jp まで御連絡ください.可能な限り対応します.
5. Dependencies
SOAP4Rを利用するためには,以下のものが必要です.
- SOAP4Rは Ruby 向けのライブラリです. もちろんRuby本体が必要です. 稼働テストは1.6系で行なっています. クラス変数を使っているため,1.4系では動きません.
- SOAP4RはXML関連の処理を NQXML module に依存しています. NQXMLモジュールをインストールしておく必要があります.
- SOAP-RPCクライアントサンプルを動かすためには, Apache SOAP が必要です.
6. Restrictions
SOAP4Rは SOAP 1.1 (W3C Note) 仕様をサポートすることを目的としていますが,現時点では以下に示す各種様々な制限があります. これらは全て,SOAP4Rの実装による制限です.
- SOAP Envelopeについて
- SOAP actor属性に対応していません.
- SOAP mustUnderstand属性に対応していません.
- SOAP Fault Codesを真面目に扱ってません.
- SOAP Encodingについて
- XML Schemaを読んでencode/decodeすることはできません. SOAP Encoding本体に埋め込まれたxsi:typeのみを利用します.
- 多重参照へのmarshalling(unmarshallingは可能です)
- その他
- トランスポートはHTTPのサーバ,クライアント側のみです.
- HTTP Extension Framework(M-POST)に対応していません.
7. History
- 1.3.7 - August 24, 2001 SOAPBuilders Interoperability Lab "Round 2" で検出された非互換性をいくつか修正しました.
- データ型:
- 全てのデータ型で,nilを扱えるようにしました.
- XSDInt/Integer/Long: '123junk'のような不正な値を検出するために,to_i -> Integer()を使うようにしました.
- XSDDateTime, XSDDate, XSDTime: 明示的にUTCであることを表すため,末尾に'Z'を付けるようにしました.
- SOAPStruct: xsi:typeが明示されていない構造体でも受けつけるようにしました.
- Map(Hash): item要素の型は型付けしないようにしました.Apache系のSOAP実装が求めています.
- ストリーム関連:
- MPOST対応コードを削りました.
- ECONNRESETを検出していませんでした.修正しました.
- タイムアウトをサポートしました.
- その他:
- URbでなくURIモジュールを使うようにしました.URbがURIに名前を変更したのに追従しただけです.
- NQXML/1.1.0に対応しました.
- 1.3.6 - July 27, 2001
- Michael Neumannさんからのたくさんのフィードバック.
ありがとうございます.
- hexBinary type: 追加しました.
- nil type: xsd:nilではなく,xsi:nilとすべきでした.
- 単独サーバ実装を追加しました.Michael Neumannさんに感謝します.
- XML文書宣言部分の解析が不正でした.修正しました.
- RPCの'inout'パラメータがサポートされていませんでした.修正しました.Michael Neumannさんに感謝します.
- URb::Generic#pathは絶対パスが空のとき(例えばhttp://foo)に''を返します.チェックコードを追加しました.
- 独自HTTP実装のかわりに,http-access2モジュールを利用します.http-access2はHTTP/1.1のpersistent connectionをサポートします.
- 1.3.5 - July 14, 2001
- Michael Neumannさんからのたくさんのフィードバック.
彼からの価値のあるコメントに感謝します.
- 依存するURIライブラリを,uriからURbに変更しました.
- 型関連の変更:
- 全て: stringを除き,解析前に前後の空白文字をトリミングするようにしました.
- string型: XML文字列かどうかを判断するRegexpが,UTF8モードでうまく動きませんでした.修正しました.
- Nil: 2001xsd:nilは値'1'を許可してはいけません.1999xsd:nullは値'true'を許可してはいけません.なぜならこれらはboolean型ではないからです.修正しました.
- XMLパーザのサポート:
- NQXMLを利用する場合でも,文字コードの自動変換機能をサポートしました.uconvモジュールやnkfモジュールを利用して,適宜変換を試みます.uconvモジュールがなければ,UTF8への変換を行いません.
- NQXMLパーザの実装を別ファイルへ移動しました.誰かxmlscanとchibiXML対応してください.
- RPC関連機能の変更:
- SOAP Encodingを利用して,Rubyのオブジェクトをmarshal/unmarshalする機能を追加しました.
- 'addMethod'インタフェイスのシグニチャを対応付けしました: proxy.rb <-> rpcRouter.rb, driver.rb <-> cgistub.rb.
- addMethodで'retval'が定義されなかった時,voidを返します.
- BigNumは,値の範囲に応じ,SOAPのLong型に変換されます.
- 1.3.4.2 - July 11, 2001
-
SOAP4R/1.3.4は2001/7/10に一度パッケージ化されました.
しかし,MNeumannさんとknuさんに教えていただいて,
'redist'ディレクトリをパッケージに含めるのを忘れていたことに気付きました.
そこで開発版からいくつかの修正を取り込むと同時に,
1.3.4.2として再度パッケージ化しました.
頻繁なリリースで申し訳ありません...
`SOAPBuilders Interoperability Lab.' で検出された非互換性をいくつか修正しました.- 1.3.4.2での変更:
- Decimal型: 間抜けなバグを修正しました.0.0001が0.1に変換されてしまっていました.
- CGIStubはSOAP Faultを返すときにHTTP status 500を返すようになりました. おかしな仕様なのでずっと無視して200を返してきましたが, SOAP/1.2 W3C WD 9 July 2001もこれを採用したようです.むー...
- RPCクライアント実装(driver.rb)において,Exception#set_backtraceが正しく働いていませんでした.
- 型関連の変更:
- Array: 疎な配列のサポートが不完全でした.修正されました.
- Date: 追加されました.
- Time: 追加されました.
- DateTime: ミリ秒をサポートしました.
- String: デフォルト値はnilではなく''であるべきです.
- Nil: xsi:nilの属性値は'true'じゃなくて'1'かもしれない.修正されました.
- XMLパーザのサポート:
- expatを利用したXMLパーザ,XMLParserを利用する,SOAPXMLParserとSOAPSAXDriverを追加しました.
XMLParserはRAAから入手可能です: XMLParser module.
XMLParserを使う -> "require 'soap/xmlparser'"を追加します.
SAX driver of XMLParserを使う -> "require 'soap/saxdriver'"を追加します.
NQXMLParserを使う -> 何もしなくてもかまいません.
FYI:- XMLParserバージョンが一番速いです.
- SAXDriverバージョンはめちゃくちゃ遅いです.
- NQXMLParserバージョンは,XMLParserバージョンより若干遅い程度(SOAPメッセージのXML文書は小さいのだ).
- XMLParserはRubyの拡張モジュールなので,使うには,expatとXMLParserを取ってきてコンパイル・インストールする必要があります.
- 文字コードの自動変換機能は,XMLParserバージョンとSAXDriverバージョンでしか使えません.以下も参照のこと.
- 文字コードの自動変換機能をサポートしました.UTF-8 <-> $KCODE(EUC, SJIS)の変換を行ないます. XMLParserモジュール,uconvモジュールが必要です.
- SOAPメッセージのXML文書にXML宣言が付くようになります.
- expatを利用したXMLパーザ,XMLParserを利用する,SOAPXMLParserとSOAPSAXDriverを追加しました.
XMLParserはRAAから入手可能です: XMLParser module.
- RPC関連機能の変更:
- CGIStub#addMethodのインタフェイスが変わりました. ここではメソッドの名前空間を宣言できなくなります. CGIStubインスタンスはただ1つの名前空間だけをサポートします.
- 出力パラメータのサポートを追加しました.
- メソッド宣言インタフェイス(RPCRouter#addMethodとDriver#addMethod)を変更しました. 両者にて,パラメタ名とパラメタの型(in, inout, out, retval)を指定できます. 現在のところ,サーバ側ではパラメタ名はチェックされませんが,将来的にはチェックされるべきです. 価値のあるコメントをくれたMichael Neumannさんに感謝します.
- 1.3.4.2での変更:
- 1.3.3 - July 4, 2001
- `SOAPBuilders Interoperability Lab.'
で検出された非互換性をいくつか修正しました.
また,
XML-RPC module
作者のMichael Neumannさんにもらったインストーラが付きました!
- Michael NeumannさんによるSOAP4R Installerを追加しました.ありがとう!
- 型関連の変更:
- Boolean: true/falseの他に,1/0を解釈するようになりました.
- Float: single-precision 32-bit浮動小数点を扱います. RubyのFloatはdoule-precisionです(だよね?)
- Double: 追加されました.RubyのFloatに対応します.
- DateTime: タイムゾーンに対応しました.l
- Long: 追加されました.
- Int: 内部的に,Longを継承するように変更しました.機能にはあまり関係しません.
- Array: 'position'と'offset'に対応しました.疎な配列と部分的な配列を扱います.
- Array: 多次元配列に対応しました.独自実装ですがえらくダサいので,今後は,NArrayがインストールされている環境ではNArrayを使うように変更したいと思います.
- Decimal: 追加されましたが,まだ不完全です.
- SOAP-ENCの型として定義されていない型をみつけたときのエラーメッセージが不正でした.
- CR(\r)を安全に転送しようと試みます.今後の更なるテストが必要です...
- 'faultcode'のようなFault項目を,Bodyと同様に解析するようにしました(独自にやっていたので,href/idなどの解析に不備がありました).
- rpcUtils.rbは大幅に書き換えられました.
- 言語バインディング(Rubyオブジェクト←→SOAPオブジェクトモデル)のマッピングを外部から指定するようにしました.
- soap2objとobj2soapのインタフェイスが変更されました.
- Bignumはintかもしれないし,integerかもしれません.環境に依存します. 値域(-2147483648〜+2147483647)を自身でチェックするようにしました.
- ary2mdというインタフェイスを追加しました.配列((の配列)...)を多次元配列に変換します.
- struct2obj: Struct#membersが返す配列の並びに不正に依存していました.修正しました.
- RubyのArrayはanyType型の配列に変換されるべきです.修正しました.
- 通信途中でエラーが起きた場合でも,通信結果をログに書き出すようにしました.
- 1.3.2 - June 21, 2001
- `SOAPBuilders Interoperability Lab.'
で検出された非互換性をいくつか修正しました.
- XSD 1999(長く流通していたドラフトバージョン)では "null='1'"とすべきなのに対し, XSD 2001(勧告バージョン)では, "nil='1'"は"nil='true'"であるべきです. 修正しました.
- SOAP Arrayがxsi:typeによって型指定されていませんでした.
- root属性の扱いが間違っていたのを修正しました.
- SOAP-ENC:Stringのような要素名で記述される SOAP Encodingデフォルト型付け要素をサポート.
- 子要素にデフォルト名前空間機能が継承されていませんでした.修正しました.
- デフォルトのencodingStyleを指定することができます.
- void型をサポート(SOAP::RPCUtils::SOAPVoid).
- 1.3.1 - May 30, 2001
- `SOAPBuilders Interoperability Lab.'
で検出された非互換性をいくつか修正しました.
- Base64型のデータの先頭および末尾に空白があると誤動作していたのを修正しました.
- SOAP-ENCのBase64型のデータタイプ宣言が間違っていました.
- Float型でNaN, INF, -INFを扱えるようにしました.
- xsd:1999型を利用するための各種宣言をXMLSchemaDatatypes1999.rbとして分離しました.'require "soap/XMLSchemaDatatypes1999"'として利用してください.
- root属性をサポートしました.
- Faultを返す時にはHTTP status 500を返すようにしました.
- 1.3.0 - May 20, 2001
- NQXML module
を採用し,marshal/unmarshal共に全面的に書き換えました
(XMLストリームの解析については,XMLParserを利用して高速化することも可能です.
lib/soap/parser.rbの末尾を見てください).
- XMLParserのTreeParserのかわりに, NQXMLのstreamingParserもしくはtokenizerを使ってunmarshallingします.
- XMLParserのDOMのかわりに,NQXMLのdocumentおよびwriterを使ってmarshallingします.
- `SOAPBuilders Interoperability Lab.' で行なわれている互換性テストのうち,なひ環境でテスト可能なものについては全てテストを実施し,全てにパスしました.
- 全てのmoduleを,名前空間SOAPに入れました.SOAPCGIStub -> SOAP::CGIStubとなっており,重大な非互換性がありますので注意してください.
- floatデータ型をサポートしました.
- dateTime型において,SOAP4RではTimezoneをサポートしていないので (date3.rbではちゃんとサポートされています), marshalling formatからTimezoneの部分を削りました. いつかちゃんとサポートしたいです.
- NQXML module
を採用し,marshal/unmarshal共に全面的に書き換えました
(XMLストリームの解析については,XMLParserを利用して高速化することも可能です.
lib/soap/parser.rbの末尾を見てください).
- 1.2.0 - March 30, 2001
- SOAP-ml-JP
のみなさんに御協力を頂いて,
Apache-SOAP,
pocketSOAP/0.91,
SOAP::Lite for Perl,
SOAP/Perl/0.28
との接続テストを行なった結果を反映させました.
SOAP/Perl/0.28以外とは順調に通信できてます.
- href/idを使ったXMLをunmarshalできるようになりました (まだ参照をhref/idにmarshalすることはできません)
- base64型をサポートしました.
- SOAPTimeInstantをSOAPDateTimeに名称変更しました. XML Schema PRへの追従です.
- SOAPStructは,同じアクセサを持つ複数の値を扱えるようになりました. SOAPStructとは別クラスにしたほうがよかったかも.
- ルータは異なる名前空間に属するメソッド群を扱えるようになりました.
- <Envelope>のような,非修飾な要素を許可するためのフラグが付きました. 単純にテキストを連結して送るだけのクライアントへの対応が楽になります.
- Apache-SOAPで採用されているMapタイプをサポートしました. RubyのHashもこの型にbindするようにしました. (SOAP4R/1.1までは,Hashを独自形式にmarshalしてました. 1.1でmarshalされたXMLは,1.2でもHashにunmarshalすることができますが, 1.2では新形式にmarshalされるため,それを1.1でunmarshalすると,Hashではなく Structになってしまいます.1.2と1.1の非互換に注意してください)
- 本来ならStructのサブクラスとしてunmarshalすべき型のうち, 'unknown:SOAPStruct'という名前の型を,内部クラスのSOAPStructとして unmarshalしてしまっていました.修正しました.
- SOAPArrayとSOAPStructに,map!およびmembersメソッドを追加しました.
- SOAPBodyにrequest,responseおよびfaultメソッドを追加しました.
- 知らないヘッダ項目を見ると例外で落ちてしまっていました.無視するようにしました.
- 1.1.0 - March 23, 2001
-
結構たくさん変更しました.なひ用途でしかテストできてないので,
安定度は低いと思いますので御注意ください.
特に他SOAP実装とのinteroperabilityが不安です.
「〜につないでみたが上手くいかない」というレポートがありましたら,
是非なひ(nakahiro@sarion.co.jp)まで御連絡ください.可能な限り対応します.
- RPCサーバとしての機能を追加しました.
- RPCクライアント/サーバ機能の実装を,SOAP本体から分離しました.
- RPCでRuby専用に使える型として,Date,Hashをサポートしました. (知らない型については,従来通り単なるStructになります)
- TimeInstantとして,Timeではなく, ふなばさんのdate3.rbのDateを使うようにしました. また,parsedate2→parsedate3に移行してみました.
- RPCサーバとしての機能を追加している最中に, SOAPArrayおよびSOAPStructのencoding/decodingのバグ(特に名前空間回り)を たくさん修正しました.
- 1.0.2 - November 11, 2000
- 若干古くなってきたので,細かいリフレッシュを行ないました.
- ruby 1.6.x対応しました.
- 対応するuri.rbのバージョンが3.54から4.22になりました.
- サンプルがxml-soap/2.0に対応しました.
- 1.0.1 - July 27, 2000
- SOAP/1.1の配列に対応しました. 実は対応してなかったんです...すいません. 制約 はまだたくさん残っていますので注意してください.
- 1.0.0 - July 17, 2000
- これが最初のリリースです. 変更点もなにもありません. なら書くな.^^;
8. Author
- Name
- NAKAMURA, Hiroshi (aka NaHi or nakahiro)
- nakahiro@sarion.co.jp
- URL
- http://www.jin.gr.jp/~nahi/
9. Copyright
本プログラムの著作権および各種隣接権について.GPL2です. 詳細は GNU GENERAL PUBLIC LICENSE Version 2, June 1991 を参照してください.
SOAP4R
Copyright © 2000, 2001 NAKAMURA, Hiroshi.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License(the file named `COPYING') for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.