次の形式のパラメーターを使用してメソッド呼び出しを受信することを期待しているサーバーからのSOAPWebサービス呼び出しを処理しています。
<urn:offeringId> 354 </urn:offeringId>
しかし、SOAP :: RPC::Driverは次の形式でメッセージを生成しています。
<offeringId xsi:type = "xsd:int">354</offeringId>
サーバーは、これらのメッセージを受け取ったときにエラーを出し続けます(特に、offeringIdは、intではなく、サーバー自体の内部のカスタムタイプであると想定しているため)。
サーバーが期待する方法でフォーマットするようにドライバーを構成する方法はありますか?サーバーはSOAPも実行していますか?そのスタイルのSOAPのフォーマットへの参照を見つけるのに問題があります(SOAPUIはそのタイプのメッセージで問題なく機能するため、機能することはわかっています)。
-ジェニー
編集:私はそれの少なくとも一部を解決しました。RPC :: Driverは(明らかに)RPC標準を使用しますが、私が話そうとしているサーバーは明らかに「ドキュメント」を実行しています。ここで、RPC :: DriverのAPIを見ると、「add_document_method」という名前のメソッドが表示されています。それは私が望むものかもしれないように私には聞こえますが、私はそれを与えるためのパラメータを理解することができません。私がネットで見た例は、私にはあまり意味がありません。次のようなものです。
def GetNamePair(response)
response.account.each do |x|
class << x
attr :configuration, true
end
x.configuration = Hash[*x.a.map do |y|
[y.__xmlattr[XSD::QName.new(nil, 'n')], String.new(y)]
end.flatten]
end
end
mNS = 'urn:zimbraAdmin'
drv.add_document_method('GetAllAdminAccountsRequest', mNS, [XSD::QName.new(mNS, 'GetAllAdminAccountsRequest')],
[XSD::QName.new(mNS, 'GetAllAdminAccountsResponse')] )
puts YAML.dump(GetNamePair(drv.GetAllAdminAccountsRequest([]))
私が本当に知っているのは、特定のパラメーターを受け取るメソッドがあるということだけです。このメソッドが私が思うことを実行する場合、それはもっと複雑でなければならない理由がわかりません。これは、まったく同じデータを取得し、それを異なる形式にするだけの問題ではありませんか?私は困惑している....