【问题标题】:Using SOAP and other Standard Libraries in Ruby 1.9.2在 Ruby 1.9.2 中使用 SOAP 和其他标准库
【发布时间】:2011-06-20 04:29:47
【问题描述】:

所以,我最近升级到 1.9.2 Ruby,一直使用 1.8.7(我想试用 Rails 3)。

我遇到的最大问题是我的 SOAP 要求语句都不起作用......我有类似的事情:

 require 'soap/rpc/driver'
 require 'xsd/qname'
 require 'soap/wsdlDriver'
 require 'ftools'

即使 ftools 也不起作用,但我认为(查看 Ruby 源代码)这变成了“fileutils”?但我没有看到 SOAP 有任何类似的东西.....它刚刚被删除了吗?

如果是这样……我该怎么办?是否有任何插件可以做本质上相同的事情?

我的代码是这样的:

 require 'soap/wsdlDriver'
     def send_package
     adi_url = "ftp://anonymous:ads123@#{APP_CONFIG['pcms_ip']}/#{self.id}/original/ADI.XML" 


     cl0 = SOAP::WSDLDriverFactory.new(APP_CONFIG['corba_bridge'])
     driver = cl0.create_rpc_driver
     driver.streamhandler.client.receive_timeout = 10
     x = driver.exportPackage2(self.name+self.id.to_s, adi_url, "NS2.PackageFactory")
     log x

     if x.to_s =~ /ERROR/
          raise x.to_s
     end
 end

 require 'soap/rpc/driver'
 require 'xsd/qname'
 def get_self_offering_ids(wsdl, namespace)
      ret = []
      input = {"#{namespace}:includeAssetMetadata" => 'true'}

      begin
           driver = SOAP::RPC::Driver.new(wsdl, namespace)
           driver.add_document_method('GetAllOfferingsRequest', "OpenStreamVOD#getAllOfferings", XSD::QName.new(namespace, "GetAllOfferingsRequest"), XSD::QName.new(namespace, "GetAllOfferingsResponse"))
           result = driver.GetAllOfferingsRequest(input)
      rescue => err
               log err                        
      end

      if result
           result.offering.each do |o|
                if offeringIsSelf?(o)
                   ret << o.xmlattr_offeringId
                end
           end 
      end

      return ret
 end

我没有太多的肥皂经验...我什至不确定 wsdlDriver 和 rpc/driver 有什么不同...只是当时我可能有充分的理由使用这两个独立的库?

【问题讨论】:

    标签: ruby soap ruby-1.9.2


    【解决方案1】:

    https://rubygems.org/gems/soap4r-ruby1.9

    gem 安装soap4r-ruby1.9

    这个 gem 用 ruby​​ 1.9 解决了我大部分与肥皂相关的问题

    【讨论】:

      【解决方案2】:

      如果你想继续使用 Ruby 1.8 的标准soap库(又名soap4r),你可以试试https://github.com/spox/soap4r-spox ...

      wget --no-check-certificate https://github.com/spox/soap4r-spox/tarball/1.5.8.4
      tar -xzf spox-soap4r-spox-1.5.8.4-0-g345a6cb.tar.gz
      cd spox-soap4r-spox-345a6cb/
      ruby setup.rb all
      

      如果您使用的是 rvm,不要 sudo 最后一个命令...而是 su 进入 root 并 rvm 进入 ruby​​ 1.9,以便 setup.rb 将文件放到正确的位置。

      $ irb
      ruby-1.9.2-p0 > require 'soap/rpc/driver'
       => true 
      ruby-1.9.2-p0 > require 'xsd/qname'
       => false 
      ruby-1.9.2-p0 > require 'soap/wsdlDriver'
       => true 
      ruby-1.9.2-p0 > require 'fileutils'
       => true 
      

      根据其他 StackOverflow answers 的建议,您可能想要切换到像 savon 这样的 gem。

      【讨论】:

      • “而不是 su 到 root 和 rvm 到 ruby​​ 1.9”。 Root 在正常的 RVM 配置中不会有“rvm”命令。 “rvm”命令将与用户的~/.rvm 沙箱隔离。此外,除非它是系统范围的 RVM 安装,否则 root 权限或"sudo" should never be used。所以要轻装上阵。
      • 谢谢。这对我很有用。
      【解决方案3】:

      如果你正在尝试使用 rails 3 更新你的 gem 文件

      gem 'soap4r', :git => 'git://github.com/felipec/soap4r.git'

      这是通过修复更新的。

      【讨论】:

        猜你喜欢
        • 2012-02-11
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多