簡體   English   中英

使用Savon(Ruby on Rails)訪問SOAP請求的請求主體

[英]Accessing the request body of a SOAP request with Savon (Ruby on Rails)

我在Ruby on Rails中使用Savon gem與wsdl WS進行通信。 一切正常,但我想使用自定義日志記錄請求XML,即不是Rails或Savon記錄器。 我的代碼看起來像這樣:

    response = self.client.request :add_order do
      soap.body = { 
        :indata => {
          "CustomerNo" => config[:kundnr],
          "Pwd" => config[:password],
          "OrderDate" => order["purchase_order_date"].strftime('%Y%m%d')
        }
      }
    end

訪問響應沒有問題,但請求怎么辦? 我需要通過將XML記錄到DB字段來查看生產環境中發送的內容。

現在,沒有簡單的方法來獲取請求XML。 但是正如您所注意到的, Savon會將每個請求和響應記錄到指定的記錄器中。 因此,如果您不更改日志級別,則可以使用響應的自定義Logger對象:debug並存儲記錄的內容。

module DBLogger
  def self.debug(message)
    p message  # replace with custom impl.
  end
end

Savon.configure do |config|
  config.logger = DBLogger
end

希望有所幫助!

這在官方答復中沒有明確說明,但我必須包含更多選項來獲取正確記錄的請求/響應。 在我的例子中,我只使用Rails.logger而不是自己滾動:

client = Savon.client(
  wsdl: 'http://example.com?wsdl',
  log: true,
  logger: Rails.logger,
  log_level: :debug
)

client.call(:example_operation, message: {example: 'example'})

log_level可能默認為debug,但顯式沒有任何害處:)但是如果沒有log: true選項,您將看不到實際的請求/響應主體,只會看到網址和狀態。

我正在使用Savon 2.7.2作為參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM