0

次の形式のパラメーターを使用してメソッド呼び出しを受信することを期待しているサーバーからの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([]))

私が本当に知っているのは、特定のパラメーターを受け取るメソッドがあるということだけです。このメソッドが私が思うことを実行する場合、それはもっと複雑でなければならない理由がわかりません。これは、まったく同じデータを取得し、それを異なる形式にするだけの問題ではありませんか?私は困惑している....

4

1 に答える 1

0

さて、私が最終的にやったのは、SOAP:RPC:Drivers add_document_method を使用することでした。これには、wsdl、名前空間などを指定し、後で単一の入力ハッシュとして属性を指定する必要があります (出力は同様のフォーマット)。それは機能しましたが、add_rpc_method ほどきれいではありませんでした (これは add_method のデフォルトです)。

-ジェニー

于 2009-07-21T13:50:29.087 に答える