Release Notes - SOAP4R

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


0. In this document...

このドキュメントは,SOAP4Rのリリースノートです. 本文書が含まれているリリースパッケージについての解説です.

本文書が対象としているSOAP4Rのバージョンは, SOAP4R/1.4.2 です.

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

1. Changes

SOAPのRuby言語マッピング部分を大量に変更しました. DRbのマーシャリング形式をSOAPマーシャリングに置き換えて, DRbのパッケージに付属している単体テストのほとんどにパスするのを確認しました. 唯一失敗したテストはパケットサイズに関するものでした. Marshal.(load|dump)の替わりに, SOAP::Marshal.(un|)marshalを使えるかもしれません.

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: http://fairfax2.laser.net/~jsmall/rubycorner.html
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を利用するためには,以下のものが必要です.

6. Restrictions

SOAP4Rは SOAP 1.1 (W3C Note) 仕様をサポートすることを目的としていますが,現時点では以下に示す各種様々な制限があります. これらは全て,SOAP4Rの実装による制限です.

7. History

1.4.2 - December 28, 2001
SOAPのRuby言語マッピング部分を大量に変更しました. DRbのマーシャリング形式をSOAPマーシャリングに置き換えて, DRbのパッケージに付属している単体テストのほとんどにパスするのを確認しました. 唯一失敗したテストはパケットサイズに関するものでした. Marshal.(load|dump)の替わりに, SOAP::Marshal.(un|)marshalを使えるかもしれません.
  • position属性付きの要素の後にpositionなしの要素が来た時のdecodingに失敗していました.修正しました.
  • Rubyの型のencoding/decodingサポートを追加しました: Regexp,Class,ModuleおよびSymbol.
  • MappingRegistryに,不明な型があったときに例外をあげるオプションを追加しました.デフォルトでは例外をあげず,特異メソッドを持つオブジェクトとして渡されます.
1.4.1 - December 7, 2001
SOAP4R/1.4は(いつも通り...)たくさんのバグを含んでいました. 1.4.1はメンテナンスリリースです.いくつかのバグが修正されています. Michael Neumannさん,どうもありがとう.
  • SOAPStruct#addの中で,accessorを定義するために用いているinstance_evalが,name,name=などの重要なメソッドを不正に上書きしていました.これを取り除き,このコードに依存していた部分を書き直しました.報告し,有用なアドバイスをくれたMNeumannさん,ありがとう.
  • charsetの扱いにバグがありました.利用するXMLプロセッサを明示的に指定しなかった場合,HTTPヘッダのcharsetが正しく指定されませんでした.
  • element.rbの中の不要なコードを取り除きました.
  • SOAPメッセージにフォーマットエラーがあったときに参照する定数が不正でした.修正しました.
  • LiteralEncodingNamespaceがSOAPモジュール直下に移動しました.
1.4 - December 5, 2001
  • データ型:
    • XSDFloat: double floatをsingle floatに丸める際にバグがありました.修正されました.
    • SOAPElement: literal encoding(encodingせずにXMLを埋め込む)のために追加されました.
    • SOAP data model(baseData.rb)からencoding関連機能を取り除きました.EncondingStyleHandlerが適宜判断すべきです.
    • SOAPHeaderItem: より使い易くインタフェイスを変更しました.
  • SOAP Encoding:
    • NQXMLの木構造モデルに頼らず,自前でencodingします.
    • ついに多重参照のencodingを実装しました!
    • marshal.rb: EnvelopeとBodyを伴なってmarshalするようになりました. SOAP Encodingでは,多重参照のencodingのためにBodyが必要です. 注意: 従来の実装との互換性がありません.
    • literal encodingのハンドラを追加し,これをdefaultとしました.
    • encoding.rbをencodingStyleHandler.rbに名前を変えました.
    • ASP.NETのencoding handlerを追加しました.ASP.NETはデフォルトではliteral encodingを使用しますが,元はといえばやっぱり関数と配列であるため,受け側でもそれっぽくdecodeしたほうが便利です(DOMプログラミングなんかしたくない).
    • 要素名のescape方法を変更しました.
      • :: <=> \.\.
      • [^a-zA-Z0-9_-] <=> \.[0-F][0-F]
      制限: SOAP4RのRPC関連機能を使う場合,メソッド名,クラス名,メンバ名に'.'を含むobjectの転送を行なうことはできません.Rubyの文法的にはこれで問題ないはずです.
  • RPC関連機能:
    • Driver: メッセージングを行なうためのメソッド,'invoke'を追加しました.
    • Driver: SOAP Faultのdetail要素の中身を,Driverからユーザアプリケーションに返す例外の中にセットするようにしました.
    • Processor: marshal/unmarshalのインタフェイスを変更しました.
    • mappingRegistry.rbがrpcUtils.rbから分離しました.
1.3.8 - October 4, 2001
SOAPBuilders Interoperability Lab "Round 2" で検出された非互換性,およびMichael Neumannさんからの報告に基づく修正.
  • データ型:
    • XSDFloat: '123.0junk'のような異常データが0.0に変換されていました. これは禁止されるべきです.修正しました.
    • XSDFloat: 倍精度->単精度変換コードを修正しました.
  • RPC関連機能:
    • Rubyの型名とXML要素用のNCNameの対応付け戦略を変更しました. 'Foo::Bar'という型を'Foo.Bar'という要素に対応させます.
    • SOAPオブジェクト生成用のヘルパ関数に,mappingRegistryを渡せるようにしました.
  • その他:
    • SOAP Faultのfaultstringが空の時に,'(No faultstring)'という文字列をセットします.
    • server.rb: mappingRegistryをセットするインタフェイスを追加しました.
    • marshal.rb: 型名からNCNameを生成します.
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宣言が付くようになります.
  • RPC関連機能の変更:
    • CGIStub#addMethodのインタフェイスが変わりました. ここではメソッドの名前空間を宣言できなくなります. CGIStubインスタンスはただ1つの名前空間だけをサポートします.
    • 出力パラメータのサポートを追加しました.
    • メソッド宣言インタフェイス(RPCRouter#addMethodとDriver#addMethod)を変更しました. 両者にて,パラメタ名とパラメタの型(in, inout, out, retval)を指定できます. 現在のところ,サーバ側ではパラメタ名はチェックされませんが,将来的にはチェックされるべきです. 価値のあるコメントをくれたMichael Neumannさんに感謝します.
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の部分を削りました. いつかちゃんとサポートしたいです.
1.2.0 - March 30, 2001
SOAP-ml-JP のみなさんに御協力を頂いて, Apache-SOAPpocketSOAP/0.91SOAP::Lite for PerlSOAP/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)
E-mail
nakahiro@sarion.co.jp
URL
http://www.jin.gr.jp/~nahi/

本プログラムの著作権および各種隣接権について.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.