3

これは私がaaクライアントを作成する方法です:

@client = Savon::Client.new do
  wsdl.document = my_document
  wsdl.endpoint = my_endpoint
end

そして、これが私が応答を得ている方法です:

@response = @client.request :the_action do
  soap.body = xml
  soap.body = {"applicationId" => my_application_id }
end

ただし、これにより次の xml が生成されます。

"<ins5:applicationId>XXXXXXXXXXXXXX</ins5:applicationId>"

接頭辞が原因で、石鹸サービスがエラーになります。代わりにこれを行うと、動作します:

@response = @client.request :the_action do
  soap.body =  "<applicationId>#{my_application_id}</applicationId>"
end

ただし、これはさまざまな理由で苦痛です。サボンがプレフィックスを付けないようにする方法はありますか?

savon 0.9.6 を使用。

4

1 に答える 1

5

これはsavon 0.9.6のバグのようです。次のようにクライアント作成コードを更新してみてください。

@client = Savon::Client.new do
  wsdl.document = my_document
  wsdl.endpoint = my_endpoint
  wsdl.element_form_default = :unqualified
end

編集:他の誰かがこの問題に遭遇した場合、解決策で回答を更新します

wsdl.document savon を指定すると、要素のプレフィックスが付くことがわかります。wsdl ドキュメントを使用せず、次のように必要な名前空間を定義するだけのほうがよいでしょう。

@client = Savon::Client.new do
  wsdl.endpoint = "http://..."
  wsdl.namespace = "http://..." # target namespace
end

@response = @client.request :namespace_prefix, :soap_action do
  soap.element_form_default = :unqualified
  soap.namespaces["xmlns:ns1"] = "http://..."
  soap.namespaces["xmlns:ns2"] = "http://..."

  soap.body =  {:application_id => my_application_id }
end
于 2011-07-16T22:51:56.113 に答える