From: "NAKAMURA, Hiroshi" Date: 2005-05-12T02:52:37+09:00 Subject: [ruby-dev:26144] Re: Dateと SOAPの型のマッピング -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 なひです。 各種指摘、ありがとうございます。全部前田さんの指摘で正しいです。 Shugo Maeda wrote: >>バグでした。前田さんのおっしゃる通り、mappingが間違っており >>(DateはSOAP::DateTimeにしちゃだめ)、かつ、SOAP Data Model (SOAP::*)にお >>けるnormalizeが間違ってました。内部では全部DateTimeで持つんですが、間違 >>えてif obj.is_a?(Date)とか書いてました。if obj.is_a?(DateTime)でないとい >>けなかった。(DateTime is_a? Date なので、これまでDate以外では問題なく動 >>いてました)。 >> >>http://dev.ctor.org/soap4r/changeset/1543 > > パッチを適用したところうまくいきました。ありがとうございます。 > > [::Date, ::SOAP::SOAPDateTime, DateTimeFactory], > > の方ではなく、 > > [::Date, ::SOAP::SOAPDate, DateTimeFactory], > > の方が削除されているようですが、これはこういうものなんです? いえ、前田さんご指摘のとおり、消す箇所を間違っていました。 > あと、SOAPBaseMapの方にも同じような部分がありますが、問題ない > でしょうか。 こちらも修正もれです。RubyOriginalMapのほうはsoap/mappingでの使用を前提 としていて、おそらくRailsでは使われていないと思います。 で、もう一箇所、DateTime -> Dateの勘違いをしていた箇所があったため、偶然 に動いていたのでした。修正は以下です。 http://dev.ctor.org/soap4r/changeset/1546 # DateTime#to_dateは1.8にはなかったので、適当にもってきてみました。大丈 # 夫かな。 > それから、内部的にはDateTimeで持つとのことですが、 > > $ ruby -r date -r soap/mapping -e 'xd = > SOAP::Mapping.obj2soap(Date.today); p xd.class; d = > SOAP::Mapping.soap2obj(xd); p d.class' > SOAP::SOAPDate > DateTime > > のように、SOAP::SOAPDate -> DateTimeになるのは意図的ということ > でしょうか。 > このためか、Railsでxsd:dateな値を受け取るとDateTimeに変換されて > しまうのですが、これはRails側で対処するべきなんですかね。 上記のミス修正の結果、これはSOAPDate -> Dateにmapされることになりまし た。しかしまだテスト書いてないので、 Date -> SOAPDate(内部はDateTime) -> Date で元に戻るかどうか、まだ怪しいかもしれません。特にGMTでないときとか。テ スト書きます。 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (Cygwin) iD8DBQFCgkYgf6b33ts2dPkRAsufAJ9hIW8r0l5VioqG/qLEjgGzEqJpcgCggTxg KFzAKd5ryWzqphl68/aRJ3M= =VYHq -----END PGP SIGNATURE-----