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.
Files changed (161) hide show
  1. data/bin/wsdl2ruby.rb +137 -0
  2. data/bin/xsd2ruby.rb +90 -0
  3. data/lib/soap/attachment.rb +108 -0
  4. data/lib/soap/attrproxy.rb +34 -0
  5. data/lib/soap/baseData.rb +1094 -0
  6. data/lib/soap/element.rb +277 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
  8. data/lib/soap/encodingstyle/handler.rb +120 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +195 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +559 -0
  11. data/lib/soap/filter.rb +13 -0
  12. data/lib/soap/filter/filterchain.rb +51 -0
  13. data/lib/soap/filter/handler.rb +31 -0
  14. data/lib/soap/filter/streamhandler.rb +29 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +61 -0
  17. data/lib/soap/header/handlerset.rb +70 -0
  18. data/lib/soap/header/mappinghandler.rb +47 -0
  19. data/lib/soap/header/simplehandler.rb +44 -0
  20. data/lib/soap/httpconfigloader.rb +141 -0
  21. data/lib/soap/mapping.rb +12 -0
  22. data/lib/soap/mapping/encodedregistry.rb +537 -0
  23. data/lib/soap/mapping/factory.rb +388 -0
  24. data/lib/soap/mapping/literalregistry.rb +391 -0
  25. data/lib/soap/mapping/mapping.rb +576 -0
  26. data/lib/soap/mapping/registry.rb +295 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  28. data/lib/soap/mapping/schemadefinition.rb +170 -0
  29. data/lib/soap/mapping/typeMap.rb +106 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +211 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +248 -0
  32. data/lib/soap/marshal.rb +59 -0
  33. data/lib/soap/mimemessage.rb +241 -0
  34. data/lib/soap/nestedexception.rb +42 -0
  35. data/lib/soap/netHttpClient.rb +241 -0
  36. data/lib/soap/ns.rb +34 -0
  37. data/lib/soap/parser.rb +252 -0
  38. data/lib/soap/processor.rb +66 -0
  39. data/lib/soap/property.rb +319 -0
  40. data/lib/soap/proxy.rb +14 -0
  41. data/lib/soap/rpc/cgistub.rb +247 -0
  42. data/lib/soap/rpc/driver.rb +221 -0
  43. data/lib/soap/rpc/element.rb +374 -0
  44. data/lib/soap/rpc/httpserver.rb +142 -0
  45. data/lib/soap/rpc/methodDef.rb +68 -0
  46. data/lib/soap/rpc/proxy.rb +572 -0
  47. data/lib/soap/rpc/router.rb +662 -0
  48. data/lib/soap/rpc/rpc.rb +25 -0
  49. data/lib/soap/rpc/soaplet.rb +200 -0
  50. data/lib/soap/rpc/standaloneServer.rb +43 -0
  51. data/lib/soap/soap.rb +151 -0
  52. data/lib/soap/streamHandler.rb +301 -0
  53. data/lib/soap/wsdlDriver.rb +164 -0
  54. data/lib/wsdl/binding.rb +65 -0
  55. data/lib/wsdl/data.rb +64 -0
  56. data/lib/wsdl/definitions.rb +236 -0
  57. data/lib/wsdl/documentation.rb +32 -0
  58. data/lib/wsdl/import.rb +80 -0
  59. data/lib/wsdl/importer.rb +38 -0
  60. data/lib/wsdl/info.rb +50 -0
  61. data/lib/wsdl/message.rb +54 -0
  62. data/lib/wsdl/operation.rb +151 -0
  63. data/lib/wsdl/operationBinding.rb +240 -0
  64. data/lib/wsdl/param.rb +93 -0
  65. data/lib/wsdl/parser.rb +164 -0
  66. data/lib/wsdl/part.rb +52 -0
  67. data/lib/wsdl/port.rb +66 -0
  68. data/lib/wsdl/portType.rb +75 -0
  69. data/lib/wsdl/service.rb +61 -0
  70. data/lib/wsdl/soap/address.rb +40 -0
  71. data/lib/wsdl/soap/binding.rb +49 -0
  72. data/lib/wsdl/soap/body.rb +58 -0
  73. data/lib/wsdl/soap/cgiStubCreator.rb +92 -0
  74. data/lib/wsdl/soap/classDefCreator.rb +433 -0
  75. data/lib/wsdl/soap/classDefCreatorSupport.rb +240 -0
  76. data/lib/wsdl/soap/classNameCreator.rb +54 -0
  77. data/lib/wsdl/soap/clientSkeltonCreator.rb +104 -0
  78. data/lib/wsdl/soap/complexType.rb +173 -0
  79. data/lib/wsdl/soap/data.rb +42 -0
  80. data/lib/wsdl/soap/definitions.rb +200 -0
  81. data/lib/wsdl/soap/driverCreator.rb +118 -0
  82. data/lib/wsdl/soap/element.rb +33 -0
  83. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +73 -0
  84. data/lib/wsdl/soap/fault.rb +56 -0
  85. data/lib/wsdl/soap/header.rb +86 -0
  86. data/lib/wsdl/soap/headerfault.rb +56 -0
  87. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +115 -0
  88. data/lib/wsdl/soap/mappingRegistryCreator.rb +58 -0
  89. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +376 -0
  90. data/lib/wsdl/soap/methodDefCreator.rb +199 -0
  91. data/lib/wsdl/soap/operation.rb +112 -0
  92. data/lib/wsdl/soap/servantSkeltonCreator.rb +89 -0
  93. data/lib/wsdl/soap/servletStubCreator.rb +104 -0
  94. data/lib/wsdl/soap/standaloneServerStubCreator.rb +100 -0
  95. data/lib/wsdl/soap/wsdl2ruby.rb +217 -0
  96. data/lib/wsdl/types.rb +44 -0
  97. data/lib/wsdl/wsdl.rb +24 -0
  98. data/lib/wsdl/xmlSchema/all.rb +24 -0
  99. data/lib/wsdl/xmlSchema/annotation.rb +34 -0
  100. data/lib/wsdl/xmlSchema/any.rb +61 -0
  101. data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
  102. data/lib/wsdl/xmlSchema/attribute.rb +104 -0
  103. data/lib/wsdl/xmlSchema/attributeGroup.rb +68 -0
  104. data/lib/wsdl/xmlSchema/choice.rb +58 -0
  105. data/lib/wsdl/xmlSchema/complexContent.rb +97 -0
  106. data/lib/wsdl/xmlSchema/complexExtension.rb +119 -0
  107. data/lib/wsdl/xmlSchema/complexRestriction.rb +104 -0
  108. data/lib/wsdl/xmlSchema/complexType.rb +193 -0
  109. data/lib/wsdl/xmlSchema/content.rb +95 -0
  110. data/lib/wsdl/xmlSchema/data.rb +116 -0
  111. data/lib/wsdl/xmlSchema/element.rb +153 -0
  112. data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  113. data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
  114. data/lib/wsdl/xmlSchema/group.rb +100 -0
  115. data/lib/wsdl/xmlSchema/import.rb +53 -0
  116. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  117. data/lib/wsdl/xmlSchema/importer.rb +102 -0
  118. data/lib/wsdl/xmlSchema/include.rb +48 -0
  119. data/lib/wsdl/xmlSchema/length.rb +37 -0
  120. data/lib/wsdl/xmlSchema/list.rb +48 -0
  121. data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
  122. data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
  123. data/lib/wsdl/xmlSchema/maxlength.rb +37 -0
  124. data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
  125. data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
  126. data/lib/wsdl/xmlSchema/minlength.rb +37 -0
  127. data/lib/wsdl/xmlSchema/parser.rb +167 -0
  128. data/lib/wsdl/xmlSchema/pattern.rb +36 -0
  129. data/lib/wsdl/xmlSchema/ref.rb +33 -0
  130. data/lib/wsdl/xmlSchema/schema.rb +178 -0
  131. data/lib/wsdl/xmlSchema/sequence.rb +54 -0
  132. data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
  133. data/lib/wsdl/xmlSchema/simpleExtension.rb +62 -0
  134. data/lib/wsdl/xmlSchema/simpleRestriction.rb +132 -0
  135. data/lib/wsdl/xmlSchema/simpleType.rb +87 -0
  136. data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
  137. data/lib/wsdl/xmlSchema/union.rb +35 -0
  138. data/lib/wsdl/xmlSchema/unique.rb +34 -0
  139. data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
  140. data/lib/wsdl/xmlSchema/xsd2ruby.rb +174 -0
  141. data/lib/xsd/charset.rb +193 -0
  142. data/lib/xsd/codegen.rb +12 -0
  143. data/lib/xsd/codegen/classdef.rb +208 -0
  144. data/lib/xsd/codegen/commentdef.rb +34 -0
  145. data/lib/xsd/codegen/gensupport.rb +273 -0
  146. data/lib/xsd/codegen/methoddef.rb +70 -0
  147. data/lib/xsd/codegen/moduledef.rb +208 -0
  148. data/lib/xsd/datatypes.rb +1466 -0
  149. data/lib/xsd/datatypes1999.rb +20 -0
  150. data/lib/xsd/iconvcharset.rb +39 -0
  151. data/lib/xsd/mapping.rb +68 -0
  152. data/lib/xsd/namedelements.rb +132 -0
  153. data/lib/xsd/ns.rb +182 -0
  154. data/lib/xsd/qname.rb +79 -0
  155. data/lib/xsd/xmlparser.rb +76 -0
  156. data/lib/xsd/xmlparser/libxmlparser.rb +115 -0
  157. data/lib/xsd/xmlparser/parser.rb +100 -0
  158. data/lib/xsd/xmlparser/rexmlparser.rb +58 -0
  159. data/lib/xsd/xmlparser/xmlparser.rb +50 -0
  160. data/lib/xsd/xmlparser/xmlscanner.rb +149 -0
  161. 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