bin/wsdl2ruby.rb
#!/usr/bin/env ruby
# encoding: UTF-8
$:.unshift File.join(File.dirname(__FILE__),'../lib') if ENV['DEBUG_SOAP4R']
require 'getoptlong'
require 'logger'
require 'logger-application' unless defined?(Logger::Application)
require 'wsdl/soap/wsdl2ruby'
class WSDL2RubyApp < Logger::Application
private
OptSet = [
['--wsdl','-w', GetoptLong::REQUIRED_ARGUMENT],
['--module_path','-m', GetoptLong::REQUIRED_ARGUMENT],
['--type','-t', GetoptLong::REQUIRED_ARGUMENT],
['--classdef','-e', GetoptLong::OPTIONAL_ARGUMENT],
['--mapping_registry','-r', GetoptLong::NO_ARGUMENT],
['--client_skelton','-c', GetoptLong::OPTIONAL_ARGUMENT],
['--servant_skelton','-s', GetoptLong::OPTIONAL_ARGUMENT],
['--cgi_stub','-g', GetoptLong::OPTIONAL_ARGUMENT],
['--servlet_stub','-l', GetoptLong::OPTIONAL_ARGUMENT],
['--standalone_server_stub','-a', GetoptLong::OPTIONAL_ARGUMENT],
['--driver','-d', GetoptLong::OPTIONAL_ARGUMENT],
['--drivername_postfix','-n', GetoptLong::REQUIRED_ARGUMENT],
['--force','-f', GetoptLong::NO_ARGUMENT],
['--quiet','-q', GetoptLong::NO_ARGUMENT],
]
def initialize
super('app')
STDERR.sync = true
self.level = Logger::FATAL
end
def run
@worker = WSDL::SOAP::WSDL2Ruby.new
@worker.logger = @log
location, opt = parse_opt(GetoptLong.new(*OptSet))
usage_exit unless location
@worker.location = location
if opt['quiet']
self.level = Logger::FATAL
else
self.level = Logger::INFO
end
@worker.opt.update(opt)
@worker.run
0
end
def usage_exit
puts <<__EOU__
Usage: #{ $0 } --wsdl wsdl_location [options]
wsdl_location: filename or URL
Example:
For server side:
#{ $0 } --wsdl myapp.wsdl --type server
For client side:
#{ $0 } --wsdl myapp.wsdl --type client
Options:
--wsdl wsdl_location
--type server|client
--type server implies;
--classdef --mapping_registry --servant_skelton --standalone_server_stub
--type client implies;
--classdef --mapping_registry --client_skelton --driver
--classdef [filenameprefix]
--mapping_registry
--client_skelton [servicename]
--servant_skelton [porttypename]
--cgi_stub [servicename]
--servlet_stub [servicename]
--standalone_server_stub [servicename]
--driver [porttypename]
--drivername_postfix driver_classname_postfix
--module_path Module::Path::Name
--force
--quiet
Terminology:
Client <-> Driver <-(SOAP)-> Stub <-> Servant
Driver and Stub: Automatically generated
Client and Servant: Skelton generated (you should change)
__EOU__
exit 1
end
def parse_opt(getoptlong)
opt = {}
wsdl = nil
begin
getoptlong.each do |name, arg|
case name
when "--wsdl"
wsdl = arg
when "--module_path"
opt['module_path'] = arg
when "--type"
case arg
when "server"
opt['classdef'] ||= nil
opt['mapping_registry'] ||= nil
opt['servant_skelton'] ||= nil
opt['standalone_server_stub'] ||= nil
when "client"
opt['classdef'] ||= nil
opt['mapping_registry'] ||= nil
opt['driver'] ||= nil
opt['client_skelton'] ||= nil
else
raise ArgumentError.new("Unknown type #{ arg }")
end
when "--classdef", "--mapping_registry",
"--client_skelton", "--servant_skelton",
"--cgi_stub", "--servlet_stub", "--standalone_server_stub",
"--driver"
opt[name.sub(/^--/, '')] = arg.empty? ? nil : arg
when "--drivername_postfix"
opt['drivername_postfix'] = arg
when "--force"
opt['force'] = true
when "--quiet"
opt['quiet'] = true
else
raise ArgumentError.new("Unknown type #{ arg }")
end
end
rescue
usage_exit
end
return wsdl, opt
end
end
WSDL2RubyApp.new.start