summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authornahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-11-30 04:33:02 +0000
committernahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-11-30 04:33:02 +0000
commitd268bf305e926b5418d843098e35462cf97df662 (patch)
tree4268267cc8e52a533e4c78490ce6c2009971f972 /lib
parent165d101eed53d09aa614d93557b077305a52006b (diff)
* lib/soap/encodingstyle/soapHandler.rb: refactoring - Simplifying
Conditional Expressions. * lib/wsdl/soap/definitions.rb: refactoring - Move Method. * test/xsd/{test_noencoding.rb,noencoding.xml}: new files. test for encoding unspecified XML file parsing. * test/wsdl/{test_fault.rb,map,datetime}: new files. test of SOAPFault, dateTime and Apache's Map. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5060 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/soap/encodingstyle/soapHandler.rb28
-rw-r--r--lib/wsdl/soap/definitions.rb103
2 files changed, 68 insertions, 63 deletions
diff --git a/lib/soap/encodingstyle/soapHandler.rb b/lib/soap/encodingstyle/soapHandler.rb
index 1f359bef4e..9aa732535e 100644
--- a/lib/soap/encodingstyle/soapHandler.rb
+++ b/lib/soap/encodingstyle/soapHandler.rb
@@ -331,30 +331,30 @@ private
def decode_tag_by_wsdl(ns, elename, typestr, parent, arytypestr, extraattr)
o = nil
- # should branch by root attribute?
if parent.class == SOAPBody
+ # root element: should branch by root attribute?
if @is_first_top_ele
# Unqualified name is allowed here.
@is_first_top_ele = false
type = @decode_typemap[elename] ||
@decode_typemap.find_name(elename.name)
- unless type
- raise EncodingStyleError.new("Unknown operation '#{ elename }'.")
+ if type
+ o = SOAPStruct.new(elename)
+ o.definedtype = type
+ return o
end
- o = SOAPStruct.new(elename)
- o.definedtype = type
- return o
- elsif !typestr
- # typeless multi-ref element.
- return decode_tag_by_type(ns, elename, typestr, parent, arytypestr,
- extraattr)
- else
- # typed multi-ref element.
+ end
+ # multi-ref element.
+ if typestr
typename = ns.parse(typestr)
typedef = @decode_typemap[typename]
- return decode_defined_compoundtype(elename, typename, typedef,
- arytypestr)
+ if typedef
+ return decode_defined_compoundtype(elename, typename, typedef,
+ arytypestr)
+ end
end
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr,
+ extraattr)
end
if parent.type == XSD::AnyTypeName
diff --git a/lib/wsdl/soap/definitions.rb b/lib/wsdl/soap/definitions.rb
index 1a152ee693..7a62242204 100644
--- a/lib/wsdl/soap/definitions.rb
+++ b/lib/wsdl/soap/definitions.rb
@@ -15,59 +15,15 @@ module WSDL
class Definitions < Info
- def soap_rpc_complextypes(binding)
- types = rpc_operation_complextypes(binding)
+ def self.soap_rpc_complextypes
+ types = XSD::NamedElements.new
types << array_complextype
types << fault_complextype
types << exception_complextype
types
end
-private
-
- def rpc_operation_complextypes(binding)
- types = XSD::NamedElements.new
- binding.operations.each do |op_bind|
- if op_bind_rpc?(op_bind)
- operation = op_bind.find_operation
- if op_bind.input
- type = XMLSchema::ComplexType.new(operation_input_name(operation))
- message = messages[operation.input.message]
- type.sequence_elements = elements_from_message(message)
- types << type
- end
- if op_bind.output
- type = XMLSchema::ComplexType.new(operation_output_name(operation))
- message = messages[operation.output.message]
- type.sequence_elements = elements_from_message(message)
- types << type
- end
- end
- end
- types
- end
-
- def operation_input_name(operation)
- operation.input.name || operation.name
- end
-
- def operation_output_name(operation)
- operation.output.name ||
- XSD::QName.new(operation.name.namespace, operation.name.name + "Response")
- end
-
- def op_bind_rpc?(op_bind)
- op_bind.soapoperation and op_bind.soapoperation.operation_style == :rpc
- end
-
- def elements_from_message(message)
- message.parts.collect { |part|
- qname = XSD::QName.new(nil, part.name)
- XMLSchema::Element.new(qname, part.type)
- }
- end
-
- def array_complextype
+ def self.array_complextype
type = XMLSchema::ComplexType.new(::SOAP::ValueArrayName)
type.complexcontent = XMLSchema::ComplexContent.new
type.complexcontent.base = ::SOAP::ValueArrayName
@@ -90,7 +46,7 @@ private
</xs:sequence>
</xs:complexType>
=end
- def fault_complextype
+ def self.fault_complextype
type = XMLSchema::ComplexType.new(::SOAP::EleFaultName)
faultcode = XMLSchema::Element.new(::SOAP::EleFaultCodeName, XSD::XSDQName::Type)
faultstring = XMLSchema::Element.new(::SOAP::EleFaultStringName, XSD::XSDString::Type)
@@ -103,7 +59,7 @@ private
type
end
- def exception_complextype
+ def self.exception_complextype
type = XMLSchema::ComplexType.new(XSD::QName.new(
::SOAP::Mapping::RubyCustomTypeNamespace, 'SOAPException'))
excn_name = XMLSchema::Element.new(XSD::QName.new(nil, 'excn_type_name'), XSD::XSDString::Type)
@@ -113,6 +69,55 @@ private
type.all_elements = [excn_name, cause, backtrace, message]
type
end
+
+ def soap_rpc_complextypes(binding)
+ types = rpc_operation_complextypes(binding)
+ types + self.class.soap_rpc_complextypes
+ end
+
+private
+
+ def rpc_operation_complextypes(binding)
+ types = XSD::NamedElements.new
+ binding.operations.each do |op_bind|
+ if op_bind_rpc?(op_bind)
+ operation = op_bind.find_operation
+ if op_bind.input
+ type = XMLSchema::ComplexType.new(operation_input_name(operation))
+ message = messages[operation.input.message]
+ type.sequence_elements = elements_from_message(message)
+ types << type
+ end
+ if op_bind.output
+ type = XMLSchema::ComplexType.new(operation_output_name(operation))
+ message = messages[operation.output.message]
+ type.sequence_elements = elements_from_message(message)
+ types << type
+ end
+ end
+ end
+ types
+ end
+
+ def operation_input_name(operation)
+ operation.input.name || operation.name
+ end
+
+ def operation_output_name(operation)
+ operation.output.name ||
+ XSD::QName.new(operation.name.namespace, operation.name.name + "Response")
+ end
+
+ def op_bind_rpc?(op_bind)
+ op_bind.soapoperation and op_bind.soapoperation.operation_style == :rpc
+ end
+
+ def elements_from_message(message)
+ message.parts.collect { |part|
+ qname = XSD::QName.new(nil, part.name)
+ XMLSchema::Element.new(qname, part.type)
+ }
+ end
end