1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/soap/streamHandler.rb: drop unused http parameters.

* lib/soap/encodingstyle/soapHandler.rb, lib/soap/mapping/factory.rb,
  lib/soap/mapping/mapping.rb, lib/soap/mapping/registry.rb,
  lib/wsdl/soap/complexType.rb: ApacheSOAP's map support was broken under WSDL
  dynanic client environment.  fixed.

* test/wsdl/raa/*: add tests.

* lib/xsd/datatypes.rb: dateTime precision bug fix (at least, I hope.)  bug of
  soap4r.  XSDDateTimeImple.to_time passed a Float to Time.local/Time.gm as an
  usec, and NUM2LONG(rb_num2long for Float) causes rounding error.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5045 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nahi 2003-11-28 05:53:16 +00:00
parent a017b0cc8a
commit 42bca643c3
18 changed files with 256 additions and 95 deletions

View file

@ -1,3 +1,21 @@
Fri Nov 28 14:41:52 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
* lib/soap/streamHandler.rb: drop unused http parameters.
* lib/soap/encodingstyle/soapHandler.rb, lib/soap/mapping/factory.rb,
lib/soap/mapping/mapping.rb, lib/soap/mapping/registry.rb,
lib/wsdl/soap/complexType.rb: ApacheSOAP's map support was broken
under WSDL dynanic client environment. fixed.
* test/wsdl/raa/*: add tests.
* lib/xsd/datatypes.rb: dateTime precision bug fix (at least, I hope.)
bug of soap4r. XSDDateTimeImple.to_time passed a Float to
Time.local/Time.gm as an usec, and NUM2LONG(rb_num2long for Float)
causes rounding error.
* test/soap/test_basetype.rb, test/xsd/test_xsd.rb: add tests.
Fri Nov 28 04:15:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org> Fri Nov 28 04:15:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
* eval.c (method_arity): used wrong Proc object. [ruby-talk:86504] * eval.c (method_arity): used wrong Proc object. [ruby-talk:86504]

View file

@ -731,8 +731,9 @@ test/wsdl/axisArray/test_axisarray.rb
test/wsdl/emptycomplextype.wsdl test/wsdl/emptycomplextype.wsdl
test/wsdl/raa/RAA.rb test/wsdl/raa/RAA.rb
test/wsdl/raa/README.txt test/wsdl/raa/README.txt
test/wsdl/raa/RAAServant.rb
test/wsdl/raa/RAAService.rb
test/wsdl/raa/raa.wsdl test/wsdl/raa/raa.wsdl
test/wsdl/raa/server.rb
test/wsdl/raa/test_raa.rb test/wsdl/raa/test_raa.rb
test/wsdl/test_emptycomplextype.rb test/wsdl/test_emptycomplextype.rb
test/xsd/test_xmlschemaparser.rb test/xsd/test_xmlschemaparser.rb

View file

@ -162,8 +162,6 @@ class SOAPHandler < Handler
o = SOAPReference.decode(elename, href) o = SOAPReference.decode(elename, href)
@refpool << o @refpool << o
elsif @decode_typemap elsif @decode_typemap
# to parse multi-ref element with decode_tag_by_type.
# && (parent.node.class != SOAPBody || @is_first_top_ele)
o = decode_tag_by_wsdl(ns, elename, type, parent.node, arytype, extraattr) o = decode_tag_by_wsdl(ns, elename, type, parent.node, arytype, extraattr)
else else
o = decode_tag_by_type(ns, elename, type, parent.node, arytype, extraattr) o = decode_tag_by_type(ns, elename, type, parent.node, arytype, extraattr)
@ -333,6 +331,7 @@ private
def decode_tag_by_wsdl(ns, elename, typestr, parent, arytypestr, extraattr) def decode_tag_by_wsdl(ns, elename, typestr, parent, arytypestr, extraattr)
o = nil o = nil
# should branch by root attribute?
if parent.class == SOAPBody if parent.class == SOAPBody
if @is_first_top_ele if @is_first_top_ele
# Unqualified name is allowed here. # Unqualified name is allowed here.
@ -363,11 +362,12 @@ private
extraattr) extraattr)
end end
# parent.definedtype is nil means the parent is SOAPUnknown. SOAPUnknown is # parent.definedtype == nil means the parent is SOAPUnknown. SOAPUnknown
# generated by decode_tag_by_type when its type is anyType. # is generated by decode_tag_by_type when its type is anyType.
parenttype = parent.definedtype || @decode_typemap[parent.type] parenttype = parent.definedtype || @decode_typemap[parent.type]
unless parenttype unless parenttype
raise EncodingStyleError.new("Unknown type '#{ parent.type }'.") return decode_tag_by_type(ns, elename, typestr, parent, arytypestr,
extraattr)
end end
definedtype_name = parenttype.child_type(elename) definedtype_name = parenttype.child_type(elename)

View file

@ -356,15 +356,22 @@ class HashFactory_ < Factory
unless node.type == MapQName unless node.type == MapQName
return false return false
end end
if node.key?('default') if node.class == SOAPStruct and node.key?('default')
return false return false
end end
obj = create_empty_object(obj_class) obj = create_empty_object(obj_class)
mark_unmarshalled_obj(node, obj) mark_unmarshalled_obj(node, obj)
if node.class == SOAPStruct
node.each do |key, value| node.each do |key, value|
obj[Mapping._soap2obj(value['key'], map)] = obj[Mapping._soap2obj(value['key'], map)] =
Mapping._soap2obj(value['value'], map) Mapping._soap2obj(value['value'], map)
end end
else
node.each do |value|
obj[Mapping._soap2obj(value['key'], map)] =
Mapping._soap2obj(value['value'], map)
end
end
return true, obj return true, obj
end end
end end

View file

@ -77,9 +77,10 @@ module Mapping
end end
if detail.is_a?(Mapping::SOAPException) if detail.is_a?(Mapping::SOAPException)
begin begin
remote_backtrace = detail.to_e.backtrace
raise detail.to_e raise detail.to_e
rescue Exception => e2 rescue Exception => e2
detail.set_backtrace(e2) e2.set_backtrace(remote_backtrace + e2.backtrace)
raise raise
end end
else else

View file

@ -34,11 +34,9 @@ RubyIVarName = XSD::QName.new(RubyTypeInstanceNamespace, 'ivars')
# Inner class to pass an exception. # Inner class to pass an exception.
class SOAPException; include Marshallable class SOAPException; include Marshallable
attr_reader :excn_type_name, :message, :backtrace, :cause attr_reader :excn_type_name, :cause
def initialize(e) def initialize(e)
@excn_type_name = Mapping.name2elename(e.class.to_s) @excn_type_name = Mapping.name2elename(e.class.to_s)
@message = e.message
@backtrace = e.backtrace
@cause = e @cause = e
end end
@ -50,25 +48,15 @@ class SOAPException; include Marshallable
klass = Mapping.class_from_name( klass = Mapping.class_from_name(
Mapping.elename2name(@excn_type_name.to_s)) Mapping.elename2name(@excn_type_name.to_s))
if klass.nil? if klass.nil?
raise RuntimeError.new(@message) raise RuntimeError.new(@cause.message)
end end
unless klass <= ::Exception unless klass <= ::Exception
raise NameError.new raise NameError.new
end end
obj = klass.new(@message) obj = klass.new(@cause.message)
obj.extend(::SOAP::Mapping::MappedException) obj.extend(::SOAP::Mapping::MappedException)
obj obj
end end
def set_backtrace(e)
e.set_backtrace(
if @backtrace.is_a?(Array)
@backtrace
else
[@backtrace.inspect]
end
)
end
end end
@ -238,10 +226,12 @@ class Registry
[::String, ::SOAP::SOAPGMonth, BasetypeFactory], [::String, ::SOAP::SOAPGMonth, BasetypeFactory],
[::String, ::SOAP::SOAPQName, BasetypeFactory], [::String, ::SOAP::SOAPQName, BasetypeFactory],
[::Hash, ::SOAP::SOAPArray, HashFactory],
[::Hash, ::SOAP::SOAPStruct, HashFactory],
[::Array, ::SOAP::SOAPArray, ArrayFactory, [::Array, ::SOAP::SOAPArray, ArrayFactory,
{:derived_class => true}], {:derived_class => true}],
[::Hash, ::SOAP::SOAPStruct, HashFactory],
[::SOAP::Mapping::SOAPException, [::SOAP::Mapping::SOAPException,
::SOAP::SOAPStruct, TypedStructFactory, ::SOAP::SOAPStruct, TypedStructFactory,
{:type => XSD::QName.new(RubyCustomTypeNamespace, "SOAPException")}], {:type => XSD::QName.new(RubyCustomTypeNamespace, "SOAPException")}],
@ -282,10 +272,12 @@ class Registry
[::String, ::SOAP::SOAPGMonth, BasetypeFactory], [::String, ::SOAP::SOAPGMonth, BasetypeFactory],
[::String, ::SOAP::SOAPQName, BasetypeFactory], [::String, ::SOAP::SOAPQName, BasetypeFactory],
[::Hash, ::SOAP::SOAPArray, HashFactory],
[::Hash, ::SOAP::SOAPStruct, HashFactory],
# Does not allow Array's subclass here. # Does not allow Array's subclass here.
[::Array, ::SOAP::SOAPArray, ArrayFactory], [::Array, ::SOAP::SOAPArray, ArrayFactory],
[::Hash, ::SOAP::SOAPStruct, HashFactory],
[::SOAP::Mapping::SOAPException, [::SOAP::Mapping::SOAPException,
::SOAP::SOAPStruct, TypedStructFactory, ::SOAP::SOAPStruct, TypedStructFactory,
{:type => XSD::QName.new(RubyCustomTypeNamespace, "SOAPException")}], {:type => XSD::QName.new(RubyCustomTypeNamespace, "SOAPException")}],

View file

@ -82,9 +82,6 @@ public
attr_reader :client attr_reader :client
NofRetry = 10 # [times] NofRetry = 10 # [times]
ConnectTimeout = 20 # [sec]
SendTimeout = 60 # [sec]
ReceiveTimeout = 60 # [sec]
def initialize(endpoint_url, proxy = nil, charset = nil) def initialize(endpoint_url, proxy = nil, charset = nil)
super(endpoint_url) super(endpoint_url)
@ -93,9 +90,6 @@ public
@wiredump_dev = nil # Set an IO to get wiredump. @wiredump_dev = nil # Set an IO to get wiredump.
@wiredump_file_base = nil @wiredump_file_base = nil
@client = Client.new(@proxy, "SOAP4R/#{ Version }") @client = Client.new(@proxy, "SOAP4R/#{ Version }")
@client.session_manager.connect_timeout = ConnectTimeout
@client.session_manager.send_timeout = SendTimeout
@client.session_manager.receive_timeout = ReceiveTimeout
end end
def inspect def inspect

View file

@ -48,14 +48,23 @@ class ComplexType < Info
end end
def child_defined_complextype(name) def child_defined_complextype(name)
unless compoundtype == :TYPE_STRUCT ele = nil
raise RuntimeError.new("Assert: not for struct") case compoundtype
end when :TYPE_STRUCT
unless ele = find_element(name) unless ele = find_element(name)
if name.namespace.nil? if name.namespace.nil?
ele = find_element_by_name(name.name) ele = find_element_by_name(name.name)
end end
end end
when :TYPE_ARRAY
if content.elements.size == 1
ele = content.elements[0]
else
raise RuntimeError.new("Assert: must not reach.")
end
else
raise RuntimeError.new("Assert: Not implemented.")
end
unless ele unless ele
raise RuntimeError.new("Cannot find #{name} as a children of #{@name}.") raise RuntimeError.new("Cannot find #{name} as a children of #{@name}.")
end end
@ -83,10 +92,13 @@ class ComplexType < Info
private private
def content_arytype def content_arytype
arytype = find_arytype if arytype = find_arytype
ns = arytype.namespace ns = arytype.namespace
name = arytype.name.sub(/\[(?:,)*\]$/, '') name = arytype.name.sub(/\[(?:,)*\]$/, '')
XSD::QName.new(ns, name) XSD::QName.new(ns, name)
else
nil
end
end end
end end

View file

@ -162,7 +162,6 @@ class XSDString < XSDAnySimpleType
def initialize(value = nil) def initialize(value = nil)
super() super()
@type = Type @type = Type
@encoding = nil
set(value) if value set(value) if value
end end
@ -254,6 +253,7 @@ private
end end
@data = _to_s @data = _to_s
@data.freeze
end end
# 0.0 -> 0; right? # 0.0 -> 0; right?
@ -440,6 +440,7 @@ private
@min = $7.to_i @min = $7.to_i
@sec = $8 ? XSDDecimal.new($8) : 0 @sec = $8 ? XSDDecimal.new($8) : 0
@data = _to_s @data = _to_s
@data.freeze
end end
def _to_s def _to_s
@ -476,11 +477,11 @@ module XSDDateTimeImpl
begin begin
if @data.offset * SecInDay == Time.now.utc_offset if @data.offset * SecInDay == Time.now.utc_offset
d = @data d = @data
usec = (d.sec_fraction * SecInDay * 1000000).to_f usec = (d.sec_fraction * SecInDay * 1000000).round
Time.local(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec) Time.local(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec)
else else
d = @data.newof d = @data.newof
usec = (d.sec_fraction * SecInDay * 1000000).to_f usec = (d.sec_fraction * SecInDay * 1000000).round
Time.gm(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec) Time.gm(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec)
end end
rescue ArgumentError rescue ArgumentError
@ -516,6 +517,7 @@ module XSDDateTimeImpl
end end
def _set(t) def _set(t)
set_datetime_init(t)
if (t.is_a?(Date)) if (t.is_a?(Date))
@data = t @data = t
elsif (t.is_a?(Time)) elsif (t.is_a?(Time))
@ -541,11 +543,16 @@ class XSDDateTime < XSDAnySimpleType
def initialize(value = nil) def initialize(value = nil)
super() super()
@type = Type @type = Type
@secfrac = nil
set(value) if value set(value) if value
end end
private private
def set_datetime_init(t)
@secfrac = nil
end
def set_str(t) def set_str(t)
/^([+\-]?\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip /^([+\-]?\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
unless Regexp.last_match unless Regexp.last_match
@ -568,6 +575,7 @@ private
zonestr = $8 zonestr = $8
@data = DateTime.civil(year, mon, mday, hour, min, sec, tz2of(zonestr)) @data = DateTime.civil(year, mon, mday, hour, min, sec, tz2of(zonestr))
@secfrac = secfrac
if secfrac if secfrac
diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / SecInDay diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / SecInDay
@ -588,10 +596,11 @@ private
s = format('%.4d-%02d-%02dT%02d:%02d:%02d', s = format('%.4d-%02d-%02dT%02d:%02d:%02d',
year, @data.mon, @data.mday, @data.hour, @data.min, @data.sec) year, @data.mon, @data.mday, @data.hour, @data.min, @data.sec)
if @data.sec_fraction.nonzero? if @data.sec_fraction.nonzero?
fr = @data.sec_fraction * SecInDay if @secfrac
shiftsize = fr.denominator.to_s.size + 1 s << ".#{ @secfrac }"
fr_s = (fr * (10 ** shiftsize)).to_i.to_s else
s << '.' << '0' * (shiftsize - fr_s.size) << fr_s.sub(/0+$/, '') s << sprintf("%.16f", (@data.sec_fraction * SecInDay).to_f).sub(/^0/, '').sub(/0*$/, '')
end
end end
add_tz(s) add_tz(s)
end end
@ -604,11 +613,16 @@ class XSDTime < XSDAnySimpleType
def initialize(value = nil) def initialize(value = nil)
super() super()
@type = Type @type = Type
@secfrac = nil
set(value) if value set(value) if value
end end
private private
def set_datetime_init(t)
@secfrac = nil
end
def set_str(t) def set_str(t)
/^(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip /^(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
unless Regexp.last_match unless Regexp.last_match
@ -622,19 +636,22 @@ private
zonestr = $5 zonestr = $5
@data = DateTime.civil(1, 1, 1, hour, min, sec, tz2of(zonestr)) @data = DateTime.civil(1, 1, 1, hour, min, sec, tz2of(zonestr))
@secfrac = secfrac
if secfrac if secfrac
@data += secfrac.to_i.to_r / (10 ** secfrac.size) / SecInDay diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / SecInDay
@data += diffday
end end
end end
def _to_s def _to_s
s = format('%02d:%02d:%02d', @data.hour, @data.min, @data.sec) s = format('%02d:%02d:%02d', @data.hour, @data.min, @data.sec)
if @data.sec_fraction.nonzero? if @data.sec_fraction.nonzero?
fr = @data.sec_fraction * SecInDay if @secfrac
shiftsize = fr.denominator.to_s.size + 1 s << ".#{ @secfrac }"
fr_s = (fr * (10 ** shiftsize)).to_i.to_s else
s << '.' << '0' * (shiftsize - fr_s.size) << fr_s.sub(/0+$/, '') s << sprintf("%.16f", (@data.sec_fraction * SecInDay).to_f).sub(/^0/, '').sub(/0*$/, '')
end
end end
add_tz(s) add_tz(s)
end end
@ -652,6 +669,9 @@ class XSDDate < XSDAnySimpleType
private private
def set_datetime_init(t)
end
def set_str(t) def set_str(t)
/^([+\-]?\d{4,})-(\d\d)-(\d\d)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip /^([+\-]?\d{4,})-(\d\d)-(\d\d)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
unless Regexp.last_match unless Regexp.last_match
@ -688,6 +708,9 @@ class XSDGYearMonth < XSDAnySimpleType
private private
def set_datetime_init(t)
end
def set_str(t) def set_str(t)
/^([+\-]?\d{4,})-(\d\d)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip /^([+\-]?\d{4,})-(\d\d)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
unless Regexp.last_match unless Regexp.last_match
@ -723,6 +746,9 @@ class XSDGYear < XSDAnySimpleType
private private
def set_datetime_init(t)
end
def set_str(t) def set_str(t)
/^([+\-]?\d{4,})(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip /^([+\-]?\d{4,})(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
unless Regexp.last_match unless Regexp.last_match
@ -757,6 +783,9 @@ class XSDGMonthDay < XSDAnySimpleType
private private
def set_datetime_init(t)
end
def set_str(t) def set_str(t)
/^(\d\d)-(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip /^(\d\d)-(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
unless Regexp.last_match unless Regexp.last_match
@ -788,6 +817,9 @@ class XSDGDay < XSDAnySimpleType
private private
def set_datetime_init(t)
end
def set_str(t) def set_str(t)
/^(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip /^(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
unless Regexp.last_match unless Regexp.last_match
@ -818,6 +850,9 @@ class XSDGMonth < XSDAnySimpleType
private private
def set_datetime_init(t)
end
def set_str(t) def set_str(t)
/^(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip /^(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
unless Regexp.last_match unless Regexp.last_match
@ -935,6 +970,7 @@ private
@prefix = $1 @prefix = $1
@localpart = $2 @localpart = $2
@data = _to_s @data = _to_s
@data.freeze
end end
def _to_s def _to_s

View file

@ -38,6 +38,7 @@ AMAZON_WSDL = 'http://soap.amazon.com/schemas3/AmazonWebServices.wsdl'
amazon = SOAP::WSDLDriverFactory.new(AMAZON_WSDL).create_driver amazon = SOAP::WSDLDriverFactory.new(AMAZON_WSDL).create_driver
p "WSDL loaded" p "WSDL loaded"
amazon.generate_explicit_type = true amazon.generate_explicit_type = true
amazon.mandatorycharset = 'utf-8' # AWS should fix this bug.
#amazon.wiredump_dev = STDERR #amazon.wiredump_dev = STDERR
# Show sales rank. # Show sales rank.

View file

@ -369,7 +369,7 @@ module MarshalTestLib
class MyTime < Time; def initialize(v, *args) super(*args); @v = v; end end class MyTime < Time; def initialize(v, *args) super(*args); @v = v; end end
def test_time def test_time
# once there was a bug caused by usec overflow. try a little harder. # once there was a bug caused by usec overflow. try a little harder.
10.times do 100.times do
t = Time.now t = Time.now
marshal_equal(t, t.usec.to_s) marshal_equal(t, t.usec.to_s)
end end

View file

@ -351,6 +351,8 @@ class TestSOAP < Test::Unit::TestCase
"2002-12-31T23:59:59-00:01", "2002-12-31T23:59:59-00:01",
"2002-12-31T23:59:59-23:59", "2002-12-31T23:59:59-23:59",
"2002-12-31T23:59:59.00000000000000000001+13:30", "2002-12-31T23:59:59.00000000000000000001+13:30",
"2002-12-31T23:59:59.51375Z",
"2002-12-31T23:59:59.51345+12:34",
"-2002-05-18T16:52:20Z", "-2002-05-18T16:52:20Z",
"-4711-12-31T23:59:59Z", "-4711-12-31T23:59:59Z",
"-4713-01-01T12:00:00Z", "-4713-01-01T12:00:00Z",
@ -414,6 +416,8 @@ class TestSOAP < Test::Unit::TestCase
"23:59:59-00:01", "23:59:59-00:01",
"23:59:59-23:59", "23:59:59-23:59",
"23:59:59.00000000000000000001+13:30", "23:59:59.00000000000000000001+13:30",
"23:59:59.51375Z",
"23:59:59.51375+12:34",
"23:59:59+00:01", "23:59:59+00:01",
] ]
targets.each do |str| targets.each do |str|

View file

@ -235,20 +235,9 @@ class StringArray < Array
end end
# http://xml.apache.org/xml-soap # http://xml.apache.org/xml-soap
class Map class Map < Array
# Contents type should be dumped here...
@@schema_type = "Map" @@schema_type = "Map"
@@schema_ns = "http://xml.apache.org/xml-soap" @@schema_ns = "http://xml.apache.org/xml-soap"
def item
@item
end
def item=(value)
@item = value
end
def initialize(item = nil)
@item = item
end
end end

View file

@ -0,0 +1,99 @@
class RAABaseServicePortType
# SYNOPSIS
# getAllListings
#
# ARGS
# N/A
#
# RETURNS
# return StringArray - {http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/}StringArray
#
# RAISES
# (undefined)
#
def getAllListings
#raise NotImplementedError.new
["ruby", "soap4r"]
end
# SYNOPSIS
# getProductTree
#
# ARGS
# N/A
#
# RETURNS
# return Map - {http://xml.apache.org/xml-soap}Map
#
# RAISES
# (undefined)
#
def getProductTree
raise NotImplementedError.new
end
# SYNOPSIS
# getInfoFromCategory(category)
#
# ARGS
# category Category - {http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/}Category
#
# RETURNS
# return InfoArray - {http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/}InfoArray
#
# RAISES
# (undefined)
#
def getInfoFromCategory(category)
raise NotImplementedError.new
end
# SYNOPSIS
# getModifiedInfoSince(timeInstant)
#
# ARGS
# timeInstant - {http://www.w3.org/2001/XMLSchema}dateTime
#
# RETURNS
# return InfoArray - {http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/}InfoArray
#
# RAISES
# (undefined)
#
def getModifiedInfoSince(timeInstant)
raise NotImplementedError.new
end
# SYNOPSIS
# getInfoFromName(productName)
#
# ARGS
# productName - {http://www.w3.org/2001/XMLSchema}string
#
# RETURNS
# return Info - {http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/}Info
#
# RAISES
# (undefined)
#
def getInfoFromName(productName)
raise NotImplementedError.new
end
# SYNOPSIS
# getInfoFromOwnerId(ownerId)
#
# ARGS
# ownerId - {http://www.w3.org/2001/XMLSchema}int
#
# RETURNS
# return InfoArray - {http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/}InfoArray
#
# RAISES
# (undefined)
#
def getInfoFromOwnerId(ownerId)
raise NotImplementedError.new
end
end

View file

@ -1,6 +1,7 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
require 'RAAServant.rb'
require 'soap/rpc/standaloneServer' require 'soap/rpc/standaloneServer'
require 'RAA.rb'
class RAABaseServicePortType class RAABaseServicePortType
MappingRegistry = SOAP::Mapping::Registry.new MappingRegistry = SOAP::Mapping::Registry.new
@ -13,9 +14,9 @@ class RAABaseServicePortType
) )
MappingRegistry.set( MappingRegistry.set(
Map, Map,
::SOAP::SOAPStruct, ::SOAP::SOAPArray,
::SOAP::Mapping::Registry::TypedStructFactory, ::SOAP::Mapping::Registry::TypedArrayFactory,
{ :type => XSD::QName.new("http://xml.apache.org/xml-soap", "Map") } { :type => XSD::QName.new("http://www.w3.org/2001/XMLSchema", "anyType") }
) )
MappingRegistry.set( MappingRegistry.set(
Category, Category,
@ -48,47 +49,38 @@ class RAABaseServicePortType
{ :type => XSD::QName.new("http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Owner") } { :type => XSD::QName.new("http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Owner") }
) )
Methods = [ Methods = [
["getAllListings", "getAllListings", [ ["getAllListings", "getAllListings", [
["retval", "return", ["retval", "return",
[::SOAP::SOAPArray, "http://www.w3.org/2001/XMLSchema", "string"]]], [::SOAP::SOAPArray, "http://www.w3.org/2001/XMLSchema", "string"]]], "", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"],
"", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"],
["getProductTree", "getProductTree", [ ["getProductTree", "getProductTree", [
["retval", "return", ["retval", "return",
[::SOAP::SOAPStruct, "http://xml.apache.org/xml-soap", "Map"]]], [::SOAP::SOAPArray, "http://www.w3.org/2001/XMLSchema", "anyType"]]], "", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"],
"", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"],
["getInfoFromCategory", "getInfoFromCategory", [ ["getInfoFromCategory", "getInfoFromCategory", [
["in", "category", ["in", "category",
[::SOAP::SOAPStruct, "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Category"]], [::SOAP::SOAPStruct, "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Category"]],
["retval", "return", ["retval", "return",
[::SOAP::SOAPArray, "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Info"]]], [::SOAP::SOAPArray, "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Info"]]], "", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"],
"", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"],
["getModifiedInfoSince", "getModifiedInfoSince", [ ["getModifiedInfoSince", "getModifiedInfoSince", [
["in", "timeInstant", ["in", "timeInstant",
[SOAP::SOAPDateTime]], [SOAP::SOAPDateTime]],
["retval", "return", ["retval", "return",
[::SOAP::SOAPArray, "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Info"]]], [::SOAP::SOAPArray, "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Info"]]], "", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"],
"", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"],
["getInfoFromName", "getInfoFromName", [ ["getInfoFromName", "getInfoFromName", [
["in", "productName", ["in", "productName",
[SOAP::SOAPString]], [SOAP::SOAPString]],
["retval", "return", ["retval", "return",
[::SOAP::SOAPStruct, "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Info"]]], [::SOAP::SOAPStruct, "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Info"]]], "", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"],
"", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"],
["getInfoFromOwnerId", "getInfoFromOwnerId", [ ["getInfoFromOwnerId", "getInfoFromOwnerId", [
["in", "ownerId", ["in", "ownerId",
[SOAP::SOAPInt]], [SOAP::SOAPInt]],
["retval", "return", ["retval", "return",
[::SOAP::SOAPArray, "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Info"]]], [::SOAP::SOAPArray, "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/", "Info"]]], "", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"]
"", "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.2/"]
] ]
def getAllListings
["ruby", "soap4r"]
end
end end
class RAABaseServiceServer < SOAP::RPC::StandaloneServer class App < SOAP::RPC::StandaloneServer
def initialize(*arg) def initialize(*arg)
super super
@ -102,3 +94,8 @@ class RAABaseServiceServer < SOAP::RPC::StandaloneServer
self.mapping_registry = RAABaseServicePortType::MappingRegistry self.mapping_registry = RAABaseServicePortType::MappingRegistry
end end
end end
# Change listen port.
if $0 == __FILE__
App.new('app', nil, '0.0.0.0', 10080).start
end

View file

@ -1,4 +1,7 @@
server.rb: based on RAAService.rb which is generated with the following command; RAAServant.rb: based on the file which is generated with the following command;
bin/wsdl2ruby.rb --wsdl raa.wsdl --servant_skelton --force
RAAService.rb: generated with the following command;
bin/wsdl2ruby.rb --wsdl raa.wsdl --standalone_server_stub --force bin/wsdl2ruby.rb --wsdl raa.wsdl --standalone_server_stub --force
RAA.rb: generated with the following command; RAA.rb: generated with the following command;

View file

@ -18,9 +18,11 @@ class TestRAA < Test::Unit::TestCase
def setup_server def setup_server
$:.push(DIR) $:.push(DIR)
require File.join(DIR, 'server.rb') require File.join(DIR, 'RAA.rb')
require File.join(DIR, 'RAAServant.rb')
require File.join(DIR, 'RAAService.rb')
$:.delete(DIR) $:.delete(DIR)
@server = RAABaseServiceServer.new('RAA server', nil, '0.0.0.0', Port) @server = App.new('RAA server', nil, '0.0.0.0', Port)
@server.level = Logger::Severity::ERROR @server.level = Logger::Severity::ERROR
@t = Thread.new { @t = Thread.new {
Thread.current.abort_on_exception = true Thread.current.abort_on_exception = true

View file

@ -384,6 +384,9 @@ class TestXSD < Test::Unit::TestCase
"2002-12-31T23:59:59-00:01", "2002-12-31T23:59:59-00:01",
"2002-12-31T23:59:59-23:59", "2002-12-31T23:59:59-23:59",
"2002-12-31T23:59:59.00000000000000000001+13:30", "2002-12-31T23:59:59.00000000000000000001+13:30",
"2002-12-31T23:59:59.5137Z",
"2002-12-31T23:59:59.51375Z", # 411/800
"2002-12-31T23:59:59.51375+12:34",
"-2002-05-18T16:52:20Z", "-2002-05-18T16:52:20Z",
"-4713-01-01T12:00:00Z", "-4713-01-01T12:00:00Z",
"-2002-12-31T23:59:59+00:01", "-2002-12-31T23:59:59+00:01",
@ -445,6 +448,8 @@ class TestXSD < Test::Unit::TestCase
"23:59:59-00:01", "23:59:59-00:01",
"23:59:59-23:59", "23:59:59-23:59",
"23:59:59.00000000000000000001+13:30", "23:59:59.00000000000000000001+13:30",
"23:59:59.51345Z",
"23:59:59.51345+12:34",
"23:59:59+00:01", "23:59:59+00:01",
] ]
targets.each do |str| targets.each do |str|