使用Savon(Ruby on Rails)访问SOAP请求的请求主体

时间:2012-05-16 13:13:33

标签: ruby-on-rails ruby soap wsdl savon

我在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字段来查看生产环境中发送的内容。

2 个答案:

答案 0 :(得分:5)

现在没有简单的方法来获取请求XML。但正如您所注意到的,Savon logs each request and response指定的记录器。因此,如果您不更改日志级别,则可以使用类似于Logger的自定义对象来响应:debug并存储记录的内容。

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

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

希望有所帮助!

答案 1 :(得分:3)

官方回答中没有明确说明,但我必须提供更多选项来获取正确记录的请求/响应。就我而言,我只使用了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可能默认调试,但明确没有任何害处:)但如果没有log: true选项,您将无法看到实际的请求/响应机构,只有网址和状态。

我使用Savon 2.7.2作为参考。