2012-05-16 153 views
3

我在Ruby on Rails中使用Savon gem与wsdl WS进行通信。一切工作正常,但我想使用自定义日志记录请求XML,即不是Rails或Savon记录器。我的代码看起来是这样的:使用Savon访问SOAP请求的请求正文(Ruby on Rails)

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

回答

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 

希望有所帮助!

+0

Thx的答复,我会尝试这种方法,并回来! –

+1

工作就像一个魅力!或者无论如何:) 我最终在自己的记录器中覆盖了调试,解析了Nokogiri的消息并在我自己的db字段中记录了相关信息。 Thx帮助rubiii。 –

+0

这很酷谢谢你,但你需要我添加“信息”方法,如“调试” – ndrx42

2

这在官方回答中没有明确说明,但我必须包含更多选项才能正确地获取请求/响应。就我而言,我只是用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作为参考。

+0

任何方法来设置全局配置中的Savon日志记录? (与savon 2一起使用) – Magne