soap4r 1.5.7 → 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 +8 -2
- data/lib/soap/baseData.rb +93 -43
- data/lib/soap/element.rb +11 -8
- data/lib/soap/encodingstyle/handler.rb +15 -4
- data/lib/soap/encodingstyle/literalHandler.rb +18 -24
- data/lib/soap/encodingstyle/soapHandler.rb +34 -77
- data/lib/soap/generator.rb +74 -48
- data/lib/soap/header/handler.rb +1 -1
- data/lib/soap/header/mappinghandler.rb +47 -0
- data/lib/soap/mapping/encodedregistry.rb +19 -13
- data/lib/soap/mapping/factory.rb +19 -3
- data/lib/soap/mapping/literalregistry.rb +47 -35
- data/lib/soap/mapping/mapping.rb +92 -24
- data/lib/soap/mapping/registry.rb +34 -18
- data/lib/soap/mapping/schemadefinition.rb +8 -1
- data/lib/soap/mapping/typeMap.rb +18 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +8 -50
- data/lib/soap/mapping/wsdlliteralregistry.rb +45 -39
- data/lib/soap/nestedexception.rb +42 -0
- data/lib/soap/netHttpClient.rb +1 -0
- data/lib/soap/ns.rb +34 -0
- data/lib/soap/parser.rb +32 -29
- data/lib/soap/processor.rb +1 -1
- data/lib/soap/rpc/driver.rb +1 -0
- data/lib/soap/rpc/element.rb +18 -6
- data/lib/soap/rpc/httpserver.rb +38 -24
- data/lib/soap/rpc/proxy.rb +14 -11
- data/lib/soap/rpc/router.rb +4 -1
- data/lib/soap/soap.rb +7 -6
- data/lib/soap/wsdlDriver.rb +29 -8
- data/lib/tags +5690 -0
- data/lib/wsdl/definitions.rb +26 -40
- data/lib/wsdl/info.rb +11 -0
- data/lib/wsdl/parser.rb +2 -2
- data/lib/wsdl/soap/cgiStubCreator.rb +10 -5
- data/lib/wsdl/soap/classDefCreator.rb +140 -113
- data/lib/wsdl/soap/classDefCreatorSupport.rb +94 -12
- data/lib/wsdl/soap/classNameCreator.rb +54 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +6 -5
- data/lib/wsdl/soap/complexType.rb +10 -1
- data/lib/wsdl/soap/definitions.rb +4 -0
- data/lib/wsdl/soap/driverCreator.rb +14 -6
- data/lib/wsdl/soap/element.rb +4 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +11 -55
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +28 -126
- data/lib/wsdl/soap/mappingRegistryCreator.rb +9 -3
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +209 -94
- data/lib/wsdl/soap/methodDefCreator.rb +12 -16
- data/lib/wsdl/soap/servantSkeltonCreator.rb +3 -2
- data/lib/wsdl/soap/servletStubCreator.rb +107 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +10 -5
- data/lib/wsdl/soap/wsdl2ruby.rb +28 -13
- data/lib/wsdl/wsdl.rb +2 -1
- data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
- data/lib/wsdl/xmlSchema/attributeGroup.rb +86 -0
- data/lib/wsdl/xmlSchema/choice.rb +4 -1
- data/lib/wsdl/xmlSchema/complexContent.rb +1 -1
- data/lib/wsdl/xmlSchema/complexExtension.rb +9 -1
- data/lib/wsdl/xmlSchema/complexRestriction.rb +8 -0
- data/lib/wsdl/xmlSchema/complexType.rb +38 -5
- data/lib/wsdl/xmlSchema/data.rb +30 -7
- data/lib/wsdl/xmlSchema/element.rb +10 -2
- data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
- data/lib/wsdl/xmlSchema/group.rb +118 -0
- data/lib/wsdl/xmlSchema/import.rb +11 -23
- data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
- data/lib/wsdl/xmlSchema/include.rb +11 -17
- data/lib/wsdl/xmlSchema/length.rb +3 -1
- data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +3 -1
- data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/minlength.rb +3 -1
- data/lib/wsdl/xmlSchema/schema.rb +34 -0
- data/lib/wsdl/xmlSchema/sequence.rb +4 -1
- data/lib/wsdl/xmlSchema/simpleExtension.rb +8 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +49 -8
- data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
- data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +13 -4
- data/lib/xsd/charset.rb +8 -6
- data/lib/xsd/codegen/classdef.rb +5 -0
- data/lib/xsd/codegen/moduledef.rb +17 -0
- data/lib/xsd/datatypes.rb +165 -20
- data/lib/xsd/mapping.rb +13 -5
- data/lib/xsd/namedelements.rb +8 -0
- data/lib/xsd/ns.rb +50 -14
- data/lib/xsd/qname.rb +3 -2
- data/lib/xsd/xmlparser.rb +4 -3
- data/test/soap/asp.net/test_aspdotnet.rb +1 -1
- data/test/soap/auth/test_basic.rb +4 -3
- data/test/soap/auth/test_digest.rb +4 -3
- data/test/soap/calc/test_calc.rb +6 -4
- data/test/soap/calc/test_calc2.rb +6 -4
- data/test/soap/calc/test_calc_cgi.rb +6 -4
- data/test/soap/fault/test_customfault.rb +6 -4
- data/test/soap/fault/test_soaparray.rb +35 -0
- data/test/soap/filter/test_filter.rb +2 -2
- data/test/soap/header/test_authheader.rb +2 -2
- data/test/soap/header/test_authheader_cgi.rb +3 -3
- data/test/soap/header/test_simplehandler.rb +2 -2
- data/test/soap/helloworld/test_helloworld.rb +6 -4
- data/test/soap/ssl/test_ssl.rb +1 -1
- data/test/soap/struct/test_struct.rb +2 -2
- data/test/soap/swa/test_file.rb +6 -4
- data/test/soap/test_basetype.rb +4 -4
- data/test/soap/test_cookie.rb +2 -2
- data/test/soap/test_custom_ns.rb +50 -8
- data/test/soap/test_custommap.rb +6 -4
- data/test/soap/test_empty.rb +6 -4
- data/test/soap/test_envelopenamespace.rb +2 -2
- data/test/soap/test_extraattr.rb +6 -7
- data/test/soap/test_generator.rb +27 -0
- data/test/soap/test_mapping.rb +10 -0
- data/test/soap/test_nestedexception.rb +56 -0
- data/test/soap/test_nil.rb +6 -4
- data/test/soap/test_no_indent.rb +6 -4
- data/test/soap/test_response_as_xml.rb +2 -2
- data/test/soap/test_streamhandler.rb +6 -3
- data/test/soap/test_styleuse.rb +2 -2
- data/test/soap/wsdlDriver/test_calc.rb +2 -2
- data/test/soap/wsdlDriver/test_document.rb +2 -2
- data/test/soap/wsdlDriver/test_simpletype.rb +2 -2
- data/test/wsdl/abstract/test_abstract.rb +1 -1
- data/test/wsdl/anonymous/expectedClassDef.rb +128 -0
- data/test/wsdl/anonymous/expectedDriver.rb +59 -0
- data/test/wsdl/anonymous/expectedMappingRegistry.rb +176 -0
- data/test/wsdl/anonymous/lp.wsdl +147 -0
- data/test/wsdl/anonymous/test_anonymous.rb +130 -0
- data/test/wsdl/any/expectedDriver.rb +3 -2
- data/test/wsdl/any/expectedEcho.rb +22 -2
- data/test/wsdl/any/expectedMappingRegistry.rb +63 -0
- data/test/wsdl/any/expectedService.rb +3 -1
- data/test/wsdl/any/test_any.rb +2 -7
- data/test/wsdl/axisArray/axisArray.wsdl +31 -4
- data/test/wsdl/axisArray/test_axisarray.rb +58 -3
- data/test/wsdl/choice/choice.wsdl +39 -0
- data/test/wsdl/choice/test_choice.rb +134 -7
- data/test/wsdl/complexcontent/test_echo.rb +1 -1
- data/test/wsdl/datetime/test_datetime.rb +2 -2
- data/test/wsdl/document/array/double.wsdl +45 -6
- data/test/wsdl/document/array/test_array.rb +68 -1
- data/test/wsdl/document/document.wsdl +2 -0
- data/test/wsdl/document/test_nosoapaction.rb +1 -1
- data/test/wsdl/document/test_number.rb +1 -1
- data/test/wsdl/document/test_rpc.rb +78 -9
- data/test/wsdl/fault/test_fault.rb +1 -1
- data/test/wsdl/fault/test_multifault.rb +1 -1
- data/test/wsdl/group/expectedClassdef.rb +58 -0
- data/test/wsdl/group/expectedDriver.rb +51 -0
- data/test/wsdl/group/expectedMappingRegistry.rb +67 -0
- data/test/wsdl/group/group.wsdl +88 -0
- data/test/wsdl/group/test_rpc.rb +145 -0
- data/test/wsdl/list/test_list.rb +1 -1
- data/test/wsdl/map/test_map.rb +2 -2
- data/test/wsdl/marshal/person_org.rb +5 -0
- data/test/wsdl/multiplefault.wsdl +11 -4
- data/test/wsdl/oneway/test_oneway.rb +1 -1
- data/test/wsdl/overload/test_overload.rb +1 -1
- data/test/wsdl/qualified/test_qualified.rb +1 -1
- data/test/wsdl/qualified/test_unqualified.rb +1 -1
- data/test/wsdl/raa/RAAService.rb +62 -57
- data/test/wsdl/raa/expectedClassDef.rb +100 -0
- data/test/wsdl/raa/expectedDriver.rb +96 -0
- data/test/wsdl/raa/expectedMappingRegistry.rb +121 -0
- data/test/wsdl/raa/test_raa.rb +54 -19
- data/test/wsdl/ref/expectedDriver.rb +1 -1
- data/test/wsdl/ref/expectedProduct.rb +101 -16
- data/test/wsdl/ref/test_ref.rb +2 -1
- data/test/wsdl/rpc/test_rpc.rb +1 -2
- data/test/wsdl/rpc/test_rpc_lit.rb +13 -13
- data/test/wsdl/simplecontent/test_simplecontent.rb +5 -5
- data/test/wsdl/simpletype/rpc/expectedDriver.rb +3 -2
- data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +2 -0
- data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +10 -17
- data/test/wsdl/simpletype/rpc/expectedService.rb +4 -2
- data/test/wsdl/simpletype/test_simpletype.rb +2 -2
- data/test/wsdl/soap/test_soapbodyparts.rb +2 -2
- data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +2 -0
- data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +3 -2
- data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +5 -9
- data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +4 -2
- data/test/wsdl/soap/wsdl2ruby/expectedService.rb +4 -2
- data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +6 -0
- data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +1 -1
- data/test/wsdl/soaptype/test_soaptype.rb +1 -1
- data/test/wsdl/test_multiplefault.rb +3 -1
- data/test/xsd/codegen/test_classdef.rb +30 -0
- data/test/xsd/test_ns.rb +21 -0
- data/test/xsd/test_xsd.rb +5 -4
- data/test/xsd/xsd2ruby/expected_mysample.rb +13 -2
- data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +5 -11
- data/test/xsd/xsd2ruby/section.xsd +8 -0
- metadata +40 -8
- data/test/wsdl/axisArray/itemList.rb +0 -14
- data/test/wsdl/raa/RAA.rb +0 -120
- data/test/wsdl/raa/RAAServant.rb +0 -107
- data/test/wsdl/raa/server.rb +0 -103
data/bin/wsdl2ruby.rb
CHANGED
@@ -17,8 +17,10 @@ private
|
|
17
17
|
['--client_skelton','-c', GetoptLong::OPTIONAL_ARGUMENT],
|
18
18
|
['--servant_skelton','-s', GetoptLong::OPTIONAL_ARGUMENT],
|
19
19
|
['--cgi_stub','-g', GetoptLong::OPTIONAL_ARGUMENT],
|
20
|
+
['--servlet_stub','-l', GetoptLong::OPTIONAL_ARGUMENT],
|
20
21
|
['--standalone_server_stub','-a', GetoptLong::OPTIONAL_ARGUMENT],
|
21
22
|
['--driver','-d', GetoptLong::OPTIONAL_ARGUMENT],
|
23
|
+
['--drivername_postfix','-n', GetoptLong::REQUIRED_ARGUMENT],
|
22
24
|
['--force','-f', GetoptLong::NO_ARGUMENT],
|
23
25
|
['--quiet','-q', GetoptLong::NO_ARGUMENT],
|
24
26
|
]
|
@@ -68,9 +70,11 @@ Options:
|
|
68
70
|
--client_skelton [servicename]
|
69
71
|
--servant_skelton [porttypename]
|
70
72
|
--cgi_stub [servicename]
|
73
|
+
--servlet_stub [servicename]
|
71
74
|
--standalone_server_stub [servicename]
|
72
75
|
--driver [porttypename]
|
73
|
-
--
|
76
|
+
--drivername_postfix driver_classname_postfix
|
77
|
+
--module_path Module::Path::Name
|
74
78
|
--force
|
75
79
|
--quiet
|
76
80
|
|
@@ -110,9 +114,11 @@ __EOU__
|
|
110
114
|
end
|
111
115
|
when "--classdef", "--mapping_registry",
|
112
116
|
"--client_skelton", "--servant_skelton",
|
113
|
-
"--cgi_stub", "--standalone_server_stub",
|
117
|
+
"--cgi_stub", "--servlet_stub", "--standalone_server_stub",
|
114
118
|
"--driver"
|
115
119
|
opt[name.sub(/^--/, '')] = arg.empty? ? nil : arg
|
120
|
+
when "--drivername_postfix"
|
121
|
+
opt['drivername_postfix'] = arg
|
116
122
|
when "--force"
|
117
123
|
opt['force'] = true
|
118
124
|
when "--quiet"
|
data/lib/soap/baseData.rb
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
require 'xsd/datatypes'
|
10
10
|
require 'soap/soap'
|
11
11
|
require 'xsd/codegen/gensupport'
|
12
|
+
require 'soap/mapping/mapping'
|
12
13
|
|
13
14
|
|
14
15
|
module SOAP
|
@@ -27,6 +28,10 @@ public
|
|
27
28
|
d.elename = elename
|
28
29
|
d
|
29
30
|
end
|
31
|
+
|
32
|
+
def to_data(str)
|
33
|
+
new(str).data
|
34
|
+
end
|
30
35
|
end
|
31
36
|
|
32
37
|
|
@@ -106,6 +111,10 @@ module SOAPCompoundtype
|
|
106
111
|
end
|
107
112
|
end
|
108
113
|
|
114
|
+
# marker for compound types which have named accessor
|
115
|
+
module SOAPNameAccessible
|
116
|
+
end
|
117
|
+
|
109
118
|
|
110
119
|
###
|
111
120
|
## Convenience datatypes.
|
@@ -156,6 +165,14 @@ public
|
|
156
165
|
end
|
157
166
|
end
|
158
167
|
|
168
|
+
# for referenced base type such as a long value from Axis.
|
169
|
+
# base2obj requires a node to respond to :data
|
170
|
+
def data
|
171
|
+
if @obj.respond_to?(:data)
|
172
|
+
@obj.data
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
159
176
|
def refidstr
|
160
177
|
'#' + @refid
|
161
178
|
end
|
@@ -257,6 +274,60 @@ class SOAPLanguage < XSD::XSDLanguage
|
|
257
274
|
SOAPENCType = QName.new(EncodingNamespace, LanguageLiteral)
|
258
275
|
end
|
259
276
|
|
277
|
+
class SOAPNMTOKEN < XSD::XSDNMTOKEN
|
278
|
+
include SOAPBasetype
|
279
|
+
extend SOAPModuleUtils
|
280
|
+
SOAPENCType = QName.new(EncodingNamespace, NMTOKENLiteral)
|
281
|
+
end
|
282
|
+
|
283
|
+
class SOAPNMTOKENS < XSD::XSDNMTOKENS
|
284
|
+
include SOAPBasetype
|
285
|
+
extend SOAPModuleUtils
|
286
|
+
SOAPENCType = QName.new(EncodingNamespace, NMTOKENSLiteral)
|
287
|
+
end
|
288
|
+
|
289
|
+
class SOAPName < XSD::XSDName
|
290
|
+
include SOAPBasetype
|
291
|
+
extend SOAPModuleUtils
|
292
|
+
SOAPENCType = QName.new(EncodingNamespace, NameLiteral)
|
293
|
+
end
|
294
|
+
|
295
|
+
class SOAPNCName < XSD::XSDNCName
|
296
|
+
include SOAPBasetype
|
297
|
+
extend SOAPModuleUtils
|
298
|
+
SOAPENCType = QName.new(EncodingNamespace, NCNameLiteral)
|
299
|
+
end
|
300
|
+
|
301
|
+
class SOAPID < XSD::XSDID
|
302
|
+
include SOAPBasetype
|
303
|
+
extend SOAPModuleUtils
|
304
|
+
SOAPENCType = QName.new(EncodingNamespace, IDLiteral)
|
305
|
+
end
|
306
|
+
|
307
|
+
class SOAPIDREF < XSD::XSDIDREF
|
308
|
+
include SOAPBasetype
|
309
|
+
extend SOAPModuleUtils
|
310
|
+
SOAPENCType = QName.new(EncodingNamespace, IDREFLiteral)
|
311
|
+
end
|
312
|
+
|
313
|
+
class SOAPIDREFS < XSD::XSDIDREFS
|
314
|
+
include SOAPBasetype
|
315
|
+
extend SOAPModuleUtils
|
316
|
+
SOAPENCType = QName.new(EncodingNamespace, IDREFSLiteral)
|
317
|
+
end
|
318
|
+
|
319
|
+
class SOAPENTITY < XSD::XSDENTITY
|
320
|
+
include SOAPBasetype
|
321
|
+
extend SOAPModuleUtils
|
322
|
+
SOAPENCType = QName.new(EncodingNamespace, ENTITYLiteral)
|
323
|
+
end
|
324
|
+
|
325
|
+
class SOAPENTITIES < XSD::XSDENTITIES
|
326
|
+
include SOAPBasetype
|
327
|
+
extend SOAPModuleUtils
|
328
|
+
SOAPENCType = QName.new(EncodingNamespace, ENTITIESLiteral)
|
329
|
+
end
|
330
|
+
|
260
331
|
class SOAPBoolean < XSD::XSDBoolean
|
261
332
|
include SOAPBasetype
|
262
333
|
extend SOAPModuleUtils
|
@@ -454,8 +525,9 @@ end
|
|
454
525
|
## Compound datatypes.
|
455
526
|
#
|
456
527
|
class SOAPStruct < XSD::NSDBase
|
457
|
-
include SOAPCompoundtype
|
458
528
|
include Enumerable
|
529
|
+
include SOAPCompoundtype
|
530
|
+
include SOAPNameAccessible
|
459
531
|
|
460
532
|
public
|
461
533
|
|
@@ -466,7 +538,7 @@ public
|
|
466
538
|
@data = []
|
467
539
|
end
|
468
540
|
|
469
|
-
def to_s
|
541
|
+
def to_s
|
470
542
|
str = ''
|
471
543
|
self.each do |key, data|
|
472
544
|
str << "#{key}: #{data}\n"
|
@@ -475,7 +547,12 @@ public
|
|
475
547
|
end
|
476
548
|
|
477
549
|
def add(name, value)
|
478
|
-
|
550
|
+
value = SOAPNil.new if value.nil?
|
551
|
+
@array.push(name)
|
552
|
+
value.elename = value.elename.dup_name(name)
|
553
|
+
@data.push(value)
|
554
|
+
value.parent = self if value.respond_to?(:parent=)
|
555
|
+
value
|
479
556
|
end
|
480
557
|
|
481
558
|
def [](idx)
|
@@ -554,17 +631,6 @@ public
|
|
554
631
|
s.elename = elename
|
555
632
|
s
|
556
633
|
end
|
557
|
-
|
558
|
-
private
|
559
|
-
|
560
|
-
def add_member(name, value = nil)
|
561
|
-
value = SOAPNil.new if value.nil?
|
562
|
-
@array.push(name)
|
563
|
-
value.elename = value.elename.dup_name(name)
|
564
|
-
@data.push(value)
|
565
|
-
value.parent = self if value.respond_to?(:parent=)
|
566
|
-
value
|
567
|
-
end
|
568
634
|
end
|
569
635
|
|
570
636
|
|
@@ -572,6 +638,7 @@ end
|
|
572
638
|
class SOAPElement
|
573
639
|
include Enumerable
|
574
640
|
include SOAPCompoundtype
|
641
|
+
include SOAPNameAccessible
|
575
642
|
|
576
643
|
attr_accessor :type
|
577
644
|
# Text interface.
|
@@ -582,8 +649,8 @@ class SOAPElement
|
|
582
649
|
super()
|
583
650
|
if elename.nil?
|
584
651
|
elename = XSD::QName::EMPTY
|
585
|
-
|
586
|
-
elename =
|
652
|
+
else
|
653
|
+
elename = Mapping.to_qname(elename)
|
587
654
|
end
|
588
655
|
@encodingstyle = LiteralNamespace
|
589
656
|
@elename = elename
|
@@ -606,7 +673,11 @@ class SOAPElement
|
|
606
673
|
|
607
674
|
# Element interfaces.
|
608
675
|
def add(value)
|
609
|
-
|
676
|
+
name = value.elename.name
|
677
|
+
@array.push(name)
|
678
|
+
@data.push(value)
|
679
|
+
value.parent = self if value.respond_to?(:parent=)
|
680
|
+
value
|
610
681
|
end
|
611
682
|
|
612
683
|
def [](idx)
|
@@ -639,7 +710,7 @@ class SOAPElement
|
|
639
710
|
end
|
640
711
|
|
641
712
|
def to_obj
|
642
|
-
if
|
713
|
+
if !have_member
|
643
714
|
@text
|
644
715
|
else
|
645
716
|
hash = {}
|
@@ -697,6 +768,7 @@ class SOAPElement
|
|
697
768
|
# if else:
|
698
769
|
# value is added as an XML element with the key name.
|
699
770
|
def self.from_obj(obj, namespace = nil)
|
771
|
+
return obj if obj.is_a?(SOAPElement)
|
700
772
|
o = SOAPElement.new(nil)
|
701
773
|
case obj
|
702
774
|
when nil
|
@@ -752,15 +824,6 @@ class SOAPElement
|
|
752
824
|
XSD::QName.new(namespace, obj.to_s)
|
753
825
|
end
|
754
826
|
end
|
755
|
-
|
756
|
-
private
|
757
|
-
|
758
|
-
def add_member(name, value)
|
759
|
-
@array.push(name)
|
760
|
-
@data.push(value)
|
761
|
-
value.parent = self if value.respond_to?(:parent=)
|
762
|
-
value
|
763
|
-
end
|
764
827
|
end
|
765
828
|
|
766
829
|
|
@@ -829,18 +892,14 @@ public
|
|
829
892
|
if idxary.size != @rank
|
830
893
|
raise ArgumentError.new("given #{idxary.size} params does not match rank: #{@rank}")
|
831
894
|
end
|
832
|
-
|
833
895
|
retrieve(idxary)
|
834
896
|
end
|
835
897
|
|
836
898
|
def []=(*idxary)
|
837
899
|
value = idxary.slice!(-1)
|
838
|
-
|
839
900
|
if idxary.size != @rank
|
840
|
-
raise ArgumentError.new("given #{idxary.size} params(#{idxary})"
|
841
|
-
" does not match rank: #{@rank}")
|
901
|
+
raise ArgumentError.new("given #{idxary.size} params(#{idxary}) does not match rank: #{@rank}")
|
842
902
|
end
|
843
|
-
|
844
903
|
idx = 0
|
845
904
|
while idx < idxary.size
|
846
905
|
if idxary[idx] + 1 > @size[idx]
|
@@ -848,10 +907,8 @@ public
|
|
848
907
|
end
|
849
908
|
idx += 1
|
850
909
|
end
|
851
|
-
|
852
910
|
data = retrieve(idxary[0, idxary.size - 1])
|
853
911
|
data[idxary.last] = value
|
854
|
-
|
855
912
|
if value.is_a?(SOAPType)
|
856
913
|
value.elename = ITEM_NAME
|
857
914
|
# Sync type
|
@@ -861,7 +918,6 @@ public
|
|
861
918
|
end
|
862
919
|
value.type ||= @type
|
863
920
|
end
|
864
|
-
|
865
921
|
@offset = idxary
|
866
922
|
value.parent = self if value.respond_to?(:parent=)
|
867
923
|
offsetnext
|
@@ -961,7 +1017,7 @@ private
|
|
961
1017
|
def traverse_data(data, rank = 1)
|
962
1018
|
idx = 0
|
963
1019
|
while idx < ranksize(rank)
|
964
|
-
if rank < @rank
|
1020
|
+
if rank < @rank and data[idx]
|
965
1021
|
traverse_data(data[idx], rank + 1) do |*v|
|
966
1022
|
v[1, 0] = idx
|
967
1023
|
yield(*v)
|
@@ -995,10 +1051,6 @@ private
|
|
995
1051
|
end
|
996
1052
|
end
|
997
1053
|
|
998
|
-
# Module function
|
999
|
-
|
1000
|
-
public
|
1001
|
-
|
1002
1054
|
def self.decode(elename, type, arytype)
|
1003
1055
|
typestr, nofary = parse_type(arytype.name)
|
1004
1056
|
rank = nofary.count(',') + 1
|
@@ -1021,13 +1073,11 @@ public
|
|
1021
1073
|
o
|
1022
1074
|
end
|
1023
1075
|
|
1024
|
-
private
|
1025
|
-
|
1026
1076
|
def self.create_arytype(typename, rank)
|
1027
1077
|
"#{typename}[" << ',' * (rank - 1) << ']'
|
1028
1078
|
end
|
1029
1079
|
|
1030
|
-
TypeParseRegexp = Regexp.new('^(.+)\[([\d,]*)\]$')
|
1080
|
+
TypeParseRegexp = Regexp.new('^(.+)\[([\d,]*)\]$', nil, 'NONE')
|
1031
1081
|
|
1032
1082
|
def self.parse_type(string)
|
1033
1083
|
TypeParseRegexp =~ string
|
data/lib/soap/element.rb
CHANGED
@@ -60,7 +60,6 @@ public
|
|
60
60
|
super(EleFaultName)
|
61
61
|
@elename = EleFaultName
|
62
62
|
@encodingstyle = EncodingNamespace
|
63
|
-
|
64
63
|
if faultcode
|
65
64
|
self.faultcode = faultcode
|
66
65
|
self.faultstring = faultstring
|
@@ -78,8 +77,8 @@ public
|
|
78
77
|
end
|
79
78
|
|
80
79
|
def encode(generator, ns, attrs = {})
|
81
|
-
|
82
|
-
|
80
|
+
Generator.assign_ns(attrs, ns, EnvelopeNamespace)
|
81
|
+
Generator.assign_ns(attrs, ns, EncodingNamespace)
|
83
82
|
attrs[ns.name(AttrEncodingStyleName)] = EncodingNamespace
|
84
83
|
name = ns.name(@elename)
|
85
84
|
generator.encode_tag(name, attrs)
|
@@ -139,7 +138,6 @@ class SOAPBody < SOAPStruct
|
|
139
138
|
return node
|
140
139
|
end
|
141
140
|
end
|
142
|
-
|
143
141
|
raise Parser::FormatDecodeError.new('no root element')
|
144
142
|
end
|
145
143
|
end
|
@@ -171,7 +169,10 @@ public
|
|
171
169
|
attrs.each do |key, value|
|
172
170
|
@element.extraattr[key] = value
|
173
171
|
end
|
174
|
-
|
172
|
+
# to remove mustUnderstand attribute, set it to nil
|
173
|
+
unless @mustunderstand.nil?
|
174
|
+
@element.extraattr[AttrMustUnderstandName] = (@mustunderstand ? '1' : '0')
|
175
|
+
end
|
175
176
|
if @encodingstyle
|
176
177
|
@element.extraattr[AttrEncodingStyleName] = @encodingstyle
|
177
178
|
end
|
@@ -209,9 +210,11 @@ class SOAPHeader < SOAPStruct
|
|
209
210
|
|
210
211
|
def add(name, value)
|
211
212
|
actor = value.extraattr[AttrActorName]
|
212
|
-
mu =
|
213
|
+
mu = value.extraattr[AttrMustUnderstandName]
|
213
214
|
encstyle = value.extraattr[AttrEncodingStyleName]
|
214
|
-
|
215
|
+
mu_value = mu.nil? ? nil : (mu == '1')
|
216
|
+
# to remove mustUnderstand attribute, set it to nil
|
217
|
+
item = SOAPHeaderItem.new(value, mu_value, encstyle, actor)
|
215
218
|
super(name, item)
|
216
219
|
end
|
217
220
|
|
@@ -257,7 +260,7 @@ class SOAPEnvelope < XSD::NSDBase
|
|
257
260
|
end
|
258
261
|
|
259
262
|
def encode(generator, ns, attrs = {})
|
260
|
-
|
263
|
+
Generator.assign_ns(attrs, ns, elename.namespace)
|
261
264
|
name = ns.name(@elename)
|
262
265
|
generator.encode_tag(name, attrs)
|
263
266
|
yield(@header) if @header and @header.encode?
|
@@ -94,12 +94,23 @@ class Handler
|
|
94
94
|
def decode_epilogue
|
95
95
|
end
|
96
96
|
|
97
|
-
def
|
98
|
-
|
99
|
-
|
100
|
-
ns.name(qname)
|
97
|
+
def encode_attr_key(attrs, ns, qname)
|
98
|
+
if qname.namespace.nil?
|
99
|
+
qname.name
|
101
100
|
else
|
101
|
+
unless ns.assigned_as_tagged?(qname.namespace)
|
102
|
+
Generator.assign_ns!(attrs, ns, qname.namespace)
|
103
|
+
end
|
104
|
+
ns.name_attr(qname)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def encode_qname(attrs, ns, qname)
|
109
|
+
if qname.namespace.nil?
|
102
110
|
qname.name
|
111
|
+
else
|
112
|
+
Generator.assign_ns(attrs, ns, qname.namespace)
|
113
|
+
ns.name(qname)
|
103
114
|
end
|
104
115
|
end
|
105
116
|
end
|
@@ -31,10 +31,9 @@ class LiteralHandler < Handler
|
|
31
31
|
name = generator.encode_name(ns, data, attrs)
|
32
32
|
data.extraattr.each do |key, value|
|
33
33
|
next if !@generate_explicit_type and key == XSD::AttrTypeName
|
34
|
-
# ToDo: check generator.attributeformdefault here
|
35
34
|
keytag = key
|
36
35
|
if key.is_a?(XSD::QName)
|
37
|
-
keytag =
|
36
|
+
keytag = encode_attr_key(attrs, ns, key)
|
38
37
|
end
|
39
38
|
if value.is_a?(XSD::QName)
|
40
39
|
value = encode_qname(attrs, ns, value)
|
@@ -51,8 +50,7 @@ class LiteralHandler < Handler
|
|
51
50
|
generator.encode_rawstring(data.to_s)
|
52
51
|
when XSD::XSDString
|
53
52
|
generator.encode_tag(name, attrs)
|
54
|
-
str = data.to_s
|
55
|
-
str = XSD::Charset.encoding_to_xml(str, @charset) if @charset
|
53
|
+
str = decode_str(data.to_s)
|
56
54
|
generator.encode_string(str)
|
57
55
|
when XSD::XSDAnySimpleType
|
58
56
|
generator.encode_tag(name, attrs)
|
@@ -69,14 +67,16 @@ class LiteralHandler < Handler
|
|
69
67
|
generator.encode_child(ns, child, data)
|
70
68
|
end
|
71
69
|
when SOAPElement
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
70
|
+
unless generator.use_default_namespace
|
71
|
+
# passes 2 times for simplifying namespace definition
|
72
|
+
data.each do |key, value|
|
73
|
+
if value.elename.namespace
|
74
|
+
Generator.assign_ns(attrs, ns, value.elename.namespace)
|
75
|
+
end
|
76
76
|
end
|
77
77
|
end
|
78
78
|
if data.text and data.text.is_a?(XSD::QName)
|
79
|
-
|
79
|
+
Generator.assign_ns(attrs, ns, data.text.namespace)
|
80
80
|
end
|
81
81
|
generator.encode_tag(name, attrs)
|
82
82
|
if data.text
|
@@ -85,7 +85,7 @@ class LiteralHandler < Handler
|
|
85
85
|
else
|
86
86
|
text = data.text
|
87
87
|
end
|
88
|
-
generator.
|
88
|
+
generator.encode_string(text)
|
89
89
|
end
|
90
90
|
data.each do |key, value|
|
91
91
|
generator.encode_child(ns, value, data)
|
@@ -111,17 +111,16 @@ class LiteralHandler < Handler
|
|
111
111
|
#
|
112
112
|
def decode_tag(ns, elename, attrs, parent)
|
113
113
|
@textbuf.clear
|
114
|
-
|
115
|
-
if extraattrs[XSD::AttrNilName] == 'true'
|
114
|
+
if attrs[XSD::AttrNilName] == 'true'
|
116
115
|
o = SOAPNil.decode(elename)
|
117
116
|
else
|
118
117
|
o = SOAPElement.decode(elename)
|
119
118
|
end
|
120
|
-
if definedtype =
|
119
|
+
if definedtype = attrs[XSD::AttrTypeName]
|
121
120
|
o.type = ns.parse(definedtype)
|
122
121
|
end
|
123
122
|
o.parent = parent
|
124
|
-
o.extraattr.update(
|
123
|
+
o.extraattr.update(attrs)
|
125
124
|
decode_parent(parent, o)
|
126
125
|
o
|
127
126
|
end
|
@@ -138,15 +137,6 @@ class LiteralHandler < Handler
|
|
138
137
|
@textbuf << text
|
139
138
|
end
|
140
139
|
|
141
|
-
def decode_attrs(ns, attrs)
|
142
|
-
extraattr = {}
|
143
|
-
attrs.each do |key, value|
|
144
|
-
qname = ns.parse_local(key)
|
145
|
-
extraattr[qname] = value
|
146
|
-
end
|
147
|
-
extraattr
|
148
|
-
end
|
149
|
-
|
150
140
|
def decode_prologue
|
151
141
|
end
|
152
142
|
|
@@ -181,7 +171,7 @@ private
|
|
181
171
|
case node
|
182
172
|
when XSD::XSDString, SOAPElement
|
183
173
|
if @charset
|
184
|
-
node.set(
|
174
|
+
node.set(decode_str(textbufstr))
|
185
175
|
else
|
186
176
|
node.set(textbufstr)
|
187
177
|
end
|
@@ -189,6 +179,10 @@ private
|
|
189
179
|
# Nothing to do...
|
190
180
|
end
|
191
181
|
end
|
182
|
+
|
183
|
+
def decode_str(str)
|
184
|
+
@charset ? XSD::Charset.encoding_from_xml(str, @charset) : str
|
185
|
+
end
|
192
186
|
end
|
193
187
|
|
194
188
|
LiteralHandler.new
|