soap4r 1.5.7 → 1.5.8
Sign up to get free protection for your applications and to get access to all the features.
- 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
|