使用Ruby Savon验证针对WSDL的XML响应

时间:2015-03-24 18:48:12

标签: ruby xml soap savon

我正在使用Ruby / Cucumber / Savon来自动化Soap webservice。我需要验证对wsdl文件的响应。 Savon docs并未提及在任何地方验证XML响应。有没有人知道这样做的好方法?

谢谢, 哈维吉尔

2 个答案:

答案 0 :(得分:2)

用于SOAP消息的优秀Nokogiri library支持XML schema (XSD) validation(即WSDL的“Types”部分应包含引用或内联XSD)。

xsd = Nokogiri::XML::Schema(File.read(SCHEMA_FILE))
doc = Nokogiri::XML(File.read(XML_FILE))

xsd.validate(doc).each do |error|
  puts error.message
end

答案 1 :(得分:1)

我做了一个gem来简化此过程。它应该从WSDL中提取所有模式,并在需要时导入任何模式。让我知道它是否对您不起作用。

require 'wsdl_validator'
wsld = WsdlValidator.new('path_to_wsdl')
# xml can be String, Nokogiri::XML::Document
wsdl.validate xml

如果有效,它将返回true;否则,将引发错误消息的异常。

您可以从Savon响应中获取XML并通过以下内容

wsdl = 'path_to_wsdl'
client = Savon::Client.new(wsdl: wsdl)  
response = client.call(:operation, message: { element: 'value' })
WsdlValidator.new(wsdl).validate response.xml