8

Windows 7 Professional 64 ビットで Ruby 1.9.2 と savon 0.9.2 を使用しています。

2 番目の Web SOAP サービスから取得したセキュリティ トークンを必要とする Web SOAP サービスを呼び出す必要があります。私が使用するコードは次のとおりです。

require 'savon'

client = Savon::Client.new "http://some.url?wsdl"
client.wsdl.soap_actions

start_session_response = client.request :start_session do
  soap.input = ["StartSession", {:xmlns => "http://some.schema" } ]
  soap.body = { :userName => "User", :password => "password" }
end

do_something_response = client.request :do_something do
  soap.input = [ "DoSomething", { :xmlns => "http://some.schema"} ]
  soap.body = { :securityToken => start_session_response.to_hash[:start_session_response][:security_token] }
end

これにより、次のような XML が生成されます。

<?xml version="1.0" encoding="utf-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://some.schema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Body>
    <DoSomething xmlns="http://some.schema">
      <wsdl:securityToken>
        <wsdl:tokenType>sessiontoken</wsdl:tokenType>
        <wsdl:token>
         .
        .
        .
        </wsdl:token>
      </wsdl:securityToken>
    </DoSomething>
  </env:Body>
</env:Envelope>

この XML の変な名前空間規則 (またはそれは私だけでしょうか) は気にしないでください。

私が直面している問題は、securitytoken タグ内のすべてのタグが、大文字であるべきところを小文字で始まることです。そう<tokenType>とだった<token>はずです。<TokenType><Token>

私の意見では、これらのタグの定義はすべて、savon クライアントの作成に使用される WSDL に含まれています。その定義は使用されていないか、誤って使用されているようです。

savon から正しい XML/SOAP メッセージを取得するにはどうすればよいですか?

4

3 に答える 3

22

convert_request_keys_toSavon の以降のリリースでは、Savon クライアントを初期化するときに「グローバル」オプションを指定できるはずです。

# In Savon 2
Savon.client wsdl:"http://some.url?wsdl", convert_request_keys_to: :camelcase

ソースファイルのコメントによると、accepts one of :lower_camelcase, :camelcase, :upcase, or :none.

于 2014-07-29T21:17:27.260 に答える
13

私はSavonで同様の問題を抱えていて、ハッシュキーのシンボルの代わりに文字列を使用することになりました。次のようなものを試すことができます:

soap.body = { 'TokenType'=> 'some_value', 'Token' => 'some_value' }
于 2011-06-26T17:49:27.023 に答える
10

Savon さんはタグの変換に Gyoku を使用していると思います。シンボル変換を変更するには、次のステートメントを挿入できます。

Gyoku.convert_symbols_to :camelcase # or one of [:none, :lover_camelcase]

それが役立つことを願っています。

于 2011-06-26T13:20:35.937 に答える