我正在使用Ruby / Cucumber / Savon来自动化Soap webservice。我需要验证对wsdl文件的响应。 Savon docs并未提及在任何地方验证XML响应。有没有人知道这样做的好方法?
谢谢, 哈维吉尔
答案 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