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

问题描述 投票:3回答:2

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

谢谢,哈佛吉尔

ruby xml soap savon
2个回答
2
投票

优秀的Nokogiri library支持用于SOAP消息的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
投票

我做了一个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
© www.soinside.com 2019 - 2024. All rights reserved.