diff options
Diffstat (limited to 'ruby_1_8_6/test/wsdl/marshal')
-rw-r--r-- | ruby_1_8_6/test/wsdl/marshal/person.wsdl | 21 | ||||
-rw-r--r-- | ruby_1_8_6/test/wsdl/marshal/person_org.rb | 22 | ||||
-rw-r--r-- | ruby_1_8_6/test/wsdl/marshal/test_wsdlmarshal.rb | 80 |
3 files changed, 123 insertions, 0 deletions
diff --git a/ruby_1_8_6/test/wsdl/marshal/person.wsdl b/ruby_1_8_6/test/wsdl/marshal/person.wsdl new file mode 100644 index 0000000000..6ea8a04825 --- /dev/null +++ b/ruby_1_8_6/test/wsdl/marshal/person.wsdl @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<definitions name="Person" + targetNamespace="http://www.jin.gr.jp/~nahi/xmlns/sample/Person" + xmlns:tns="http://www.jin.gr.jp/~nahi/xmlns/sample/Person" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns="http://schemas.xmlsoap.org/wsdl/"> + <types> + <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://www.jin.gr.jp/~nahi/xmlns/sample/Person"> + <complexType name="Person"> + <all> + <element name="familyname" type="xsd:string"/> + <element name="givenname" type="xsd:string"/> + <element name="var1" type="xsd:int"/> + <element name="var2" type="xsd:double"/> + <element name="var3" type="xsd:string"/> + </all> + </complexType> + </xsd:schema> + </types> +</definitions> diff --git a/ruby_1_8_6/test/wsdl/marshal/person_org.rb b/ruby_1_8_6/test/wsdl/marshal/person_org.rb new file mode 100644 index 0000000000..f8c0e0db76 --- /dev/null +++ b/ruby_1_8_6/test/wsdl/marshal/person_org.rb @@ -0,0 +1,22 @@ +require 'xsd/qname' + +# {http://www.jin.gr.jp/~nahi/xmlns/sample/Person}Person +class Person + @@schema_type = "Person" + @@schema_ns = "http://www.jin.gr.jp/~nahi/xmlns/sample/Person" + @@schema_element = [["familyname", ["SOAP::SOAPString", XSD::QName.new(nil, "familyname")]], ["givenname", ["SOAP::SOAPString", XSD::QName.new(nil, "givenname")]], ["var1", ["SOAP::SOAPInt", XSD::QName.new(nil, "var1")]], ["var2", ["SOAP::SOAPDouble", XSD::QName.new(nil, "var2")]], ["var3", ["SOAP::SOAPString", XSD::QName.new(nil, "var3")]]] + + attr_accessor :familyname + attr_accessor :givenname + attr_accessor :var1 + attr_accessor :var2 + attr_accessor :var3 + + def initialize(familyname = nil, givenname = nil, var1 = nil, var2 = nil, var3 = nil) + @familyname = familyname + @givenname = givenname + @var1 = var1 + @var2 = var2 + @var3 = var3 + end +end diff --git a/ruby_1_8_6/test/wsdl/marshal/test_wsdlmarshal.rb b/ruby_1_8_6/test/wsdl/marshal/test_wsdlmarshal.rb new file mode 100644 index 0000000000..cd2bdb198a --- /dev/null +++ b/ruby_1_8_6/test/wsdl/marshal/test_wsdlmarshal.rb @@ -0,0 +1,80 @@ +require 'test/unit' +require 'wsdl/parser' +require 'soap/mapping/wsdlencodedregistry' +require 'soap/marshal' +require 'wsdl/soap/wsdl2ruby' + +class WSDLMarshaller + include SOAP + + def initialize(wsdlfile) + wsdl = WSDL::Parser.new.parse(File.open(wsdlfile) { |f| f.read }) + types = wsdl.collect_complextypes + @opt = { + :decode_typemap => types, + :generate_explicit_type => false, + :pretty => true + } + @mapping_registry = Mapping::WSDLEncodedRegistry.new(types) + end + + def dump(obj, io = nil) + type = Mapping.class2element(obj.class) + ele = Mapping.obj2soap(obj, @mapping_registry, type) + ele.elename = ele.type + Processor.marshal(SOAPEnvelope.new(nil, SOAPBody.new(ele)), @opt, io) + end + + def load(io) + header, body = Processor.unmarshal(io, @opt) + Mapping.soap2obj(body.root_node) + end +end + + +require File.join(File.dirname(__FILE__), 'person_org') + +class Person + def ==(rhs) + @familyname == rhs.familyname and @givenname == rhs.givenname and + @var1 == rhs.var1 and @var2 == rhs.var2 and @var3 == rhs.var3 + end +end + + +class TestWSDLMarshal < Test::Unit::TestCase + DIR = File.dirname(File.expand_path(__FILE__)) + + def test_marshal + marshaller = WSDLMarshaller.new(pathname('person.wsdl')) + obj = Person.new("NAKAMURA", "Hiroshi", 1, 1.0, "1") + str = marshaller.dump(obj) + obj2 = marshaller.load(str) + assert_equal(obj, obj2) + assert_equal(str, marshaller.dump(obj2)) + end + + def test_classdef + gen = WSDL::SOAP::WSDL2Ruby.new + gen.location = pathname("person.wsdl") + gen.basedir = DIR + gen.logger.level = Logger::FATAL + gen.opt['classdef'] = nil + gen.opt['force'] = true + gen.run + compare("person_org.rb", "Person.rb") + File.unlink(pathname('Person.rb')) + end + + def compare(expected, actual) + assert_equal(loadfile(expected), loadfile(actual), actual) + end + + def loadfile(file) + File.open(pathname(file)) { |f| f.read } + end + + def pathname(filename) + File.join(DIR, filename) + end +end |