soap2r 1.5.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/wsdl2ruby.rb +137 -0
- data/bin/xsd2ruby.rb +90 -0
- data/lib/soap/attachment.rb +108 -0
- data/lib/soap/attrproxy.rb +34 -0
- data/lib/soap/baseData.rb +1094 -0
- data/lib/soap/element.rb +277 -0
- data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
- data/lib/soap/encodingstyle/handler.rb +120 -0
- data/lib/soap/encodingstyle/literalHandler.rb +195 -0
- data/lib/soap/encodingstyle/soapHandler.rb +559 -0
- data/lib/soap/filter.rb +13 -0
- data/lib/soap/filter/filterchain.rb +51 -0
- data/lib/soap/filter/handler.rb +31 -0
- data/lib/soap/filter/streamhandler.rb +29 -0
- data/lib/soap/generator.rb +299 -0
- data/lib/soap/header/handler.rb +61 -0
- data/lib/soap/header/handlerset.rb +70 -0
- data/lib/soap/header/mappinghandler.rb +47 -0
- data/lib/soap/header/simplehandler.rb +44 -0
- data/lib/soap/httpconfigloader.rb +141 -0
- data/lib/soap/mapping.rb +12 -0
- data/lib/soap/mapping/encodedregistry.rb +537 -0
- data/lib/soap/mapping/factory.rb +388 -0
- data/lib/soap/mapping/literalregistry.rb +391 -0
- data/lib/soap/mapping/mapping.rb +576 -0
- data/lib/soap/mapping/registry.rb +295 -0
- data/lib/soap/mapping/rubytypeFactory.rb +446 -0
- data/lib/soap/mapping/schemadefinition.rb +170 -0
- data/lib/soap/mapping/typeMap.rb +106 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +211 -0
- data/lib/soap/mapping/wsdlliteralregistry.rb +248 -0
- data/lib/soap/marshal.rb +59 -0
- data/lib/soap/mimemessage.rb +241 -0
- data/lib/soap/nestedexception.rb +42 -0
- data/lib/soap/netHttpClient.rb +241 -0
- data/lib/soap/ns.rb +34 -0
- data/lib/soap/parser.rb +252 -0
- data/lib/soap/processor.rb +66 -0
- data/lib/soap/property.rb +319 -0
- data/lib/soap/proxy.rb +14 -0
- data/lib/soap/rpc/cgistub.rb +247 -0
- data/lib/soap/rpc/driver.rb +221 -0
- data/lib/soap/rpc/element.rb +374 -0
- data/lib/soap/rpc/httpserver.rb +142 -0
- data/lib/soap/rpc/methodDef.rb +68 -0
- data/lib/soap/rpc/proxy.rb +572 -0
- data/lib/soap/rpc/router.rb +662 -0
- data/lib/soap/rpc/rpc.rb +25 -0
- data/lib/soap/rpc/soaplet.rb +200 -0
- data/lib/soap/rpc/standaloneServer.rb +43 -0
- data/lib/soap/soap.rb +151 -0
- data/lib/soap/streamHandler.rb +301 -0
- data/lib/soap/wsdlDriver.rb +164 -0
- data/lib/wsdl/binding.rb +65 -0
- data/lib/wsdl/data.rb +64 -0
- data/lib/wsdl/definitions.rb +236 -0
- data/lib/wsdl/documentation.rb +32 -0
- data/lib/wsdl/import.rb +80 -0
- data/lib/wsdl/importer.rb +38 -0
- data/lib/wsdl/info.rb +50 -0
- data/lib/wsdl/message.rb +54 -0
- data/lib/wsdl/operation.rb +151 -0
- data/lib/wsdl/operationBinding.rb +240 -0
- data/lib/wsdl/param.rb +93 -0
- data/lib/wsdl/parser.rb +164 -0
- data/lib/wsdl/part.rb +52 -0
- data/lib/wsdl/port.rb +66 -0
- data/lib/wsdl/portType.rb +75 -0
- data/lib/wsdl/service.rb +61 -0
- data/lib/wsdl/soap/address.rb +40 -0
- data/lib/wsdl/soap/binding.rb +49 -0
- data/lib/wsdl/soap/body.rb +58 -0
- data/lib/wsdl/soap/cgiStubCreator.rb +92 -0
- data/lib/wsdl/soap/classDefCreator.rb +433 -0
- data/lib/wsdl/soap/classDefCreatorSupport.rb +240 -0
- data/lib/wsdl/soap/classNameCreator.rb +54 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +104 -0
- data/lib/wsdl/soap/complexType.rb +173 -0
- data/lib/wsdl/soap/data.rb +42 -0
- data/lib/wsdl/soap/definitions.rb +200 -0
- data/lib/wsdl/soap/driverCreator.rb +118 -0
- data/lib/wsdl/soap/element.rb +33 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +73 -0
- data/lib/wsdl/soap/fault.rb +56 -0
- data/lib/wsdl/soap/header.rb +86 -0
- data/lib/wsdl/soap/headerfault.rb +56 -0
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +115 -0
- data/lib/wsdl/soap/mappingRegistryCreator.rb +58 -0
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +376 -0
- data/lib/wsdl/soap/methodDefCreator.rb +199 -0
- data/lib/wsdl/soap/operation.rb +112 -0
- data/lib/wsdl/soap/servantSkeltonCreator.rb +89 -0
- data/lib/wsdl/soap/servletStubCreator.rb +104 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +100 -0
- data/lib/wsdl/soap/wsdl2ruby.rb +217 -0
- data/lib/wsdl/types.rb +44 -0
- data/lib/wsdl/wsdl.rb +24 -0
- data/lib/wsdl/xmlSchema/all.rb +24 -0
- data/lib/wsdl/xmlSchema/annotation.rb +34 -0
- data/lib/wsdl/xmlSchema/any.rb +61 -0
- data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
- data/lib/wsdl/xmlSchema/attribute.rb +104 -0
- data/lib/wsdl/xmlSchema/attributeGroup.rb +68 -0
- data/lib/wsdl/xmlSchema/choice.rb +58 -0
- data/lib/wsdl/xmlSchema/complexContent.rb +97 -0
- data/lib/wsdl/xmlSchema/complexExtension.rb +119 -0
- data/lib/wsdl/xmlSchema/complexRestriction.rb +104 -0
- data/lib/wsdl/xmlSchema/complexType.rb +193 -0
- data/lib/wsdl/xmlSchema/content.rb +95 -0
- data/lib/wsdl/xmlSchema/data.rb +116 -0
- data/lib/wsdl/xmlSchema/element.rb +153 -0
- data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
- data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
- data/lib/wsdl/xmlSchema/group.rb +100 -0
- data/lib/wsdl/xmlSchema/import.rb +53 -0
- data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
- data/lib/wsdl/xmlSchema/importer.rb +102 -0
- data/lib/wsdl/xmlSchema/include.rb +48 -0
- data/lib/wsdl/xmlSchema/length.rb +37 -0
- data/lib/wsdl/xmlSchema/list.rb +48 -0
- data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +37 -0
- data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/minlength.rb +37 -0
- data/lib/wsdl/xmlSchema/parser.rb +167 -0
- data/lib/wsdl/xmlSchema/pattern.rb +36 -0
- data/lib/wsdl/xmlSchema/ref.rb +33 -0
- data/lib/wsdl/xmlSchema/schema.rb +178 -0
- data/lib/wsdl/xmlSchema/sequence.rb +54 -0
- data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
- data/lib/wsdl/xmlSchema/simpleExtension.rb +62 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +132 -0
- data/lib/wsdl/xmlSchema/simpleType.rb +87 -0
- data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
- data/lib/wsdl/xmlSchema/union.rb +35 -0
- data/lib/wsdl/xmlSchema/unique.rb +34 -0
- data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +174 -0
- data/lib/xsd/charset.rb +193 -0
- data/lib/xsd/codegen.rb +12 -0
- data/lib/xsd/codegen/classdef.rb +208 -0
- data/lib/xsd/codegen/commentdef.rb +34 -0
- data/lib/xsd/codegen/gensupport.rb +273 -0
- data/lib/xsd/codegen/methoddef.rb +70 -0
- data/lib/xsd/codegen/moduledef.rb +208 -0
- data/lib/xsd/datatypes.rb +1466 -0
- data/lib/xsd/datatypes1999.rb +20 -0
- data/lib/xsd/iconvcharset.rb +39 -0
- data/lib/xsd/mapping.rb +68 -0
- data/lib/xsd/namedelements.rb +132 -0
- data/lib/xsd/ns.rb +182 -0
- data/lib/xsd/qname.rb +79 -0
- data/lib/xsd/xmlparser.rb +76 -0
- data/lib/xsd/xmlparser/libxmlparser.rb +115 -0
- data/lib/xsd/xmlparser/parser.rb +100 -0
- data/lib/xsd/xmlparser/rexmlparser.rb +58 -0
- data/lib/xsd/xmlparser/xmlparser.rb +50 -0
- data/lib/xsd/xmlparser/xmlscanner.rb +149 -0
- metadata +224 -0
@@ -0,0 +1,170 @@
|
|
1
|
+
# SOAP4R - Ruby type mapping schema definition utility.
|
2
|
+
# Copyright (C) 2000-2007 NAKAMURA Hiroshi <nahi@ruby-lang.org>.
|
3
|
+
|
4
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
5
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
6
|
+
# either the dual license version in 2003, or any later version.
|
7
|
+
|
8
|
+
|
9
|
+
require 'xsd/codegen/gensupport'
|
10
|
+
|
11
|
+
|
12
|
+
module SOAP
|
13
|
+
module Mapping
|
14
|
+
|
15
|
+
|
16
|
+
class SchemaElementDefinition
|
17
|
+
attr_reader :varname, :mapped_class, :elename, :minoccurs, :maxoccurs
|
18
|
+
|
19
|
+
def initialize(varname, mapped_class, elename, minoccurs, maxoccurs,
|
20
|
+
as_any, as_array)
|
21
|
+
@varname = varname
|
22
|
+
@mapped_class = mapped_class
|
23
|
+
@elename = elename
|
24
|
+
@minoccurs = minoccurs
|
25
|
+
@maxoccurs = maxoccurs
|
26
|
+
@as_any = as_any
|
27
|
+
@as_array = as_array
|
28
|
+
end
|
29
|
+
|
30
|
+
def as_any?
|
31
|
+
@as_any
|
32
|
+
end
|
33
|
+
|
34
|
+
def as_array?
|
35
|
+
@as_array
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
module SchemaComplexTypeDefinition
|
40
|
+
include Enumerable
|
41
|
+
|
42
|
+
def initialize
|
43
|
+
@content = []
|
44
|
+
@element_cache = {}
|
45
|
+
end
|
46
|
+
|
47
|
+
def is_concrete_definition
|
48
|
+
true
|
49
|
+
end
|
50
|
+
|
51
|
+
def <<(ele)
|
52
|
+
@content << ele
|
53
|
+
end
|
54
|
+
|
55
|
+
def each
|
56
|
+
@content.each do |ele|
|
57
|
+
yield ele
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def size
|
62
|
+
@content.size
|
63
|
+
end
|
64
|
+
|
65
|
+
def as_any?
|
66
|
+
false
|
67
|
+
end
|
68
|
+
|
69
|
+
def as_array?
|
70
|
+
false
|
71
|
+
end
|
72
|
+
|
73
|
+
def find_element(qname)
|
74
|
+
@element_cache[qname] ||= search_element(qname)
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def search_element(qname)
|
80
|
+
each do |ele|
|
81
|
+
if ele.respond_to?(:find_element)
|
82
|
+
found = ele.find_element(qname)
|
83
|
+
return found if found
|
84
|
+
else
|
85
|
+
# relaxed match
|
86
|
+
if ele.elename == qname or
|
87
|
+
(qname.namespace.nil? and ele.elename.name == qname.name)
|
88
|
+
return ele
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class SchemaEmptyDefinition
|
97
|
+
include SchemaComplexTypeDefinition
|
98
|
+
|
99
|
+
def initialize
|
100
|
+
super()
|
101
|
+
@content.freeze
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class SchemaSequenceDefinition
|
106
|
+
include SchemaComplexTypeDefinition
|
107
|
+
|
108
|
+
def initialize
|
109
|
+
super()
|
110
|
+
end
|
111
|
+
|
112
|
+
def choice?
|
113
|
+
false
|
114
|
+
end
|
115
|
+
|
116
|
+
# override
|
117
|
+
def as_array?
|
118
|
+
@as_array ||= false
|
119
|
+
end
|
120
|
+
|
121
|
+
def set_array
|
122
|
+
@as_array = true
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
class SchemaChoiceDefinition
|
127
|
+
include SchemaComplexTypeDefinition
|
128
|
+
|
129
|
+
def initialize
|
130
|
+
super()
|
131
|
+
end
|
132
|
+
|
133
|
+
def choice?
|
134
|
+
true
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
class SchemaDefinition
|
139
|
+
EMPTY = SchemaEmptyDefinition.new
|
140
|
+
|
141
|
+
attr_reader :class_for
|
142
|
+
attr_reader :elename, :type
|
143
|
+
attr_reader :qualified
|
144
|
+
attr_accessor :basetype
|
145
|
+
attr_accessor :attributes
|
146
|
+
attr_accessor :elements
|
147
|
+
|
148
|
+
def initialize(class_for, elename, type, anonymous, qualified)
|
149
|
+
@class_for = class_for
|
150
|
+
@elename = elename
|
151
|
+
@type = type
|
152
|
+
@anonymous = anonymous
|
153
|
+
@qualified = qualified
|
154
|
+
@basetype = nil
|
155
|
+
@elements = EMPTY
|
156
|
+
@attributes = nil
|
157
|
+
end
|
158
|
+
|
159
|
+
def is_anonymous?
|
160
|
+
@anonymous
|
161
|
+
end
|
162
|
+
|
163
|
+
def choice?
|
164
|
+
@elements.choice?
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# SOAP4R - Base type mapping definition
|
2
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
3
|
+
|
4
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
5
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
6
|
+
# either the dual license version in 2003, or any later version.
|
7
|
+
|
8
|
+
|
9
|
+
module SOAP
|
10
|
+
|
11
|
+
|
12
|
+
TypeMap = {
|
13
|
+
XSD::XSDAnySimpleType::Type => SOAPAnySimpleType,
|
14
|
+
|
15
|
+
XSD::XSDString::Type => SOAPString,
|
16
|
+
XSD::XSDNormalizedString::Type => SOAPNormalizedString,
|
17
|
+
XSD::XSDToken::Type => SOAPToken,
|
18
|
+
XSD::XSDLanguage::Type => SOAPLanguage,
|
19
|
+
XSD::XSDNMTOKEN::Type => SOAPNMTOKEN,
|
20
|
+
XSD::XSDNMTOKENS::Type => SOAPNMTOKENS,
|
21
|
+
XSD::XSDName::Type => SOAPName,
|
22
|
+
XSD::XSDNCName::Type => SOAPNCName,
|
23
|
+
XSD::XSDID::Type => SOAPID,
|
24
|
+
XSD::XSDIDREF::Type => SOAPIDREF,
|
25
|
+
XSD::XSDIDREFS::Type => SOAPIDREFS,
|
26
|
+
XSD::XSDENTITY::Type => SOAPENTITY,
|
27
|
+
XSD::XSDENTITIES::Type => SOAPENTITIES,
|
28
|
+
XSD::XSDBoolean::Type => SOAPBoolean,
|
29
|
+
XSD::XSDDecimal::Type => SOAPDecimal,
|
30
|
+
XSD::XSDFloat::Type => SOAPFloat,
|
31
|
+
XSD::XSDDouble::Type => SOAPDouble,
|
32
|
+
XSD::XSDDuration::Type => SOAPDuration,
|
33
|
+
XSD::XSDDateTime::Type => SOAPDateTime,
|
34
|
+
XSD::XSDTime::Type => SOAPTime,
|
35
|
+
XSD::XSDDate::Type => SOAPDate,
|
36
|
+
XSD::XSDGYearMonth::Type => SOAPGYearMonth,
|
37
|
+
XSD::XSDGYear::Type => SOAPGYear,
|
38
|
+
XSD::XSDGMonthDay::Type => SOAPGMonthDay,
|
39
|
+
XSD::XSDGDay::Type => SOAPGDay,
|
40
|
+
XSD::XSDGMonth::Type => SOAPGMonth,
|
41
|
+
XSD::XSDHexBinary::Type => SOAPHexBinary,
|
42
|
+
XSD::XSDBase64Binary::Type => SOAPBase64,
|
43
|
+
XSD::XSDAnyURI::Type => SOAPAnyURI,
|
44
|
+
XSD::XSDQName::Type => SOAPQName,
|
45
|
+
XSD::XSDInteger::Type => SOAPInteger,
|
46
|
+
XSD::XSDNonPositiveInteger::Type => SOAPNonPositiveInteger,
|
47
|
+
XSD::XSDNegativeInteger::Type => SOAPNegativeInteger,
|
48
|
+
XSD::XSDLong::Type => SOAPLong,
|
49
|
+
XSD::XSDInt::Type => SOAPInt,
|
50
|
+
XSD::XSDShort::Type => SOAPShort,
|
51
|
+
XSD::XSDByte::Type => SOAPByte,
|
52
|
+
XSD::XSDNonNegativeInteger::Type => SOAPNonNegativeInteger,
|
53
|
+
XSD::XSDUnsignedLong::Type => SOAPUnsignedLong,
|
54
|
+
XSD::XSDUnsignedInt::Type => SOAPUnsignedInt,
|
55
|
+
XSD::XSDUnsignedShort::Type => SOAPUnsignedShort,
|
56
|
+
XSD::XSDUnsignedByte::Type => SOAPUnsignedByte,
|
57
|
+
XSD::XSDPositiveInteger::Type => SOAPPositiveInteger,
|
58
|
+
|
59
|
+
# soap4r does not use soapenc types actively but it should be accepted.
|
60
|
+
SOAP::SOAPString::SOAPENCType => SOAPString,
|
61
|
+
SOAP::SOAPNormalizedString::Type => SOAPNormalizedString,
|
62
|
+
SOAP::SOAPToken::Type => SOAPToken,
|
63
|
+
SOAP::SOAPLanguage::Type => SOAPLanguage,
|
64
|
+
SOAP::SOAPNMTOKEN::Type => SOAPNMTOKEN,
|
65
|
+
SOAP::SOAPNMTOKENS::Type => SOAPNMTOKENS,
|
66
|
+
SOAP::SOAPName::Type => SOAPName,
|
67
|
+
SOAP::SOAPNCName::Type => SOAPNCName,
|
68
|
+
SOAP::SOAPID::Type => SOAPID,
|
69
|
+
SOAP::SOAPIDREF::Type => SOAPIDREF,
|
70
|
+
SOAP::SOAPIDREFS::Type => SOAPIDREFS,
|
71
|
+
SOAP::SOAPENTITY::Type => SOAPENTITY,
|
72
|
+
SOAP::SOAPENTITIES::Type => SOAPENTITIES,
|
73
|
+
SOAP::SOAPBoolean::SOAPENCType => SOAPBoolean,
|
74
|
+
SOAP::SOAPDecimal::SOAPENCType => SOAPDecimal,
|
75
|
+
SOAP::SOAPFloat::SOAPENCType => SOAPFloat,
|
76
|
+
SOAP::SOAPDouble::SOAPENCType => SOAPDouble,
|
77
|
+
SOAP::SOAPDuration::SOAPENCType => SOAPDuration,
|
78
|
+
SOAP::SOAPDateTime::SOAPENCType => SOAPDateTime,
|
79
|
+
SOAP::SOAPTime::SOAPENCType => SOAPTime,
|
80
|
+
SOAP::SOAPDate::SOAPENCType => SOAPDate,
|
81
|
+
SOAP::SOAPGYearMonth::SOAPENCType => SOAPGYearMonth,
|
82
|
+
SOAP::SOAPGYear::SOAPENCType => SOAPGYear,
|
83
|
+
SOAP::SOAPGMonthDay::SOAPENCType => SOAPGMonthDay,
|
84
|
+
SOAP::SOAPGDay::SOAPENCType => SOAPGDay,
|
85
|
+
SOAP::SOAPGMonth::SOAPENCType => SOAPGMonth,
|
86
|
+
SOAP::SOAPHexBinary::SOAPENCType => SOAPHexBinary,
|
87
|
+
SOAP::SOAPBase64::SOAPENCType => SOAPBase64,
|
88
|
+
SOAP::SOAPAnyURI::SOAPENCType => SOAPAnyURI,
|
89
|
+
SOAP::SOAPQName::SOAPENCType => SOAPQName,
|
90
|
+
SOAP::SOAPInteger::SOAPENCType => SOAPInteger,
|
91
|
+
SOAP::SOAPNonPositiveInteger::SOAPENCType => SOAPNonPositiveInteger,
|
92
|
+
SOAP::SOAPNegativeInteger::SOAPENCType => SOAPNegativeInteger,
|
93
|
+
SOAP::SOAPLong::SOAPENCType => SOAPLong,
|
94
|
+
SOAP::SOAPInt::SOAPENCType => SOAPInt,
|
95
|
+
SOAP::SOAPShort::SOAPENCType => SOAPShort,
|
96
|
+
SOAP::SOAPByte::SOAPENCType => SOAPByte,
|
97
|
+
SOAP::SOAPNonNegativeInteger::SOAPENCType => SOAPNonNegativeInteger,
|
98
|
+
SOAP::SOAPUnsignedLong::SOAPENCType => SOAPUnsignedLong,
|
99
|
+
SOAP::SOAPUnsignedInt::SOAPENCType => SOAPUnsignedInt,
|
100
|
+
SOAP::SOAPUnsignedShort::SOAPENCType => SOAPUnsignedShort,
|
101
|
+
SOAP::SOAPUnsignedByte::SOAPENCType => SOAPUnsignedByte,
|
102
|
+
SOAP::SOAPPositiveInteger::SOAPENCType => SOAPPositiveInteger,
|
103
|
+
}
|
104
|
+
|
105
|
+
|
106
|
+
end
|
@@ -0,0 +1,211 @@
|
|
1
|
+
# SOAP4R - WSDL encoded mapping registry.
|
2
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
3
|
+
|
4
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
5
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
6
|
+
# either the dual license version in 2003, or any later version.
|
7
|
+
|
8
|
+
|
9
|
+
require 'xsd/qname'
|
10
|
+
require 'xsd/namedelements'
|
11
|
+
require 'soap/baseData'
|
12
|
+
require 'soap/mapping/mapping'
|
13
|
+
require 'soap/mapping/typeMap'
|
14
|
+
|
15
|
+
|
16
|
+
module SOAP
|
17
|
+
module Mapping
|
18
|
+
|
19
|
+
|
20
|
+
class WSDLEncodedRegistry < EncodedRegistry
|
21
|
+
attr_reader :definedelements
|
22
|
+
attr_reader :definedtypes
|
23
|
+
|
24
|
+
def initialize(definedtypes = XSD::NamedElements::Empty)
|
25
|
+
super()
|
26
|
+
@definedtypes = definedtypes
|
27
|
+
# @definedelements = definedelements needed?
|
28
|
+
# For mapping AnyType element.
|
29
|
+
@rubytype_factory = RubytypeFactory.new(
|
30
|
+
:allow_untyped_struct => true,
|
31
|
+
:allow_original_mapping => true
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def obj2soap(obj, qname = nil)
|
36
|
+
soap_obj = nil
|
37
|
+
if type = @definedtypes[qname]
|
38
|
+
soap_obj = obj2typesoap(obj, type)
|
39
|
+
else
|
40
|
+
soap_obj = any2soap(obj, qname)
|
41
|
+
end
|
42
|
+
return soap_obj if soap_obj
|
43
|
+
if @excn_handler_obj2soap
|
44
|
+
soap_obj = @excn_handler_obj2soap.call(obj) { |yield_obj|
|
45
|
+
Mapping._obj2soap(yield_obj, self)
|
46
|
+
}
|
47
|
+
return soap_obj if soap_obj
|
48
|
+
end
|
49
|
+
if qname
|
50
|
+
raise MappingError.new("cannot map #{obj.class.name} as #{qname}")
|
51
|
+
else
|
52
|
+
raise MappingError.new("cannot map #{obj.class.name} to SOAP/OM")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# map anything for now: must refer WSDL while mapping. [ToDo]
|
57
|
+
def soap2obj(node, obj_class = nil)
|
58
|
+
cause = nil
|
59
|
+
begin
|
60
|
+
unless obj_class
|
61
|
+
typestr = Mapping.safeconstname(node.elename.name)
|
62
|
+
obj_class = Mapping.class_from_name(typestr)
|
63
|
+
end
|
64
|
+
return Mapping._soap2obj(node, Mapping::DefaultRegistry, obj_class)
|
65
|
+
rescue MappingError
|
66
|
+
cause = $!
|
67
|
+
end
|
68
|
+
if @excn_handler_soap2obj
|
69
|
+
begin
|
70
|
+
return @excn_handler_soap2obj.call(node) { |yield_node|
|
71
|
+
Mapping._soap2obj(yield_node, self)
|
72
|
+
}
|
73
|
+
rescue Exception
|
74
|
+
end
|
75
|
+
end
|
76
|
+
raise MappingError.new("cannot map #{node.type.name} to Ruby object", cause)
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def any2soap(obj, qname)
|
82
|
+
ele = nil
|
83
|
+
if obj.nil?
|
84
|
+
ele = SOAPNil.new
|
85
|
+
elsif qname.nil? or qname == XSD::AnyTypeName
|
86
|
+
ele = @rubytype_factory.obj2soap(nil, obj, nil, self)
|
87
|
+
elsif obj.is_a?(XSD::NSDBase)
|
88
|
+
ele = soap2soap(obj, qname)
|
89
|
+
elsif type = TypeMap[qname]
|
90
|
+
ele = base2soap(obj, type)
|
91
|
+
end
|
92
|
+
add_attributes2soap(obj, ele) unless ele.nil?
|
93
|
+
ele
|
94
|
+
end
|
95
|
+
|
96
|
+
def soap2soap(obj, type_qname)
|
97
|
+
if obj.is_a?(SOAPBasetype)
|
98
|
+
obj
|
99
|
+
elsif obj.is_a?(SOAPStruct) && (type = @definedtypes[type_qname])
|
100
|
+
soap_obj = obj
|
101
|
+
mark_marshalled_obj(obj, soap_obj)
|
102
|
+
elements2soap(obj, soap_obj, type.elements)
|
103
|
+
soap_obj
|
104
|
+
elsif obj.is_a?(SOAPArray) && (type = @definedtypes[type_qname])
|
105
|
+
soap_obj = obj
|
106
|
+
contenttype = type.child_type
|
107
|
+
mark_marshalled_obj(obj, soap_obj)
|
108
|
+
obj.replace do |ele|
|
109
|
+
Mapping._obj2soap(ele, self, contenttype)
|
110
|
+
end
|
111
|
+
soap_obj
|
112
|
+
else
|
113
|
+
nil
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def obj2typesoap(obj, type)
|
118
|
+
if type.is_a?(::WSDL::XMLSchema::SimpleType)
|
119
|
+
simpleobj2soap(obj, type)
|
120
|
+
else
|
121
|
+
complexobj2soap(obj, type)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def simpleobj2soap(obj, type)
|
126
|
+
type.check_lexical_format(obj)
|
127
|
+
return SOAPNil.new if obj.nil? # TODO: check nillable.
|
128
|
+
if type.base
|
129
|
+
ele = base2soap(obj, TypeMap[type.base])
|
130
|
+
ele.type = type.name
|
131
|
+
elsif type.list
|
132
|
+
value = obj.is_a?(Array) ? obj.join(" ") : obj.to_s
|
133
|
+
ele = base2soap(value, SOAP::SOAPString)
|
134
|
+
else
|
135
|
+
raise MappingError.new("unsupported simpleType: #{type}")
|
136
|
+
end
|
137
|
+
ele
|
138
|
+
end
|
139
|
+
|
140
|
+
def complexobj2soap(obj, type)
|
141
|
+
case type.compoundtype
|
142
|
+
when :TYPE_STRUCT
|
143
|
+
struct2soap(obj, type.name, type)
|
144
|
+
when :TYPE_ARRAY
|
145
|
+
array2soap(obj, type.name, type)
|
146
|
+
when :TYPE_MAP
|
147
|
+
map2soap(obj, type.name, type)
|
148
|
+
when :TYPE_SIMPLE
|
149
|
+
simpleobj2soap(obj, type.simplecontent)
|
150
|
+
when :TYPE_EMPTY
|
151
|
+
raise MappingError.new("should be empty") unless obj.nil?
|
152
|
+
SOAPNil.new
|
153
|
+
else
|
154
|
+
raise MappingError.new("unknown compound type: #{type.compoundtype}")
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def struct2soap(obj, type_qname, type)
|
159
|
+
return SOAPNil.new if obj.nil? # ToDo: check nillable.
|
160
|
+
soap_obj = SOAPStruct.new(type_qname)
|
161
|
+
mark_marshalled_obj(obj, soap_obj)
|
162
|
+
elements2soap(obj, soap_obj, type.elements)
|
163
|
+
soap_obj
|
164
|
+
end
|
165
|
+
|
166
|
+
def array2soap(obj, type_qname, type)
|
167
|
+
return SOAPNil.new if obj.nil? # ToDo: check nillable.
|
168
|
+
arytype = type.child_type
|
169
|
+
soap_obj = SOAPArray.new(ValueArrayName, 1, arytype)
|
170
|
+
unless obj.nil?
|
171
|
+
mark_marshalled_obj(obj, soap_obj)
|
172
|
+
obj.each do |item|
|
173
|
+
soap_obj.add(Mapping._obj2soap(item, self, arytype))
|
174
|
+
end
|
175
|
+
end
|
176
|
+
soap_obj
|
177
|
+
end
|
178
|
+
|
179
|
+
MapKeyName = XSD::QName.new(nil, "key")
|
180
|
+
MapValueName = XSD::QName.new(nil, "value")
|
181
|
+
def map2soap(obj, type_qname, type)
|
182
|
+
return SOAPNil.new if obj.nil? # ToDo: check nillable.
|
183
|
+
keytype = type.child_type(MapKeyName) || XSD::AnyTypeName
|
184
|
+
valuetype = type.child_type(MapValueName) || XSD::AnyTypeName
|
185
|
+
soap_obj = SOAPStruct.new(MapQName)
|
186
|
+
unless obj.nil?
|
187
|
+
mark_marshalled_obj(obj, soap_obj)
|
188
|
+
obj.each do |key, value|
|
189
|
+
elem = SOAPStruct.new
|
190
|
+
elem.add("key", Mapping._obj2soap(key, self, keytype))
|
191
|
+
elem.add("value", Mapping._obj2soap(value, self, valuetype))
|
192
|
+
# ApacheAxis allows only 'item' here.
|
193
|
+
soap_obj.add("item", elem)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
soap_obj
|
197
|
+
end
|
198
|
+
|
199
|
+
def elements2soap(obj, soap_obj, elements)
|
200
|
+
elements.each do |element|
|
201
|
+
name = element.name.name
|
202
|
+
child_obj = Mapping.get_attribute(obj, name)
|
203
|
+
soap_obj.add(name,
|
204
|
+
Mapping._obj2soap(child_obj, self, element.type || element.name))
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
|
210
|
+
end
|
211
|
+
end
|