Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch Release_1.4.1 Excluding Merge-Ins
This is equivalent to a diff from 8d3a4854e2 to 1165efefab
2011-03-19 01:43 | Correct typo check-in: 9697f83d44 user: gerald tags: trunk | |
2011-03-18 19:59 | correct package version numbers to 1.4.1 Closed-Leaf check-in: 1165efefab user: gerald tags: Release_1.4.1 | |
2011-03-17 05:09 | Fixes for tickets: [668852fcac], [aa05504f11] and [7eb636dce1] check-in: 112f7b64d7 user: gerald tags: Release_1.4.1 | |
2011-03-16 00:45 | Only call ProcessImportXml when we have xml check-in: a53a2d4652 user: gerald tags: Release_1.4.1 | |
2011-02-26 05:42 | Remove trash files Closed-Leaf check-in: 8d3a4854e2 user: gerald tags: Release_1.4.0 | |
2011-02-26 05:40 | Version 1.4.0 migration from https://code.google.com/p/tclws/ check-in: 36a93e0054 user: gerald tags: Release_1.4.0 | |
Changes to ClientSide.tcl.
︙ | ︙ | |||
40 41 42 43 44 45 46 | ############################################################################### package require WS::Utils #package require Tcl 8.5 if {![llength [info command dict]]} { package require dict } | | | | 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | ############################################################################### package require WS::Utils #package require Tcl 8.5 if {![llength [info command dict]]} { package require dict } package require tdom 0.8 package require http 2 package require log package require uri catch { package require tls http::register https 443 ::tls::socket } package provide WS::Client 1.4.1 namespace eval ::WS::Client { ## ## serviceArr is indexed by service name and contains a dictionary that ## defines the service. The dictionary has the following structure: ## targetNamespace - the target namespace ## operList - list of operations |
︙ | ︙ | |||
1546 1547 1548 1549 1550 1551 1552 | variable serviceArr ::log::log debug "In parseResults $serviceName $operationName {$inXML}" set serviceInfo $serviceArr($serviceName) set outTransform [dict get $serviceInfo outTransform] if {![string equal $outTransform {}]} { | | | 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 | variable serviceArr ::log::log debug "In parseResults $serviceName $operationName {$inXML}" set serviceInfo $serviceArr($serviceName) set outTransform [dict get $serviceInfo outTransform] if {![string equal $outTransform {}]} { set inXML [$outTransform $serviceName $operationName REPLY $inXML] } set expectedMsgType [dict get $serviceInfo operation $operationName outputs] dom parse $inXML doc $doc documentElement top set xns { ENV http://schemas.xmlsoap.org/soap/envelope/ |
︙ | ︙ | |||
1568 1569 1570 1571 1572 1573 1574 | $doc selectNodesNamespaces $xns set body [$top selectNodes ENV:Body] set rootNode [$body childNodes] ::log::log debug "Have [llength $rootNode]" if {[llength $rootNode] > 1} { foreach tmp $rootNode { #puts "\t Got {[$tmp localName]} looking for {$expectedMsgType}" | | > | 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 | $doc selectNodesNamespaces $xns set body [$top selectNodes ENV:Body] set rootNode [$body childNodes] ::log::log debug "Have [llength $rootNode]" if {[llength $rootNode] > 1} { foreach tmp $rootNode { #puts "\t Got {[$tmp localName]} looking for {$expectedMsgType}" if {[string equal [$tmp localName] $expectedMsgType] || [string equal [$tmp nodeName] $expectedMsgType]} { set rootNode $tmp break } } } if {![string equal $rootNode {}]} { set rootName [$rootNode localName] |
︙ | ︙ | |||
1623 1624 1625 1626 1627 1628 1629 | "Bad reply type, received '$rootName; but expected '$expectedMsgType'." } ## ## Convert the packet to a dictionary ## set results {} | | < > | | | | 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 | "Bad reply type, received '$rootName; but expected '$expectedMsgType'." } ## ## Convert the packet to a dictionary ## set results {} set headerRootNode [$top selectNodes ENV:Header] foreach outHeaderType [dict get $serviceInfo operation $operationName soapReplyHeader] { if {[string equal $outHeaderType {}]} { continue } set xns [dict get [::WS::Utils::GetServiceTypeDef Client $serviceName $outputHeaderType] xns] set node [$headerRootNode selectNodes $xns:outHeaderType] if {[llength $outHeaderAttrs]} { ::WS::Utils::setAttr $node $outHeaderAttrs } ::log::log debug "Calling [list ::WS::Utils::convertTypeToDict Client $serviceName $node $outHeaderType $headerRootNode]" lappend results [::WS::Utils::convertTypeToDict Client $serviceName $node $outHeaderType $headerRootNode] } ::log::log debug "Calling [list ::WS::Utils::convertTypeToDict Client $serviceName $rootNode $expectedMsgType $body]" if {![string equal $rootName {}]} { lappend results [::WS::Utils::convertTypeToDict \ Client $serviceName $rootNode $expectedMsgType $body] } set results [join $results] $doc delete set ::errorCode {} set ::errorInfo {} return $results |
︙ | ︙ | |||
1904 1905 1906 1907 1908 1909 1910 | $header appendChild [$doc createElement $xns:$inputHeaderType headerData] ::WS::Utils::convertDictToEncodedType Client $serviceName $doc $headerData $argList $inputHeaderType } $env appendChild [$doc createElement "SOAP-ENV:Body" bod] set callXns [dict get $serviceInfo operation $operationName xns] | > | > > > | 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 | $header appendChild [$doc createElement $xns:$inputHeaderType headerData] ::WS::Utils::convertDictToEncodedType Client $serviceName $doc $headerData $argList $inputHeaderType } $env appendChild [$doc createElement "SOAP-ENV:Body" bod] set callXns [dict get $serviceInfo operation $operationName xns] if {![string is space $callXns]} { $bod appendChild [$doc createElement $callXns:$operationName reply] } else { $bod appendChild [$doc createElement $operationName reply] } $reply setAttribute \ SOAP-ENV:encodingStyle "http://schemas.xmlsoap.org/soap/encoding/" ::WS::Utils::convertDictToEncodedType Client $serviceName $doc $reply $argList $msgType append xml \ {<?xml version="1.0" encoding="utf-8"?>} \ |
︙ | ︙ | |||
2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 | append xml \ {<?xml version="1.0" encoding="utf-8"?>} \ "\n" \ [$doc asXML -indent none -doctypeDeclaration 0] #regsub "<!DOCTYPE\[^>\]*>\n" [::dom::DOMImplementation serialize $doc] {} xml $doc delete ::log::log debug "Leaving ::::WS::Client::buildRestCallquery with {$xml}" return $xml } | > > > > > | 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 | append xml \ {<?xml version="1.0" encoding="utf-8"?>} \ "\n" \ [$doc asXML -indent none -doctypeDeclaration 0] #regsub "<!DOCTYPE\[^>\]*>\n" [::dom::DOMImplementation serialize $doc] {} xml $doc delete set inTransform [dict get $serviceInfo inTransform] if {![string equal $inTransform {}]} { set xml [$inTransform $serviceName $operationName REQUEST $xml $url $argList] } ::log::log debug "Leaving ::::WS::Client::buildRestCallquery with {$xml}" return $xml } |
︙ | ︙ | |||
2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 | # ########################################################################### proc ::WS::Client::parseRestResults {serviceName objectName operationName inXML} { variable serviceArr ::log::log debug "In parseResults $serviceName $operationName {$inXML}" set serviceInfo $serviceArr($serviceName) set expectedMsgType [dict get $serviceInfo object $objectName operation $operationName outputs] dom parse $inXML doc $doc documentElement top set xns {} foreach tmp [dict get $serviceInfo targetNamespace] { lappend xns [lindex $tmp 0] [lindex $tmp 1] } | > > > > | 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 | # ########################################################################### proc ::WS::Client::parseRestResults {serviceName objectName operationName inXML} { variable serviceArr ::log::log debug "In parseResults $serviceName $operationName {$inXML}" set serviceInfo $serviceArr($serviceName) set outTransform [dict get $serviceInfo outTransform] if {![string equal $outTransform {}]} { set inXML [$outTransform $serviceName $operationName REPLY $inXML] } set expectedMsgType [dict get $serviceInfo object $objectName operation $operationName outputs] dom parse $inXML doc $doc documentElement top set xns {} foreach tmp [dict get $serviceInfo targetNamespace] { lappend xns [lindex $tmp 0] [lindex $tmp 1] } |
︙ | ︙ |
Changes to ServerSide.tcl.
︙ | ︙ | |||
43 44 45 46 47 48 49 | if {![llength [info command dict]]} { package require dict } package require html package require log package require tdom | | | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | if {![llength [info command dict]]} { package require dict } package require html package require log package require tdom package provide WS::Server 1.4.1 namespace eval ::WS::Server { array set serviceArr {} set procInfo {} set mode {} } |
︙ | ︙ | |||
123 124 125 126 127 128 129 130 131 132 133 134 135 136 | # list prior to this call # -prefix - Path prefix used for the namespace and endpoint # Defaults to "/service/" plus the service name # -traceEnabled - Boolean to enable/disable trace being passed back in exception # Defaults to "Y" # -docFormat - Format of the documentation for operations ("text" or "html"). # Defaults to "text" # # # Returns : Nothing # # Side-Effects : None # # Exception Conditions : | > | 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | # list prior to this call # -prefix - Path prefix used for the namespace and endpoint # Defaults to "/service/" plus the service name # -traceEnabled - Boolean to enable/disable trace being passed back in exception # Defaults to "Y" # -docFormat - Format of the documentation for operations ("text" or "html"). # Defaults to "text" # -stylesheet - The CSS stylesheet URL used in the HTML documentation # # # Returns : Nothing # # Side-Effects : None # # Exception Conditions : |
︙ | ︙ | |||
168 169 170 171 172 173 174 175 176 177 178 179 180 181 | -htmlhead {TclHttpd Based Web Services} -author {} -description {} -mode {tclhttpd} -ports {80} -traceEnabled {Y} -docFormat {text} } array set defaults $args if {[string equal $defaults(-mode) channel]} { set defaults(-ports) {stdin stdout} array set defaults $args } set requiredList {-host -service} | > | 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | -htmlhead {TclHttpd Based Web Services} -author {} -description {} -mode {tclhttpd} -ports {80} -traceEnabled {Y} -docFormat {text} -stylesheet {} } array set defaults $args if {[string equal $defaults(-mode) channel]} { set defaults(-ports) {stdin stdout} array set defaults $args } set requiredList {-host -service} |
︙ | ︙ | |||
1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 | ::html::init ::html::author $serviceData(-author) if {[string equal $serviceData(-description) {}]} { ::html::description "Automatically generated human readable documentation for '$service'" } else { ::html::description $serviceData(-description) } set head $serviceData(-htmlhead) set msg [::html::head $head] append msg [::html::bodyTag] array unset serviceData -service if {[info exists serviceData(-description)]} { set serviceData(-description) [::html::nl2br $serviceData(-description)] | > > > | 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 | ::html::init ::html::author $serviceData(-author) if {[string equal $serviceData(-description) {}]} { ::html::description "Automatically generated human readable documentation for '$service'" } else { ::html::description $serviceData(-description) } if {$serviceData(-stylesheet) != ""} { ::html::headTag "link rel=\"stylesheet\" type=\"text/css\" href=\"$serviceData(-stylesheet)\"" } set head $serviceData(-htmlhead) set msg [::html::head $head] append msg [::html::bodyTag] array unset serviceData -service if {[info exists serviceData(-description)]} { set serviceData(-description) [::html::nl2br $serviceData(-description)] |
︙ | ︙ |
Changes to Utilities.tcl.
︙ | ︙ | |||
40 41 42 43 44 45 46 | ############################################################################### package require Tcl 8.4 if {![llength [info command dict]]} { package require dict } package require log | | | | 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | ############################################################################### package require Tcl 8.4 if {![llength [info command dict]]} { package require dict } package require log package require tdom 0.8 package require struct::set package provide WS::Utils 1.4.1 namespace eval ::WS {} namespace eval ::WS::Utils { set typeInfo {} set currentSchema {} array set importedXref {} |
︙ | ︙ | |||
1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 | ::log::log debug [list ::WS::Utils::convertTypeToDict $mode $serviceName $node $type $root] set typeDefInfo [dict get $typeInfo $mode $serviceName $type] ::log::log debug "\t type def = {$typeDefInfo}" set xns [dict get $typeDefInfo xns] if {[$node hasAttribute href]} { set node [GetReferenceNode $root [$node getAttribute href]] } if {[info exists mutableTypeInfo([list $mode $serviceName $type])]} { set type [(*)[lindex mutableTypeInfo([list $mode $serviceName $type]) 0] $mode $serviceName $type $xns $node] set typeDefInfo [dict get $typeInfo $mode $serviceName $type] } set results {} #if {$options(parseInAttr)} { # foreach attr [$node attributes] { # if {[llength $attr] == 1} { # dict set results $attr [$node getAttribute $attr] # } # } #} | > > | > > | 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 | ::log::log debug [list ::WS::Utils::convertTypeToDict $mode $serviceName $node $type $root] set typeDefInfo [dict get $typeInfo $mode $serviceName $type] ::log::log debug "\t type def = {$typeDefInfo}" set xns [dict get $typeDefInfo xns] if {[$node hasAttribute href]} { set node [GetReferenceNode $root [$node getAttribute href]] } ::log::log debug "\t XML of node is [$node asXML]" if {[info exists mutableTypeInfo([list $mode $serviceName $type])]} { set type [(*)[lindex mutableTypeInfo([list $mode $serviceName $type]) 0] $mode $serviceName $type $xns $node] set typeDefInfo [dict get $typeInfo $mode $serviceName $type] ::log::log debug "\t type def replaced with = {$typeDefInfo}" } set results {} #if {$options(parseInAttr)} { # foreach attr [$node attributes] { # if {[llength $attr] == 1} { # dict set results $attr [$node getAttribute $attr] # } # } #} set partsList [dict keys [dict get $typeDefInfo definition]] ::log::log debug "\t partsList is {$partsList}" foreach partName $partsList { set partType [dict get $typeDefInfo definition $partName type] if {[string equal $partName *] && [string equal $partType *]} { ## ## Type infomation being handled dynamically for this part ## set savedTypeInfo $typeInfo parseDynamicType $mode $serviceName $node $type |
︙ | ︙ | |||
1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 | if {![string length $item]} { ::log::log debug "\tSkipping" continue } } } } switch $typeInfoList { {0 0} { ## ## Simple non-array ## if {$options(parseInAttr)} { foreach attr [$item attributes] { | > > > > > > > > > > > > | 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 | if {![string length $item]} { ::log::log debug "\tSkipping" continue } } } } set origItemList $item set newItemList {} foreach item $origItemList { if {[$item hasAttribute href]} { set oldXML [$item asXML] set item [GetReferenceNode $root [$item getAttribute href]] ::log::log debug "\t\t Replacing: $oldXML" ::log::log debug "\t\t With: [$item asXML]" } lappend newItemList $item } set item $newItemList switch $typeInfoList { {0 0} { ## ## Simple non-array ## if {$options(parseInAttr)} { foreach attr [$item attributes] { |
︙ | ︙ | |||
2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 | } set importedXref($mode,$serviceName,$url) [list $mode $serviceName $tnsCount] switch [dict get [::uri::split $url] scheme] { file { upvar #0 [::uri::geturl $url] token set xml $token(data) unset token } http { set ncode -1 catch { set token [::http::geturl $url] ::http::wait $token set ncode [::http::ncode $token] set xml [::http::data $token] ::http::cleanup $token } if {$ncode != 200} { return \ -code error \ | > > | < | 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 | } set importedXref($mode,$serviceName,$url) [list $mode $serviceName $tnsCount] switch [dict get [::uri::split $url] scheme] { file { upvar #0 [::uri::geturl $url] token set xml $token(data) unset token ProcessImportXml $mode $baseUrl $xml $serviceName $serviceInfoVar $tnsCountVar } http { set ncode -1 catch { set token [::http::geturl $url] ::http::wait $token set ncode [::http::ncode $token] set xml [::http::data $token] ::http::cleanup $token ProcessImportXml $mode $baseUrl $xml $serviceName $serviceInfoVar $tnsCountVar } if {$ncode != 200} { return \ -code error \ -errorcode [list WS CLIENT HTTPFAIL $url $ncode] \ "HTTP get of import file failed '$url'" } } default { return \ -code error \ -errorcode [list WS CLIENT UNKURLTYP $url] \ "Unknown URL type '$url'" } } } ########################################################################### # # Private Procedure Header - as this procedure is modified, please be sure # that you update this header block. Thanks. |
︙ | ︙ |
Changes to pkgIndex.tcl.
1 2 3 4 5 6 7 8 9 10 11 12 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded WS::Channel 1.4.0 [list source [file join $dir ChannelServer.tcl]] package ifneeded WS::CheckAndBuild 0.0.3 [list source [file join $dir CheckAndBuild.tcl]] | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. package ifneeded WS::Channel 1.4.0 [list source [file join $dir ChannelServer.tcl]] package ifneeded WS::CheckAndBuild 0.0.3 [list source [file join $dir CheckAndBuild.tcl]] package ifneeded WS::Client 1.4.1 [list source [file join $dir ClientSide.tcl]] package ifneeded WS::Embeded 1.4.0 [list source [file join $dir Embedded.tcl]] package ifneeded WS::Server 1.4.1 [list source [file join $dir ServerSide.tcl]] package ifneeded WS::Utils 1.4.1 [list source [file join $dir Utilities.tcl]] package ifneeded WS::Wub 1.4.0 [list source [file join $dir WubServer.tcl]] package ifneeded WS::AOLserver 1.4.0 [list source [file join $dir AOLserver.tcl]] package ifneeded Wsdl 1.0 [list source [file join $dir WubServer.tcl]] |