Tag: savon

ruby savon和wsdl命名空间

我有一个问题,我认为是关于命名空间。 WSDL可以从这里下载: http : //promostandards.org/content/wsdl/Order%20Shipment%20NotificationService/1.0.0/OSN-1-0-0.zip 生成请求时,它看起来像这样: 1.0.0 myusername mypassword 3 2017-07-19 这导致肥皂故障。 当SoapUI使用相同的WSDL构造请求时,它看起来像这样 1.0.0 myusername mypassword 3 2017-07-19 您可以看到SoapUI已将用户名和密码放在“shar”命名空间内。 我注意到这并没有直接列在WSDL或WSDL直接加载的任何XSD文件中。 它被加载类似WSDL => XSD file =>包含shar命名空间的XSD文件。 这可能是问题吗? 如何将命名空间添加到3个键中? 我正在使用savon 2.11.1和nori 2.6.0 这是我最终使用的解决方案: @client = Savon.client( wsdl: ‘OSN-1-0-0/WSDL/1.0.0/OrderShipmentNotificationService.wsdl’, endpoint: @endpoint, env_namespace: :soapenv, namespaces: { “xmlns:shar” => “http://www.promostandards.org/WSDL/OrderShipmentNotificationService/1.0.0/SharedObjects/” }, element_form_default: :qualified, headers: { “accept-encoding” => “identity” } ) […]

如何在Savon中生成重复的xml元素?

soapUI在它构建的请求XML中的许多地方生成此注释Zero or more repetitions 。 这是XML请求的一部分。 ? ? cid:1220950351678 我使用Savon 2.2.0与外部服务进行通信。 Ruby hashes需要唯一的密钥。 我尝试以格式传递一组哈希 attachments: [{attachment: {file_name: “foo1”, file_extension: “bar1″, file_contents:”binary_encoded_content”}}, {attachment: {file_name: “foo2”, file_extension: “bar2”, file_contents: “binary_encoded_content”}}] 但在这种情况下,Savon只在数组上执行to_s 。 我怎样才能做到这一点?

如何在Rails中的XML / WSDL doc中编写路径到位置?

我有一个带有XSD导入的WSDL文档。 WSDL工具假定模式位于同一目录中,但在rails中加载失败并出现错误 我尝试过从rails root和system root写入路径,但没有成功。 我使用Savon 3来处理rails中的WSDL。 SoapUI通常使用此模式。 那么,写这条路的正确方法是什么?

使用Savon在Ruby on Rails中调用SOAP在包络和主操作方面变得奇怪

在使用Savon.rb的rails项目中,我试图进行一个非常复杂的SOAP调用。 至少复杂到Savon构建器的扩展很麻烦所以我决定直接操作:xml。 首先我发起客户: @client = Savon.client( :endpoint => ‘https://testservice.postnl.com/CIF_SB/BarcodeWebService/1_1/BarcodeWebService.svc’, :wsdl => ‘https://testservice.postnl.com/CIF_SB/BarcodeWebService/1_1/?wsdl’) 然后我打电话的形状为: @request = @client.build_request(:generate_barcode, xml: %Q{ … see soap call (with ruby interpolation) … } 我添加了一个格式正确的l Time.now, format: :postnl_api字符串,其余的仍然是硬编码的。 包括消息号。 以下是Savon在这种情况下实际调用的方式,如使用@request.body检索的。 我的应用程序中的SOAP调用 http://postnl.nl/cif/services/BarcodeWebService/IBarcodeWebService/GenerateBarcode devc_!R4xc8p9 xxxxxxxx DEVC 11223344 3S DEVC 1000000-2000000 接下来是一个调用应该如何看待,因为我看到这个调用在公司的沙箱环境中取得了成功。 应该是SOAP调用 http://postnl.nl/cif/services/BarcodeWebService/IBarcodeWebService/GenerateBarcode devc_!R4xc8p9 xxxxxxxx 5 28-06-2017 14:15:41 DEVC 11223344 3S DEVC 1000000-2000000 […]

rails通过肥皂基本认证与savon

我正在尝试使用savon gem发送带有基本身份validation的soap请求 我的soap服务器设置了wash_out gem class OrdersController < ApplicationController soap_service namespace: 'sir:WashOut', wsse_username: SIRA[:auth][:username], wsse_password: SIRA[:auth][:password] …. 当我通过savon向soap服务器发出请求时出现错误: @client = Savon.client( wsdl: “http://localhost:3000/orders/wsdl”, soap_header: { ‘Username’ =>SIRA[:auth][:username], ‘Password’ => SIRA[:auth][:password] } ) @response = @client.call(:notify ).to_hash 在最后一个命令我得到一个错误 Savon::SOAPFault: (Server) Missing required UsernameToken

如何设置savon默认超时值

我正在使用savon进行一些api调用,但由于我正在及时出错,需要很长时间才能响应。所以有任何方法可以更改超时的默认值。 我使用savon 0.7.9 ruby​​ 1.8.7和rails -v 2.3.2。

无法在savon调用上设置SOAP标头参数

我正在使用savon 2.2进行SOAP调用。 初始化: client = Savon.client( wsdl: SOAP_WSDL, endpoint: SOAP_URL) 我可以这样做一个SOAP调用,它工作正常: resp = client.call(:login, message: { username: SOAP_USER, password: SOAP_PASSWORD }) 现在我需要进行另一个调用,这需要在SOAP标头中设置一些参数。 从savorb.com上的文档中我发现我应该使用请求方法: response = client.request :get_user_info do soap.header = { :session_id => sid } end 但我收到一个错误,说请求方法不存在: undefined method `request’ for # 我有不同版本的savon或者什么? 我尝试使用“call”而不是“request”,但后来我得到了: ArgumentError – wrong number of arguments (1 for 2): gem) savon-2.2.0/lib/savon/options.rb:35:in […]

Rails – Savon设置了多个名称空间

我正在使用savon版本2 (使用Ruby on Rails)来调用web服务,我需要为我的Envelope注入一些额外的命名空间。 就像是: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:add="http://schemas.xmlsoap.org/ws/2003/03/addressing" xmlns:newNamespace1="http://someURL.pt/Test1" xmlns:newNamespace2="http://someURL.pt/Test2" xmlns:newNamespace3="http://someURL.pt/Test3" 我目前的代码是: client = Savon.client do wsdl “https://someValidURL?wsdl” namespace “http://someURL.pt/Test1” namespace “http://someURL.pt/Test2” namespace “http://someURL.pt/Test3” end response = client.call( …the webservice call… ) …但在我的请求中,Savon只放置最后一个命名空间 我没有在Savon Git项目中找到任何关于此的文档。 有没有人有这个问题的解决方法? PS-我还检查一个可能的解决方案是将所有xml请求(信封)设置为请求但是……嗯…太像黑客了。 如果这是不可能的,还有其他好的gem可以做到这一点,请告诉我=)

通过与Savon的SOAP调用,与Nokogiri一起阅读回复

我和萨文打了一个肥皂电话。 这很好,并给出以下响应: string string 现在我想从响应中取出所有字符串元素。 但我无法让它发挥作用。 def query(params=nil) client = Savon::Client.new do wsdl.document = “http://www.kirupafx.com/WebService/TopMovies.asmx?wsdl” end response = client.request :get_top10 if response.success? xml = Nokogiri::XML(response.to_xml) print “Until here oké!” xml.search(‘//GetTop10Result’).each do |result| print “How are you Ruby?” @result[result.at(‘string’).inner_text] = result.at(‘string’).inner_text end else raise “Error!” end 但是他从来没有打印过我漂亮的“你是ruby怎么样?” 有人能帮助我吗? 我做错了什么?

搜索savon响应为nokogiri文档返回一个空数组

我尝试将savon的回复解析为nokokiri文件 c = Savon.client(wsdl: ‘http://test.fedresurs.ru/MessageService/WebService.svc?wsdl’, digest_auth: [‘demowebuser’, ‘Ax!761BN’], namespace: “http://tempuri.org/”, namespace_identifier: :tem, log: true) r = c.call(:get_trade_messages, message: {‘tem:startFrom’ => DateTime.now-1}) r.doc.search(“TradePlace”) 它返回一个空数组。 我做错了什么? 可能我应该以某种方式处理命名空间? 但是,怎么样? 我在nokogiri文档中找到的示例使用Xpath,而不是搜索。 即使使用Xpath,它也会返回一个空数组。 XML响应: