From: "NAKAMURA, Hiroshi" Date: 2001-07-30T19:16:59+09:00 Subject: [ruby-list:30756] Ruby-SOAP mapping (was Re: ruby-orbit support server side) なひです。 > From: Dai [mailto:MAP2303@mapletown.net] > Sent: Monday, July 30, 2001 6:28 PM > CORBA-Ruby mapping はまだ考えてないです。 話は全然違いますが、SOAP4RにおけるSOAP-Ruby mappingは 現在こんな感じにしています。[rpcUtils.rb in SOAP4R] SOAPBaseMapping = [ [ ::NilClass, ::SOAP::SOAPNil, BasetypeFactory ], [ ::TrueClass, ::SOAP::SOAPBoolean, BasetypeFactory ], [ ::FalseClass, ::SOAP::SOAPBoolean, BasetypeFactory ], [ ::String, ::SOAP::SOAPString, BasetypeFactory ], [ ::Date, ::SOAP::SOAPDateTime, BasetypeFactory ], [ ::Date, ::SOAP::SOAPDate, BasetypeFactory ], [ ::Time, ::SOAP::SOAPDateTime, BasetypeFactory ], [ ::Time, ::SOAP::SOAPTime, BasetypeFactory ], [ ::Float, ::SOAP::SOAPFloat, BasetypeFactory ], [ ::Float, ::SOAP::SOAPDouble, BasetypeFactory ], [ ::Integer, ::SOAP::SOAPInt, BasetypeFactory ], [ ::Integer, ::SOAP::SOAPLong, BasetypeFactory ], [ ::Integer, ::SOAP::SOAPInteger, BasetypeFactory ], [ ::String, ::SOAP::SOAPBase64, Base64Factory ], [ ::String, ::SOAP::SOAPHexBinary, Base64Factory ], [ ::String, ::SOAP::SOAPDecimal, BasetypeFactory ], [ ::Array, ::SOAP::SOAPArray, CompoundtypeFactory ], [ ::SOAP::RPCUtils::SOAPException, ::SOAP::SOAPStruct, TypedStructFactory, [ RubyCustomTypeNamespace, "SOAPException" ]], [ ::Struct, ::SOAP::SOAPStruct, CompoundtypeFactory ], ] 一つ目がRubyの型、二つ目がSOAPの型(≒XML Schema Datatypesの ベース型 + 構造体 + 配列)です。 Ruby→SOAPの場合、上からis_a?を探していき、変換に成功するものを探します。 SOAP→Rubyの場合も同様(上から)。 例えばString.new( "\0" )をSOAPに変換する場合、 まず::String→::SOAP::SOAPのPathを発見しますが、SOAPのStringには "\0"を含めることができないために変換に失敗し、 次のパスである::String→::SOAP::Base64を元に、base64Binaryに変換されます。 似たようなことをやっている人が居て、違うmappingを採用しているようでしたら 教えてください。あと、「このmappingは変だろ」という方も是非。