尝试使用soap4r使用soap服务时,未找到Xml处理器模块错误

时间:2012-01-25 05:58:49

标签: ruby soap rhodes

我正在尝试使用soap4r gem来使用soap web服务。我正在使用

ryby 1.8.7
rails 2.3.4
soap4r 1.5.8
rhodes 3.2.3

我在IRB中尝试了以下内容。

require "rubygems"
require "soap/wsdlDriver"


wsdl = "http://www.w3schools.com/webservices/tempconvert.asmx?wsdl"
driver = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver

driver.wiredump_dev = STDOUT

params = {
"Celsius" => 32
}

driver.CelsiusToFahrenheit(params)

我收到了回复。 我在罗得岛尝试过同样的事情。

  1. 我在rhodes app中添加了extensions文件夹。
  2. 我复制了soap,wsdl,xsd和tags文件夹 我系统中\Ruby187\lib\ruby\gems\1.8\gems\soap4r-1.5.8\lib

  3. 我在build.yml文件中添加了soap作为扩展名

  4. 我需要以下

    require 'soap/soap'
    require 'soap/wsdlDriver'
    
  5. 我得到以下内容。

    I 01/25/2012 11:07:08:059 000015ac              RhoRuby| require_compiled: Product/product_controller
    I 01/25/2012 11:07:08:060 000015ac              RhoRuby| require_compiled: soap/soap
    I 01/25/2012 11:07:08:062 000015ac              RhoRuby| require_compiled: xsd/qname
    I 01/25/2012 11:07:08:063 000015ac              RhoRuby| require_compiled: xsd/charset
    I 01/25/2012 11:07:08:065 000015ac              RhoRuby| require_compiled: xsd/iconvcharset
    E 01/25/2012 11:07:08:066 000015ac              RhoRuby| require_compiled: error: can not find iconv
    E 01/25/2012 11:07:08:067 000015ac              RhoRuby| require_compiled: error: can not find nkf
    E 01/25/2012 11:07:08:067 000015ac              RhoRuby| require_compiled: error: can not find uconv
    I 01/25/2012 11:07:08:067 000015ac              RhoRuby| require_compiled: soap/nestedexception
    I 01/25/2012 11:07:08:069 000015ac              RhoRuby| require_compiled: soap/wsdlDriver
    I 01/25/2012 11:07:08:074 000015ac              RhoRuby| require_compiled: wsdl/parser
    I 01/25/2012 11:07:08:076 000015ac              RhoRuby| require_compiled: xsd/datatypes
    I 01/25/2012 11:07:08:085 000015ac              RhoRuby| require_compiled: date
    I 01/25/2012 11:07:08:086 000015ac              RhoRuby| require_compiled: dateOrig
    I 01/25/2012 11:07:08:100 000015ac              RhoRuby| require_compiled: date/format
    

    I 01/25/2012 11:07:08:112 000015ac              RhoRuby| require_compiled: xsd/xmlparser
    I 01/25/2012 11:07:08:114 000015ac              RhoRuby| require_compiled: xsd/xmlparser/parser
    I 01/25/2012 11:07:08:115 000015ac              RhoRuby| require_compiled: xsd/ns
    I 01/25/2012 11:07:08:117 000015ac              RhoRuby| require_compiled: xsd/xmlparser/xmlparser
    E 01/25/2012 11:07:08:118 000015ac              RhoRuby| require_compiled: error: can not find xml/parser
    I 01/25/2012 11:07:08:118 000015ac              RhoRuby| require_compiled: xsd/xmlparser/xmlscanner
    E 01/25/2012 11:07:08:120 000015ac              RhoRuby| require_compiled: error: can not find xmlscan/scanner
    I 01/25/2012 11:07:08:120 000015ac              RhoRuby| require_compiled: xsd/xmlparser/rexmlparser
    E 01/25/2012 11:07:08:121 000015ac              RhoRuby| require_compiled: error: can not find rexml/streamlistener
    I 01/25/2012 11:07:08:121 000015ac                  APP| App error: XML processor module not found.
     C:/Spritle/Projects/mobile_projects/netHTTPtrial/extensions/soap/xsd/xmlparser.rb:74:in `<top (required)>'
    C:/Spritle/Projects/mobile_projects/netHTTPtrial/extensions/soap/wsdl/parser.rb:12:in `require'
    C:/Spritle/Projects/mobile_projects/netHTTPtrial/extensions/soap/wsdl/parser.rb:12:in `<top (required)>'
    C:/Spritle/Projects/mobile_projects/netHTTPtrial/extensions/soap/soap/wsdlDriver.rb:9:in `require'
    C:/Spritle/Projects/mobile_projects/netHTTPtrial/extensions/soap/soap/wsdlDriver.rb:9:in `<top (required)>'
    C:/Spritle/Projects/mobile_projects/netHTTPtrial/app/Product/product_controller.rb:3:in `require'
    C:/Spritle/Projects/mobile_projects/netHTTPtrial/app/Product/product_controller.rb:3:in `<top (required)>'
    

    调用xmlParser后只会抛出错误。我什么都不知道。 如果你认识某人请帮助我。

3 个答案:

答案 0 :(得分:6)

我有同样的错误。按照this post中的说明解决了我的问题:

在soap4r / xsd / charset.rb的开头 @internal_encoding =(RUBY_VERSION.to_f&gt; = 1.9)? 'UTF8':$ KCODE

然后在/soap4r-1.5.8/lib/xsd/xmlparser.rb中更改第66行 成 c.to_s.downcase == name

答案 1 :(得分:1)

更改行

  c.downcase == name

要       c.to_s.downcase == name

在gems / soap4r-1.5.8 / lib / xsd / xmlparser.rb中,line76为我工作。可能是旧版本将符号视为字符串..

答案 2 :(得分:0)

我正在运行ruby-1.8。 我不得不做name.downcase以使这个工作。 c.to_s.downcase == name.downcase