[ruby-list:50386] Re: [質問]ruby SOAP? DLNA機器制御 Action名内の '_' Underscore が取り除かれる
From:
KOHEI OHKUBO <ohkubo@...>
Date:
2016-09-09 09:23:23 UTC
List:
ruby-list #50386
savon を以前仕事で使ったことがあるのでざっとコードを読み返してみました。 厳密に追ったわけではないので間違ってるかもしれませんが、たぶん こういう感じのことが起きています。 > 'X-Start'.underscore => "x_start" > 'X-Start'.underscore.camelcase => "XStart" savon が SOAP のクライアントで、 savon は gyoku という xml ビルダに依存しています。 savon はアクション名を underscore します。 https://github.com/savonrb/savon/blob/master/lib/savon/model.rb#L31 (snakecase とあるが、 underscore とほぼおなじ処理) easy_upnp のこの行 https://github.com/sidoh/easy_upnp/blob/master/lib/easy_upnp/control_point/client_wrapper.rb#L25 で指定している :camelcase が回り回って gyoku に渡り、gyoku がアクション名を camelcase します。 という、高度なコンビネーション技で underscore が消えているので、簡単に解決する方法となると、ちょっと悩みますね。 On Fri, Sep 9, 2016 at 4:24 PM <yamataka@u08.itscom.net> wrote: > 山口と申します。 > > Windows 8.1 > c:\yama\bin\UPnP>ruby --version > ruby 2.3.1p112 (2016-04-26 revision 54768) [x64-mingw32] > の環境で、 > > Gem “easy_upnp” を用いて、Ruby scriptにて、DLNA機器の制御を試みています。 > > c:\yama\bin\UPnP>gem dependency easy_upnp > Gem easy_upnp-1.1.10 > nokogiri (~> 1.6) > rake (>= 0) > savon (~> 2.11) > > から、 > “easy_upnp” は、savon, nokogiri を内部で利用しています。 > > DLNA機器が提供している X_Startという機能(Action)を、Ruby Scriptから呼び > 出し(*)た際に、 > > (*)session_id = @group_service.X_Start(GroupMode: 'GROUP', > GroupName: 'Ruby', > SlaveList: L_BZH_UUID, > CodecType: '48', > CodecBitrate: '0') > > Ruby scripでは、DLNA機器よりErrorが返ってくるので、 > 正常に処理されるDevice Spy(Intel UPnP Tool)と、 > > Wiresharkを用いてRuby,Device Spy双方の送信パケットを、Capture したところ、 > > Ruby scriptでは、Request時のXML Body 内において、 > X_Start と記述されるべきところが、’_’ underscore が取り除かれ、XStartと > 記述され送信されていました > そのため、DLNA機器側がそのような機能(Action)がないため、Errorが返ってき > ます。 > > ‘_’underscoreがどこで取り除かれているのか、ruby –rdebug にて追ってみまし > たが、原因を追究できず… > 送信時のXMLを作成する際にどこかで、’_’ が取り除かれていると推測していま > す。 > SOAPに当たる部分かと推測します。 > > もし、詳しい方がいらっしゃれば、なぜ、'_' underscoreが取り除かれてしまう > のか、その対処方法を > ご教示いただけないでしょうか? > > よろしくお願いします。 > >