0

Savonを使用してbodyタグにエンコーディング属性を追加するにはどうすればよいですか?

背景:savonを使用してSOAPリソースに接続しようとしています。WSDLファイルを取得してメソッドを参照できます。

@client = Savon::Client.new("http://some.domain.com/v2messaging/service?WSDL")

ログイン方法を使おうとすると

response = @client.request :service, :login do
  soap.body = { 
    "String_1" => "username",
    "String_2" => "password"
  }
end

このエラーが発生します:

失敗/エラー:応答= @ client.request:service、:login do Savon :: SOAP :: Fault:(env:Client)は、要求の処理中に例外をキャッチしました:予期しないエンコードスタイル:expected = http://schemas.xmlsoap.org / soap / encoding /、実際

ボディタグの違い。予想されるxmlは次のとおりです(SOAPUIアプリケーションで見つかります)。

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:service="etapestryAPI/service">
   <env:header/>
   <env:body>
      <service:login env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <String_1>username</String_1>
        <String_2>password</String_2>
      </service:login>
   </env:body>
</env:Envelope>

Savonは以下を送信します:

<?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:service="etapestryAPI/service" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://java.sun.com/jax-rpc-ri/internal" xmlns:ins1="etapestryAPI/service">
    <env:Body>
        <service:login>
            <String_1>username</String_1>
            <String_2>password</String_2>
        </service:login>
    </env:Body>
</env:Envelope>

これらの間にはいくつかの違いがありますが、返されるエラーはenv:loginタグのenv:encodingStyle属性に関係しています。この属性を追加するにはどうすればよいですか?

4

1 に答える 1

1

私はこれを理解しました。関数タグ(この場合はログイン)に属性を追加するには、メソッドに追加のパラメーターを渡すことができます。

response = @client.request :service, :login, "env:encodingStyle" => "http://schemas.xmlsoap.org/soap/encoding/" do
  soap.body = { 
           "String_1" => "username",
           "String_2" => "password"
         }
end

これはおそらく、ブロックを通過せずに機能します。

于 2011-11-19T20:26:09.203 に答える