Changeset 1857
- Timestamp:
- 06/19/07 23:21:24 (1 year ago)
- Files:
-
- trunk/bin/xsd2ruby.rb (modified) (3 diffs)
- trunk/lib/soap/baseData.rb (modified) (1 diff)
- trunk/lib/soap/mapping/literalregistry.rb (modified) (1 diff)
- trunk/lib/wsdl/xmlSchema/xsd2ruby.rb (modified) (4 diffs)
- trunk/lib/xsd/mapping.rb (modified) (1 diff)
- trunk/test/wsdl/soap/wsdl2ruby/section/test_section.rb (modified) (1 diff)
- trunk/test/xsd/xsd2ruby (added)
- trunk/test/xsd/xsd2ruby/expected_mysample.rb (added)
- trunk/test/xsd/xsd2ruby/expected_mysample_mapper.rb (added)
- trunk/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb (added)
- trunk/test/xsd/xsd2ruby/section.xsd (added)
- trunk/test/xsd/xsd2ruby/test_xsd2ruby.rb (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/bin/xsd2ruby.rb
r1437 r1857 11 11 OptSet = [ 12 12 ['--xsd','-x', GetoptLong::REQUIRED_ARGUMENT], 13 ['--classname','-n', GetoptLong::NO_ARGUMENT], 13 ['--module_path','-m', GetoptLong::REQUIRED_ARGUMENT], 14 ['--classdef','-e', GetoptLong::OPTIONAL_ARGUMENT], 15 ['--mapping_registry','-r', GetoptLong::NO_ARGUMENT], 16 ['--mapper','-p', GetoptLong::NO_ARGUMENT], 14 17 ['--force','-f', GetoptLong::NO_ARGUMENT], 15 18 ['--quiet','-q', GetoptLong::NO_ARGUMENT], … … 44 47 45 48 Example: 46 #{ $0 } --xsd myapp.xsd --class name Foo49 #{ $0 } --xsd myapp.xsd --classdef foo 47 50 48 51 Options: 49 52 --xsd xsd_location 50 --classname classname 53 --classdef [filenameprefix] 54 --mapping_registry 55 --mapper 56 --module_path [Module::Path::Name] 51 57 --force 52 58 --quiet … … 63 69 when "--xsd" 64 70 xsd = arg 65 when "--classname" 71 when "--module_path" 72 opt['module_path'] = arg 73 when "--classdef", "--mapping_registry", "--mapper" 66 74 opt[name.sub(/^--/, '')] = arg.empty? ? nil : arg 67 75 when "--force" trunk/lib/soap/baseData.rb
r1846 r1857 581 581 def initialize(elename, text = nil) 582 582 super() 583 if !elename.is_a?(XSD::QName) 583 if elename.nil? 584 elename = XSD::QName::EMPTY 585 elsif !elename.is_a?(XSD::QName) 584 586 elename = XSD::QName.new(nil, elename) 585 587 end trunk/lib/soap/mapping/literalregistry.rb
r1853 r1857 127 127 if definition.type 128 128 ele.extraattr[XSD::AttrTypeName] = definition.type 129 end 130 if qname.nil? and definition.elename 131 ele.elename = definition.elename 129 132 end 130 133 stubobj2soap_elements(obj, ele, definition.elements) trunk/lib/wsdl/xmlSchema/xsd2ruby.rb
r1824 r1857 10 10 require 'wsdl/xmlSchema/importer' 11 11 require 'wsdl/soap/classDefCreator' 12 require 'wsdl/soap/literalMappingRegistryCreator' 13 require 'logger' 12 14 13 15 … … 27 29 end 28 30 @xsd = import(@location) 29 @name = create_classname(@xsd)31 @name = @opt['classdef'] || create_classname(@xsd) 30 32 create_file 31 33 end … … 43 45 44 46 def create_file 45 create_classdef 47 @modulepath = @opt['module_path'] 48 create_classdef if @opt.key?('classdef') 49 create_mapping_registry if @opt.key?('mapping_registry') 50 create_mapper if @opt.key?('mapper') 46 51 end 47 52 … … 51 56 check_file(@classdef_filename) or return 52 57 write_file(@classdef_filename) do |f| 53 f << WSDL::SOAP::ClassDefCreator.new(@xsd ).dump58 f << WSDL::SOAP::ClassDefCreator.new(@xsd, @modulepath).dump 54 59 end 60 end 61 62 def create_mapping_registry 63 @logger.info { "Creating mapping registry definition." } 64 @mr_filename = @name + '_mapping_registry.rb' 65 check_file(@mr_filename) or return 66 write_file(@mr_filename) do |f| 67 f << dump_mapping_registry 68 end 69 end 70 71 def create_mapper 72 @logger.info { "Creating mapper definition." } 73 @mapper_filename = @name + '_mapper.rb' 74 check_file(@mapper_filename) or return 75 write_file(@mapper_filename) do |f| 76 f << dump_mapper 77 end 78 end 79 80 def dump_mapping_registry 81 creator = WSDL::SOAP::LiteralMappingRegistryCreator.new(@xsd, @modulepath) 82 module_name = XSD::CodeGen::GenSupport.safeconstname( 83 @name + 'MappingRegistry') 84 if @modulepath 85 module_name = [@modulepath, module_name].join('::') 86 end 87 m = XSD::CodeGen::ModuleDef.new(module_name) 88 m.def_require("xsd/mapping") 89 m.def_require("#{@classdef_filename}") 90 varname = 'Registry' 91 m.def_const(varname, '::SOAP::Mapping::LiteralRegistry.new') 92 m.def_code(creator.dump(varname)) 93 m.dump 94 end 95 96 def dump_mapper 97 class_name = XSD::CodeGen::GenSupport.safeconstname(@name + 'Mapper') 98 if @modulepath 99 class_name = [@modulepath, class_name].join('::') 100 end 101 mr_name = XSD::CodeGen::GenSupport.safeconstname(@name + 'MappingRegistry') 102 c = XSD::CodeGen::ClassDef.new(class_name, 'XSD::Mapping::Mapper') 103 c.def_require("#{@mr_filename}") 104 c.def_method("initialize") do 105 "super(#{mr_name}::Registry)" 106 end 107 c.dump 55 108 end 56 109 trunk/lib/xsd/mapping.rb
r1824 r1857 19 19 module Mapping 20 20 MappingRegistry = SOAP::Mapping::LiteralRegistry.new 21 MappingOpt = {:default_encodingstyle => SOAP::LiteralNamespace}22 21 23 22 def self.obj2xml(obj, elename = nil, io = nil) 24 if !elename.nil? and !elename.is_a?(XSD::QName) 25 elename = XSD::QName.new(nil, elename) 26 end 27 elename ||= XSD::QName.new(nil, SOAP::Mapping.name2elename(obj.class.to_s)) 28 soap = SOAP::Mapping.obj2soap(obj, MappingRegistry) 29 soap.elename = elename 30 generator = SOAP::SOAPGenerator.new(MappingOpt) 31 generator.generate(soap, io) 23 Mapper.new(MappingRegistry).obj2xml(obj, elename, io) 32 24 end 33 25 34 def self.xml2obj(stream) 35 parser = SOAP::Parser.new(MappingOpt) 36 soap = parser.parse(stream) 37 SOAP::Mapping.soap2obj(soap, MappingRegistry) 26 def self.xml2obj(stream, klass = nil) 27 Mapper.new(MappingRegistry).xml2obj(stream, klass) 28 end 29 30 class Mapper 31 MAPPING_OPT = {:default_encodingstyle => SOAP::LiteralNamespace} 32 33 def initialize(registry) 34 @registry = registry 35 end 36 37 def obj2xml(obj, elename = nil, io = nil) 38 if !elename.nil? and !elename.is_a?(XSD::QName) 39 elename = XSD::QName.new(nil, elename) 40 end 41 soap = SOAP::Mapping.obj2soap(obj, @registry, elename) 42 if soap.elename == XSD::QName::EMPTY 43 soap.elename = 44 XSD::QName.new(nil, SOAP::Mapping.name2elename(obj.class.to_s)) 45 end 46 generator = SOAP::SOAPGenerator.new(MAPPING_OPT) 47 generator.generate(soap, io) 48 end 49 50 def xml2obj(stream, klass = nil) 51 parser = SOAP::Parser.new(MAPPING_OPT) 52 soap = parser.parse(stream) 53 SOAP::Mapping.soap2obj(soap, @registry, klass) 54 end 38 55 end 39 56 end trunk/test/wsdl/soap/wsdl2ruby/section/test_section.rb
r1794 r1857 13 13 14 14 def setup 15 system("cd #{DIR} && #{RUBY} #{pathname("../../../../../bin/xsd2ruby.rb")} --xsd #{pathname("section.xsd")} -- force --quiet")15 system("cd #{DIR} && #{RUBY} #{pathname("../../../../../bin/xsd2ruby.rb")} --xsd #{pathname("section.xsd")} --classdef --force --quiet") 16 16 end 17 17