diff options
Diffstat (limited to 'lib/wsdl')
-rw-r--r-- | lib/wsdl/data.rb | 1 | ||||
-rw-r--r-- | lib/wsdl/definitions.rb | 21 | ||||
-rw-r--r-- | lib/wsdl/operation.rb | 2 | ||||
-rw-r--r-- | lib/wsdl/parser.rb | 3 | ||||
-rw-r--r-- | lib/wsdl/soap/definitions.rb | 28 | ||||
-rw-r--r-- | lib/wsdl/xmlSchema/complexContent.rb | 4 | ||||
-rw-r--r-- | lib/wsdl/xmlSchema/complexType.rb | 22 | ||||
-rw-r--r-- | lib/wsdl/xmlSchema/data.rb | 7 | ||||
-rw-r--r-- | lib/wsdl/xmlSchema/parser.rb | 3 | ||||
-rw-r--r-- | lib/wsdl/xmlSchema/schema.rb | 13 |
10 files changed, 90 insertions, 14 deletions
diff --git a/lib/wsdl/data.rb b/lib/wsdl/data.rb index 8a14dd14d7..45eaad8526 100644 --- a/lib/wsdl/data.rb +++ b/lib/wsdl/data.rb @@ -6,6 +6,7 @@ # either the dual license version in 2003, or any later version. +require 'xsd/qname' require 'wsdl/documentation' require 'wsdl/definitions' require 'wsdl/types' diff --git a/lib/wsdl/definitions.rb b/lib/wsdl/definitions.rb index 561a335744..c530220fde 100644 --- a/lib/wsdl/definitions.rb +++ b/lib/wsdl/definitions.rb @@ -43,8 +43,7 @@ class Definitions < Info end def inspect - name = @name || '(unnamed)' - "#<#{self.class}:#{name}>" + sprintf("#<%s:0x%x %s>", self.class.name, __id__, @name || '(unnamed)') end def targetnamespace=(targetnamespace) @@ -58,7 +57,7 @@ class Definitions < Info result = XSD::NamedElements.new if @types @types.schemas.each do |schema| - result.concat(schema.elements) + result.concat(schema.collect_elements) end end @imports.each do |import| @@ -71,7 +70,7 @@ class Definitions < Info result = @anontypes.dup if @types @types.schemas.each do |schema| - result.concat(schema.complextypes) + result.concat(schema.collect_complextypes) end end @imports.each do |import| @@ -80,6 +79,20 @@ class Definitions < Info result end + def collect_simpletypes + result = XSD::NamedElements.new + if @types + @types.schemas.each do |schema| + result.concat(schema.collect_simpletypes) + end + end + @imports.each do |import| + result.concat(import.content.collect_simpletypes) + end + result + end + + # ToDo: simpletype must be accepted... def add_type(complextype) @anontypes << complextype end diff --git a/lib/wsdl/operation.rb b/lib/wsdl/operation.rb index 228dc85b05..be28446d34 100644 --- a/lib/wsdl/operation.rb +++ b/lib/wsdl/operation.rb @@ -119,7 +119,7 @@ private return parts.dup end if parts.length != result.length - raise RuntimeError.new("Incomplete parameter order list.") + raise RuntimeError.new("Incomplete prarmeterOrder list.") end result end diff --git a/lib/wsdl/parser.rb b/lib/wsdl/parser.rb index 7e7a4d8bce..6387911f79 100644 --- a/lib/wsdl/parser.rb +++ b/lib/wsdl/parser.rb @@ -119,7 +119,8 @@ private STDERR.puts("Unknown element #{ element }.") o = Documentation.new # which accepts any element. end - o.parent = parent + # node could be a pseudo element. pseudo element has its own parent. + o.parent = parent if o.parent.nil? end attrs.each do |key, value| attr = unless /:/ =~ key diff --git a/lib/wsdl/soap/definitions.rb b/lib/wsdl/soap/definitions.rb index 7a62242204..2f6e7e19f0 100644 --- a/lib/wsdl/soap/definitions.rb +++ b/lib/wsdl/soap/definitions.rb @@ -75,8 +75,36 @@ class Definitions < Info types + self.class.soap_rpc_complextypes end + def collect_faulttypes + result = [] + collect_fault_messages.each do |message| + parts = message(message).parts + if parts.size != 1 + raise RuntimeError.new("Expecting fault message to have only 1 part.") + end + if result.index(parts[0].type).nil? + result << parts[0].type + end + end + result + end + private + def collect_fault_messages + result = [] + porttypes.each do |porttype| + porttype.operations.each do |operation| + operation.fault.each do |fault| + if result.index(fault.message).nil? + result << fault.message + end + end + end + end + result + end + def rpc_operation_complextypes(binding) types = XSD::NamedElements.new binding.operations.each do |op_bind| diff --git a/lib/wsdl/xmlSchema/complexContent.rb b/lib/wsdl/xmlSchema/complexContent.rb index 22f6851864..66ad9e251d 100644 --- a/lib/wsdl/xmlSchema/complexContent.rb +++ b/lib/wsdl/xmlSchema/complexContent.rb @@ -28,6 +28,10 @@ class ComplexContent < Info @attributes = XSD::NamedElements.new end + def targetnamespace + parent.targetnamespace + end + def parse_element(element) case element when RestrictionName, ExtensionName diff --git a/lib/wsdl/xmlSchema/complexType.rb b/lib/wsdl/xmlSchema/complexType.rb index e889482d09..056a806dc5 100644 --- a/lib/wsdl/xmlSchema/complexType.rb +++ b/lib/wsdl/xmlSchema/complexType.rb @@ -8,6 +8,7 @@ require 'wsdl/info' require 'wsdl/xmlSchema/content' +require 'wsdl/xmlSchema/element' require 'xsd/namedelements' @@ -36,11 +37,16 @@ class ComplexType < Info def targetnamespace parent.targetnamespace end - + + AnyAsElement = Element.new(XSD::QName.new(nil, 'any'), XSD::AnyTypeName) def each_element if @content @content.elements.each do |element| - yield(element.name, element) + if element.is_a?(Any) + yield(AnyAsElement) + else + yield(element) + end end end end @@ -48,7 +54,11 @@ class ComplexType < Info def find_element(name) if @content @content.elements.each do |element| - return element if name == element.name + if element.is_a?(Any) + return AnyAsElement if name == AnyAsElement.name + else + return element if name == element.name + end end end nil @@ -57,7 +67,11 @@ class ComplexType < Info def find_element_by_name(name) if @content @content.elements.each do |element| - return element if name == element.name.name + if element.is_a?(Any) + return AnyAsElement if name == AnyAsElement.name.name + else + return element if name == element.name.name + end end end nil diff --git a/lib/wsdl/xmlSchema/data.rb b/lib/wsdl/xmlSchema/data.rb index 2fa8ad6a91..1283ac2a1d 100644 --- a/lib/wsdl/xmlSchema/data.rb +++ b/lib/wsdl/xmlSchema/data.rb @@ -6,8 +6,11 @@ # either the dual license version in 2003, or any later version. +require 'xsd/datatypes' require 'wsdl/xmlSchema/schema' require 'wsdl/xmlSchema/import' +require 'wsdl/xmlSchema/simpleType' +require 'wsdl/xmlSchema/simpleRestriction' require 'wsdl/xmlSchema/complexType' require 'wsdl/xmlSchema/complexContent' require 'wsdl/xmlSchema/any' @@ -17,7 +20,7 @@ require 'wsdl/xmlSchema/choice' require 'wsdl/xmlSchema/sequence' require 'wsdl/xmlSchema/attribute' require 'wsdl/xmlSchema/unique' - +require 'wsdl/xmlSchema/enumeration' module WSDL module XMLSchema @@ -30,6 +33,7 @@ ChoiceName = XSD::QName.new(XSD::Namespace, 'choice') ComplexContentName = XSD::QName.new(XSD::Namespace, 'complexContent') ComplexTypeName = XSD::QName.new(XSD::Namespace, 'complexType') ElementName = XSD::QName.new(XSD::Namespace, 'element') +EnumerationName = XSD::QName.new(XSD::Namespace, 'enumeration') ExtensionName = XSD::QName.new(XSD::Namespace, 'extension') ImportName = XSD::QName.new(XSD::Namespace, 'import') RestrictionName = XSD::QName.new(XSD::Namespace, 'restriction') @@ -57,6 +61,7 @@ SchemaLocationAttrName = XSD::QName.new(nil, 'schemaLocation') TargetNamespaceAttrName = XSD::QName.new(nil, 'targetNamespace') TypeAttrName = XSD::QName.new(nil, 'type') UseAttrName = XSD::QName.new(nil, 'use') +ValueAttrName = XSD::QName.new(nil, 'value') end diff --git a/lib/wsdl/xmlSchema/parser.rb b/lib/wsdl/xmlSchema/parser.rb index 688af27c8c..5401c5f729 100644 --- a/lib/wsdl/xmlSchema/parser.rb +++ b/lib/wsdl/xmlSchema/parser.rb @@ -116,7 +116,8 @@ private unless o raise UnknownElementError.new("Unknown element #{ element }.") end - o.parent = parent + # node could be a pseudo element. pseudo element has its own parent. + o.parent = parent if o.parent.nil? end attrs.each do |key, value| attr = unless /:/ =~ key diff --git a/lib/wsdl/xmlSchema/schema.rb b/lib/wsdl/xmlSchema/schema.rb index b2a195d41f..b530a92556 100644 --- a/lib/wsdl/xmlSchema/schema.rb +++ b/lib/wsdl/xmlSchema/schema.rb @@ -17,6 +17,7 @@ module XMLSchema class Schema < Info attr_reader :targetnamespace # required attr_reader :complextypes + attr_reader :simpletypes attr_reader :elements attr_reader :attributes attr_reader :imports @@ -27,6 +28,7 @@ class Schema < Info super @targetnamespace = nil @complextypes = XSD::NamedElements.new + @simpletypes = XSD::NamedElements.new @elements = XSD::NamedElements.new @attributes = XSD::NamedElements.new @imports = [] @@ -44,8 +46,9 @@ class Schema < Info @complextypes << o o when SimpleTypeName - STDERR.puts("Restriction of basetype with simpleType definition is ignored for now.") - nil + o = SimpleType.new + @simpletypes << o + o when ElementName o = Element.new @elements << o @@ -83,6 +86,12 @@ class Schema < Info result end + def collect_simpletypes + result = XSD::NamedElements.new + result.concat(@simpletypes) + result + end + def self.parse_element(element) if element == SchemaName Schema.new |