diff options
author | nahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-09-15 14:33:53 +0000 |
---|---|---|
committer | nahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-09-15 14:33:53 +0000 |
commit | 29c5ab0b77feaf975d83ab340d7194c9c4dffc9d (patch) | |
tree | 6ac40e3bffcf1735c8b7efc0f412bccc15befa6a /test/wsdl/any | |
parent | 071c45df939e962e8cd6ecc51bd402b6a7cc91f6 (diff) | |
download | ruby-29c5ab0b77feaf975d83ab340d7194c9c4dffc9d.tar.gz |
* lib/{soap,wsdl,xsd}, test/{soap,wsdl,xsd}: imported soap4r/1.5.5.
#nnn is a ticket number at http://dev.ctor.org/soap4r
* SOAP
* allow to configure an envelope namespace of SOAP request. (#124)
TemporaryNamespace = 'http://www.w3.org/2003/05/soap-envelope'
@client.options["soap.envelope.requestnamespace"] =
TemporaryNamespace
@client.options["soap.envelope.responsenamespace"] =
TemporaryNamespace
@client.do_proc(...)
* let SOAP request XML indent space configuable. see
"soap.envelope.no_indent" option. (#130)
* let external CES configuable.
ex. client["soap.mapping.external_ces"] = 'SJIS'. $KCODE is used
by default. (#133)
external CES ::= CES used in Ruby object of client and server
internal CES ::= CES used in SOAP/OM
* add iso-8859-1 external CES support. (#106)
* fixed illegal 'qualified' handling of elements. it caused
ASP.NET inteoperability problem. (#144)
* added 'soap.envelope.use_numeric_character_reference' (boolean)
option to let query XML use numeric character reference in XML,
not plain UTF-8 character. !GoogleSearch server seems to not
allow plain UTF-8 character since 2005-08-15 update. (#147)
* SOAP::Header::SimpleHeader (de)serialization throws an exception
on !SimpleHeader.on_(in|out)bound when header is a String. so we
could not use a simple single element headerItem. fixed. thanks
to emil. (#129)
* out parameter of rpc operation did not work. (#132)
* follow HTTP redirect only if using http-access2. (#125) (#145)
* add a workaround for importing an WSDL whose path begins with
drive letter. (#115)
* WSDL
* SOAP Data which is defined as a simpletype was not mapped
correctly to Ruby obj when using wsdl2ruby.rb generated classdef
file. (#123)
* rpc/literal support. (#118)
* re-implemented local element qualify/unqualify control. handles
elementFormDefault and form in WSDL. (#119)
* Array of an element which has simpleType causes a crash. (#128)
* prarmeterOrder may not contain return part so it can be shorter
than parts size. Thanks to Hugh. (#139)
* Samples
* added !BasicAuth client sample. (#117)
* added Base64 client/server sample.
* added Flickr SOAP interface client sample. (#122)
* added !SalesForce client sample. (#135)
* updated Thawte CA certificate for !GoogleAdWords sample.
* updated a client script with the newer version made by Johan.
thanks!
* shortened long file names. (#120)
* fixed typo in authheader sample. (#129)
* updated deprecated method usage. (#138)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9169 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/wsdl/any')
-rw-r--r-- | test/wsdl/any/any.wsdl | 50 | ||||
-rw-r--r-- | test/wsdl/any/expectedDriver.rb | 54 | ||||
-rw-r--r-- | test/wsdl/any/expectedEcho.rb | 14 | ||||
-rw-r--r-- | test/wsdl/any/expectedService.rb | 52 | ||||
-rw-r--r-- | test/wsdl/any/test_any.rb | 46 |
5 files changed, 216 insertions, 0 deletions
diff --git a/test/wsdl/any/any.wsdl b/test/wsdl/any/any.wsdl new file mode 100644 index 0000000000..4d1f73a8cd --- /dev/null +++ b/test/wsdl/any/any.wsdl @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8"?> +<definitions name="echo" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:tns="urn:example.com:echo" + xmlns:txd="urn:example.com:echo-type" + targetNamespace="urn:example.com:echo" + xmlns="http://schemas.xmlsoap.org/wsdl/"> + <types> + <xsd:schema targetNamespace="urn:example.com:echo-type"> + <xsd:complexType name="foo.bar"> + <xsd:sequence> + <xsd:any /> + </xsd:sequence> + </xsd:complexType> + </xsd:schema> + </types> + + <message name="msg_echoitem"> + <part name="echoitem" type="txd:foo.bar"/> + </message> + + <portType name="echo_port_type"> + <operation name="echo"> + <input message="tns:msg_echoitem"/> + <output message="tns:msg_echoitem"/> + </operation> + </portType> + + <binding name="echo_binding" type="tns:echo_port_type"> + <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/> + <operation name="echo"> + <soap:operation soapAction="urn:example.com:echo"/> + <input> + <soap:body use="encoded" namespace="urn:example.com:echo" + encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </input> + <output> + <soap:body use="encoded" namespace="urn:example.com:echo" + encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + </output> + </operation> + </binding> + + <service name="echo_service"> + <port name="echo_port" binding="tns:echo_binding"> + <soap:address location="http://localhost:10080"/> + </port> + </service> +</definitions> diff --git a/test/wsdl/any/expectedDriver.rb b/test/wsdl/any/expectedDriver.rb new file mode 100644 index 0000000000..6d1827fb94 --- /dev/null +++ b/test/wsdl/any/expectedDriver.rb @@ -0,0 +1,54 @@ +require 'echo.rb' + +require 'soap/rpc/driver' + +class Echo_port_type < ::SOAP::RPC::Driver + DefaultEndpointUrl = "http://localhost:10080" + MappingRegistry = ::SOAP::Mapping::Registry.new + + MappingRegistry.set( + FooBar, + ::SOAP::SOAPStruct, + ::SOAP::Mapping::Registry::TypedStructFactory, + { :type => XSD::QName.new("urn:example.com:echo-type", "foo.bar") } + ) + + Methods = [ + [ XSD::QName.new("urn:example.com:echo", "echo"), + "urn:example.com:echo", + "echo", + [ ["in", "echoitem", ["FooBar", "urn:example.com:echo-type", "foo.bar"]], + ["retval", "echoitem", ["FooBar", "urn:example.com:echo-type", "foo.bar"]] ], + { :request_style => :rpc, :request_use => :encoded, + :response_style => :rpc, :response_use => :encoded } + ] + ] + + def initialize(endpoint_url = nil) + endpoint_url ||= DefaultEndpointUrl + super(endpoint_url, nil) + self.mapping_registry = MappingRegistry + init_methods + end + +private + + def init_methods + Methods.each do |definitions| + opt = definitions.last + if opt[:request_style] == :document + add_document_operation(*definitions) + else + add_rpc_operation(*definitions) + qname = definitions[0] + name = definitions[2] + if qname.name != name and qname.name.capitalize == name.capitalize + ::SOAP::Mapping.define_singleton_method(self, qname.name) do |*arg| + __send__(name, *arg) + end + end + end + end + end +end + diff --git a/test/wsdl/any/expectedEcho.rb b/test/wsdl/any/expectedEcho.rb new file mode 100644 index 0000000000..456950dfef --- /dev/null +++ b/test/wsdl/any/expectedEcho.rb @@ -0,0 +1,14 @@ +require 'xsd/qname' + +# {urn:example.com:echo-type}foo.bar +class FooBar + @@schema_type = "foo.bar" + @@schema_ns = "urn:example.com:echo-type" + @@schema_element = [["any", [nil, XSD::QName.new(nil, "any")]]] + + attr_accessor :any + + def initialize(any = nil) + @any = any + end +end diff --git a/test/wsdl/any/expectedService.rb b/test/wsdl/any/expectedService.rb new file mode 100644 index 0000000000..e3885e7c6c --- /dev/null +++ b/test/wsdl/any/expectedService.rb @@ -0,0 +1,52 @@ +#!/usr/bin/env ruby +require 'echoServant.rb' + +require 'soap/rpc/standaloneServer' +require 'soap/mapping/registry' + +class Echo_port_type + MappingRegistry = ::SOAP::Mapping::Registry.new + + MappingRegistry.set( + FooBar, + ::SOAP::SOAPStruct, + ::SOAP::Mapping::Registry::TypedStructFactory, + { :type => XSD::QName.new("urn:example.com:echo-type", "foo.bar") } + ) + + Methods = [ + [ XSD::QName.new("urn:example.com:echo", "echo"), + "urn:example.com:echo", + "echo", + [ ["in", "echoitem", ["FooBar", "urn:example.com:echo-type", "foo.bar"]], + ["retval", "echoitem", ["FooBar", "urn:example.com:echo-type", "foo.bar"]] ], + { :request_style => :rpc, :request_use => :encoded, + :response_style => :rpc, :response_use => :encoded } + ] + ] +end + +class Echo_port_typeApp < ::SOAP::RPC::StandaloneServer + def initialize(*arg) + super(*arg) + servant = Echo_port_type.new + Echo_port_type::Methods.each do |definitions| + opt = definitions.last + if opt[:request_style] == :document + @router.add_document_operation(servant, *definitions) + else + @router.add_rpc_operation(servant, *definitions) + end + end + self.mapping_registry = Echo_port_type::MappingRegistry + end +end + +if $0 == __FILE__ + # Change listen port. + server = Echo_port_typeApp.new('app', nil, '0.0.0.0', 10080) + trap(:INT) do + server.shutdown + end + server.start +end diff --git a/test/wsdl/any/test_any.rb b/test/wsdl/any/test_any.rb new file mode 100644 index 0000000000..7b0e480be9 --- /dev/null +++ b/test/wsdl/any/test_any.rb @@ -0,0 +1,46 @@ +require 'test/unit' +require 'wsdl/parser' +require 'wsdl/soap/wsdl2ruby' +module WSDL; module Any + + +class TestAny < Test::Unit::TestCase + DIR = File.dirname(File.expand_path(__FILE__)) + def pathname(filename) + File.join(DIR, filename) + end + + def test_any + gen = WSDL::SOAP::WSDL2Ruby.new + gen.location = pathname("any.wsdl") + gen.basedir = DIR + gen.logger.level = Logger::FATAL + gen.opt['classdef'] = nil + gen.opt['driver'] = nil + gen.opt['client_skelton'] = nil + gen.opt['servant_skelton'] = nil + gen.opt['standalone_server_stub'] = nil + gen.opt['force'] = true + gen.run + compare("expectedDriver.rb", "echoDriver.rb") + compare("expectedEcho.rb", "echo.rb") + compare("expectedService.rb", "echo_service.rb") + + File.unlink(pathname("echo_service.rb")) + File.unlink(pathname("echo.rb")) + File.unlink(pathname("echo_serviceClient.rb")) + File.unlink(pathname("echoDriver.rb")) + File.unlink(pathname("echoServant.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 +end + + +end; end |