Check-in [ffda452ea6]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Corrected handling of arrays elements.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: ffda452ea606c49c72382eaef0588c97a7e1f7dd
User & Date: gerald 2012-09-07 05:41:48.619
Context
2012-09-08 15:37
Enhanced processing of array elements. check-in: b83f5b24e3 user: gerald tags: trunk
2012-09-07 05:41
Corrected handling of arrays elements. check-in: ffda452ea6 user: gerald tags: trunk
2012-09-05 03:50
Correct handling of soap encoded arrays from complex type definition that is only a restriction making something an array. check-in: 69ecf185ee user: gerald tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to Utilities.tcl.
1266
1267
1268
1269
1270
1271
1272

1273
1274
1275
1276
1277
1278
1279
#
# Arguments :
#    mode        - The mode, Client or Server
#    serviceName - The service name the type is defined in
#    node        - The base node for the type.
#    type        - The name of the type
#    root        - The root node of the document

#
# Returns : A dictionary object for a given type.
#
# Side-Effects : None
#
# Exception Conditions : None
#







>







1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
#
# Arguments :
#    mode        - The mode, Client or Server
#    serviceName - The service name the type is defined in
#    node        - The base node for the type.
#    type        - The name of the type
#    root        - The root node of the document
#    isArray     - We are looking for array elements
#
# Returns : A dictionary object for a given type.
#
# Side-Effects : None
#
# Exception Conditions : None
#
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
#
###########################################################################
proc ::WS::Utils::convertTypeToDict {mode serviceName node type root {isArray 0}} {
    variable typeInfo
    variable mutableTypeInfo
    variable options

    ::log::log debug [list ::WS::Utils::convertTypeToDict $mode $serviceName $node $type $root]
    if {[dict exists $typeInfo $mode $serviceName $type]} {
        set typeName $type
    } else {
        set typeName $serviceName:$type
    }
    set typeDefInfo [dict get $typeInfo $mode $serviceName $typeName]
    ::log::log debug "\t type def = {$typeDefInfo}"







|







1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
#
###########################################################################
proc ::WS::Utils::convertTypeToDict {mode serviceName node type root {isArray 0}} {
    variable typeInfo
    variable mutableTypeInfo
    variable options

    ::log::log debug [list ::WS::Utils::convertTypeToDict $mode $serviceName $node $type $root $isArray]
    if {[dict exists $typeInfo $mode $serviceName $type]} {
        set typeName $type
    } else {
        set typeName $serviceName:$type
    }
    set typeDefInfo [dict get $typeInfo $mode $serviceName $typeName]
    ::log::log debug "\t type def = {$typeDefInfo}"
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
                ##
                ::log::log debug "Trying #3 [list $node selectNodes $partName]"
                if {[catch {llength [set item [$node selectNodes $partName]]} len] || ($len == 0)} {
                    ::log::log debug "Trying #4 -- search of children"
                    set item {}
                    set matchList [list $partXns:$partName  $xns:$partName $partName]
                    foreach childNode [$node childNodes] {
                        ::log::log debug "\t\t Looking at [$childNode localName] "
                        # From SOAP1.1 Spec:
                        #    Within an array value, element names are not significant
                        # for distinguishing accessors. Elements may have any name.
                        # Here we don't need check the element name, just simple check
                        # it's a element node
                        if {!$allowAny && (
                             [$childNode nodeType] != "ELEMENT_NODE" ||
                             (!$isArray && ![string equal [$childNode localName] $partName]))} {
                            continue
                        }
                        ::log::log debug "\t\t Found $partName [$childNode asXML]"
                        lappend item $childNode
                    }
                    if {![string length $item]} {
                        ::log::log debug "\tSkipping"







|





|
<
<







1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376


1377
1378
1379
1380
1381
1382
1383
                ##
                ::log::log debug "Trying #3 [list $node selectNodes $partName]"
                if {[catch {llength [set item [$node selectNodes $partName]]} len] || ($len == 0)} {
                    ::log::log debug "Trying #4 -- search of children"
                    set item {}
                    set matchList [list $partXns:$partName  $xns:$partName $partName]
                    foreach childNode [$node childNodes] {
                        ::log::log debug "\t\t Looking at [$childNode localName] ($allowAny,$isArray,[$childNode nodeType],$partName)"
                        # From SOAP1.1 Spec:
                        #    Within an array value, element names are not significant
                        # for distinguishing accessors. Elements may have any name.
                        # Here we don't need check the element name, just simple check
                        # it's a element node
                        if {!$allowAny} {


                            continue
                        }
                        ::log::log debug "\t\t Found $partName [$childNode asXML]"
                        lappend item $childNode
                    }
                    if {![string length $item]} {
                        ::log::log debug "\tSkipping"