Rubyでwsdlを使う方法

soap4rのwsdl2rubyを使ってオブジェクト化するまではできた。
ただしhttpsから取得には失敗→モジュールの追加が必要?

wsdl2ruby.rb --wsdl http://xxxx.wsdl --classdef --force

WSDLのrequired等の情報が欲しいがこの方法では取得できなかったのでwsdl2rubyのソースを追っていくとWSDL::XMLSchema::Parserをつかえばできそう。
ソース解析にはココのサイトを参考にさせて頂きました。
有効なWikiNameではありません - Code Reading Wiki

require 'wsdl/xmlSchema/parser'
   opt = {
     :location => 'http://xxxxx?wsdl',
     :originalroot => nil
   }

WSDL::XMLSchema::Parser.new(opt).parse(File.read("c:/tool/wsdl.txt"))

これを実行すると下記のエラーが発生する。

C:/Program Files/ruby-1.8/lib/ruby/1.8/wsdl/xmlSchema/parser.rb:116:in
`decode_tag': unknown element:
{http://schemas.xmlsoap.org/wsdl/}definitions
(WSDL::XMLSchema::Parser::UnknownElementError)
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/wsdl/xmlSchema/parser.rb:82:in
`start_element'
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/xsd/xmlparser/parser.rb:67:in
`start_element'
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:34:in
`tag_start'
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/rexml/parsers/streamparser.rb:24:in
`parse'
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/rexml/document.rb:201:in `parse_stream'
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:27:in
`do_parse'
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/wsdl/xmlSchema/parser.rb:63:in `parse'
       from test.rb:142


からエラーが起きている「http://schemas.xmlsoap.org/wsdl/」を削除すると今度は別のエラーが発生する。

C:/Program Files/ruby-1.8/lib/ruby/1.8/rexml/parsers/baseparser.rb:389:in
`pull': Undefined prefix wsdl found
(REXML::UndefinedNamespaceException)
       from C:/Program Files/ruby-1.8/lib/ruby/1.8/set.rb:195:in `each'
       from C:/Program Files/ruby-1.8/lib/ruby/1.8/set.rb:195:in `each_key'
       from C:/Program Files/ruby-1.8/lib/ruby/1.8/set.rb:195:in `each'
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/rexml/parsers/baseparser.rb:387:in `pull'
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/rexml/parsers/treeparser.rb:22:in `parse'
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/rexml/document.rb:227:in `build'
       from C:/Program
Files/ruby-1.8/lib/ruby/1.8/rexml/document.rb:43:in `initialize'
       from test.rb:69:in `new'
       from test.rb:69:in `read'
       from test.rb:114

結局ダメそうなのでREXML::Documentを使ってXMLをDom解析して取り出すことにトホホ

doc = REXML::Document.new(File.read(path)) 
doc.elements.each('wsdl:definitions/wsdl:types/xs:schema/xs:complexType') {|x|
   ....
}