我正试图通过soap4r-gem使用soapweb服务。我正在使用
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)
我得到了回应。我在罗德斯也试过。
- 我在rhodes应用程序中添加了扩展文件夹
我在里面复制了soap、wsdl、xsd和标签文件夹我的系统中的
Ruby187librubygems1.8gemssoap4r-1.5.8lib
。我在build.yml文件中添加了soap作为扩展名
我需要以下
require 'soap/soap' require 'soap/wsdlDriver'
我得到了以下内容。
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
后只抛出一个错误。我不知道。如果你认识某人,请帮帮我
我也有同样的错误。按照这篇文章中的说明为我解决了问题:
在soap4r/xsd/charset.rb的开头@internal_encoding=(RUBY_VERSION.to_f>=1.9)?'UTF8':$KCODE
然后更改/soap4r-1.5.8/lib/xsd/xmlparser.rb中的第66行进入c.to_s.downcase==名称
更改行
c.downcase == name
至c.to_s.downcase==名称
在gems/soap4r-1.5.8/lib/xsd/xmlparser.rb中,第76行对我有用。可能是旧版本将符号视为字符串。。
我正在运行ruby-1.8。我也必须做name.downcase才能让它工作。c.to_s.downcase==名称.downcase