Index: ClientSide.tcl ================================================================== --- ClientSide.tcl +++ ClientSide.tcl @@ -149,10 +149,62 @@ nsOnChangeOnly } } + +# BEGIN Andy Goth hacks ------------------------------------------------------- + +if {0} { + package require log + package require WS::Client + #log::lvSuppress debug 0 + WS::Client::GetAndParseWsdl https://coverity.labs.quest.com/ws/v9/configurationservice?wsdl + WS::Client::GetAndAddXsdTypes ConfigurationServiceService http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd + WS::Client::AddInputHeader ConfigurationServiceService getVersion wsse:Security { + wsse:UsernameToken {wsse:Username foo wsse:Password bar} + } +} + +proc ::WS::Client::GetAndAddXsdTypes {serviceName url {headers {}}} { + switch -- [dict get [::uri::split $url] scheme] { + file { + upvar #0 [::uri::geturl $url] token + set xsd $token(data) + unset token + } http - https { + if {[llength $headers]} { + set xsd [::WS::Utils::geturl_fetchbody $url -headers $headers] + } else { + set xsd [::WS::Utils::geturl_fetchbody $url] + } + # HACK?? convert from UTF-8? shouldn't this have already been handled? + set xsd [encoding convertfrom utf-8 $xsd] + } default { + return \ + -code error \ + -errorcode [list WS CLIENT UNKURLTYP $url] \ + "Unknown URL type '$url'" + }} + + AddXsdTypes $serviceName $xsd $url +} + +proc ::WS::Client::AddXsdTypes {serviceName xsd baseUrl} { + variable serviceArr + + dom parse $xsd doc + $doc documentElement node + set tnsCount [llength [dict keys\ + [dict get $serviceArr($serviceName) tnsList url]]] + ::WS::Utils::parseScheme Client $baseUrl $node $serviceName\ + serviceArr($serviceName) tnsCount + $doc delete +} + +# END Andy Goth hacks --------------------------------------------------------- + ########################################################################### # # Public Procedure Header - as this procedure is modified, please be sure # that you update this header block. Thanks. # Index: Utilities.tcl ================================================================== --- Utilities.tcl +++ Utilities.tcl @@ -2821,11 +2821,13 @@ variable nsList variable options variable unknownRef set currentSchema $schemaNode - set tmpTargetNs $::WS::Utils::targetNs + if {[info exists ::WS::Utils::targetNs]} { + set tmpTargetNs $::WS::Utils::targetNs + } foreach attr [$schemaNode attributes] { set value {?} catch {set value [$schemaNode getAttribute $attr]} ::log::logsubst debug {Attribute $attr = $value} } @@ -2952,16 +2954,24 @@ if {$lastUnknownRefCount} { switch -exact -- $options(StrictMode) { debug - warning { - set ::WS::Utils::targetNs $tmpTargetNs + if {[info exists tmpTargetNs]} { + set ::WS::Utils::targetNs $tmpTargetNs + } else { + unset -nocomplain ::WS::Utils::targetNs + } ::log::logsubst $options(StrictMode) {Found $lastUnknownRefCount forward type references: [join [array names unknownRef] {,}]} } error - default { - set ::WS::Utils::targetNs $tmpTargetNs + if {[info exists tmpTargetNs]} { + set ::WS::Utils::targetNs $tmpTargetNs + } else { + unset -nocomplain ::WS::Utils::targetNs + } return \ -code error \ -errorcode [list WS $mode UNKREFS [list $lastUnknownRefCount]] \ "Found $lastUnknownRefCount forward type references: [join [array names unknownRef] {,}]" } @@ -2992,11 +3002,15 @@ ::log::logsubst error {Could not parse:\n [$element asXML]} ::log::logsubst error {\t error was: $msg} ::log::logsubst error {\t error info: $errorInfo} ::log::logsubst error {\t error in: [lindex [info level 0] 0]} ::log::logsubst error {\t error code: $errorCode} - set ::WS::Utils::targetNs $tmpTargetNs + if {[info exists tmpTargetNs]} { + set ::WS::Utils::targetNs $tmpTargetNs + } else { + unset -nocomplain ::WS::Utils::targetNs + } return \ -code error \ -errorcode $errorCode \ -errorinfo $errorInfo \ $msg @@ -3023,11 +3037,15 @@ ::log::logsubst error {\t error was: $msg} ::log::logsubst error {\t error info: $errorInfo} ::log::logsubst error {\t last element: $::elementName} ::log::logsubst error {\t error in: [lindex [info level 0] 0]} ::log::logsubst error {\t error code: $errorCode} - set ::WS::Utils::targetNs $tmpTargetNs + if {[info exists tmpTargetNs]} { + set ::WS::Utils::targetNs $tmpTargetNs + } else { + unset -nocomplain ::WS::Utils::targetNs + } return \ -code error \ -errorcode $errorCode \ -errorinfo $errorInfo \ $msg @@ -3054,11 +3072,15 @@ ::log::logsubst error {\t error was: $msg} ::log::logsubst error {\t error info: $errorInfo} ::log::logsubst error {\t error in: [lindex [info level 0] 0]} ::log::logsubst error {\t error code: $errorCode} ::log::logsubst error {\t last element: $::elementName} - set ::WS::Utils::targetNs $tmpTargetNs + if {[info exists tmpTargetNs]} { + set ::WS::Utils::targetNs $tmpTargetNs + } else { + unset -nocomplain ::WS::Utils::targetNs + } return \ -code error \ -errorcode $errorCode \ -errorinfo $errorInfo \ $msg @@ -3084,11 +3106,15 @@ ::log::logsubst error {Could not parse:\n [$element asXML]} ::log::logsubst error {\t error was: $msg} ::log::logsubst error {\t error info: $errorInfo} ::log::logsubst error {\t error in: [lindex [info level 0] 0]} ::log::logsubst error {\t error code: $errorCode} - set ::WS::Utils::targetNs $tmpTargetNs + if {[info exists tmpTargetNs]} { + set ::WS::Utils::targetNs $tmpTargetNs + } else { + unset -nocomplain ::WS::Utils::targetNs + } return \ -code error \ -errorcode $errorCode \ -errorinfo $errorInfo \ $msg @@ -3114,11 +3140,15 @@ ::log::logsubst error {Could not parse:\n [$element asXML]} ::log::logsubst error {\t error was: $msg} ::log::logsubst error {\t error info: $errorInfo} ::log::logsubst error {\t error in: [lindex [info level 0] 0]} ::log::logsubst error {\t error code: $errorCode} - set ::WS::Utils::targetNs $tmpTargetNs + if {[info exists tmpTargetNs]} { + set ::WS::Utils::targetNs $tmpTargetNs + } else { + unset -nocomplain ::WS::Utils::targetNs + } return \ -code error \ -errorcode $errorCode \ -errorinfo $errorInfo \ $msg @@ -3125,11 +3155,15 @@ } } } } - set ::WS::Utils::targetNs $tmpTargetNs + if {[info exists tmpTargetNs]} { + set ::WS::Utils::targetNs $tmpTargetNs + } else { + unset -nocomplain ::WS::Utils::targetNs + } ::log::logsubst debug {Leaving :WS::Utils::parseScheme $mode $baseUrl $schemaNode $serviceName $serviceInfoVar $tnsCountVar} ::log::logsubst debug {Target NS is now: $::WS::Utils::targetNs} dict set serviceInfo tnsList tns $prevTnsDict }