The following program, which access a public API provided by the State of New York, produces nonsense rather than processing the embedded 'Extent' object.

<verbatim>
package require WS::Client 2.5

::WS::Client::SetOption genOutAttr 1
::WS::Client::SetOption parseInAttr 1

set serviceInfo \
    [::WS::Client::GetAndParseWsdl \

set serviceName [::WS::Client::LoadParsedWsdl $serviceInfo]

set procInfo [::WS::Client::CreateStubs $serviceName]

set reply [${serviceName}::GetServerInfo {MapName {{} Layers}}]
set res [dict get $reply Result {}]
puts "  Full Extent:\n    "
foreach c [split [dict get $res FullExtent] {}] {
    if {[string is print $c]} {
	puts -nonewline $c
    } else {
	scan $c c ch
	puts -nonewline $02x $ch]
    }
}
puts \n
</verbatim>

The expected result is that the Extent will be parsed. The actual result is
nonsense that I cannot parse further:

<verbatim>
::type tns:EnvelopeN {} {-8883833.30226226154916395.3269803952-7973800.02042372715632483.3843831643PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]-20037700-30241100148923141.92838538-10000010000-100000100000.0010.0010.001true1021003857}
</verbatim>

Thank you for the ticket!

Gerald wrote by private mail about it:

The code to handle incoming abstract types seems to be missing -- the outgoing code is there.

There should have been code in the Convert Type to Dictionary code that looks to see if the ::type attribute exists, and use that type instead of the "expected" type.


Here is the sent query:
<verbatim>
<?xml version="1.0"  encoding="utf-8"?>
<SOAP-ENV:Envelope


  <SOAP-ENV:Body>
    <tns1:GetServerInfo>
      <tns1:MapName MapName="{} Layers">
      </tns1:MapName>
    </tns1:GetServerInfo>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</verbatim>

Here is the answer:
<verbatim>
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
  <soap:Body>
    <tns:GetServerInfoResponse>
      <Result xsi:type="tns:MapServerInfo">
        <Name>Layers</Name>
        <Description></Description>
        <FullExtent xsi:type="tns:EnvelopeN">
          <XMin>-8883833.3022622615</XMin>
          <YMin>4916395.3269803952</YMin>
          <XMax>-7973800.0204237271</XMax>
          <YMax>5632483.3843831643</YMax>
          <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
            <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
            <XOrigin>-20037700</XOrigin>
            <YOrigin>-30241100</YOrigin>
            <XYScale>148923141.92838538</XYScale>
            <ZOrigin>-100000</ZOrigin>
            <ZScale>10000</ZScale>
            <MOrigin>-100000</MOrigin>
            <MScale>10000</MScale>
            <XYTolerance>0.001</XYTolerance>
            <ZTolerance>0.001</ZTolerance>
            <MTolerance>0.001</MTolerance>
            <HighPrecision>true</HighPrecision>
            <WKID>102100</WKID>
            <LatestWKID>3857</LatestWKID>
          </SpatialReference>
        </FullExtent>
        <Extent xsi:type="tns:EnvelopeN">
          <XMin>-9032563.8177930452</XMin>
          <YMin>5231190.992039226</YMin>
          <XMax>-7825069.5048929453</XMax>
          <YMax>5668287.7872533016</YMax>
          <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
            <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
            <XOrigin>-20037700</XOrigin>
            <YOrigin>-30241100</YOrigin>
            <XYScale>148923141.92838538</XYScale>
            <ZOrigin>-100000</ZOrigin>
            <ZScale>10000</ZScale>
            <MOrigin>-100000</MOrigin>
            <MScale>10000</MScale>
            <XYTolerance>0.001</XYTolerance>
            <ZTolerance>0.001</ZTolerance>
            <MTolerance>0.001</MTolerance>
            <HighPrecision>true</HighPrecision>
            <WKID>102100</WKID>
            <LatestWKID>3857</LatestWKID>
          </SpatialReference>
        </Extent>
        <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
          <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
          <XOrigin>-20037700</XOrigin>
          <YOrigin>-30241100</YOrigin>
          <XYScale>148923141.92838538</XYScale>
          <ZOrigin>-100000</ZOrigin>
          <ZScale>10000</ZScale>
          <MOrigin>-100000</MOrigin>
          <MScale>10000</MScale>
          <XYTolerance>0.001</XYTolerance>
          <ZTolerance>0.001</ZTolerance>
          <MTolerance>0.001</MTolerance>
          <HighPrecision>true</HighPrecision>
          <WKID>102100</WKID>
          <LatestWKID>3857</LatestWKID>
        </SpatialReference>
        <MapLayerInfos xsi:type="tns:ArrayOfMapLayerInfo">
          <MapLayerInfo xsi:type="tns:MapLayerInfo">
            <LayerID>0</LayerID>
            <Name>2017</Name>
            <Description></Description>
            <LayerType>Raster Layer</LayerType>
            <SourceDescription></SourceDescription>
            <HasLabels>false</HasLabels>
            <CanSelect>false</CanSelect>
            <CanScaleSymbols>false</CanScaleSymbols>
            <MinScale>0</MinScale>
            <MaxScale>0</MaxScale>
            <Extent xsi:type="tns:EnvelopeN">
              <XMin>-8834489.6175335757</XMin>
              <YMin>5156244.8684552005</YMin>
              <XMax>-8153518.1043921225</XMax>
              <YMax>5416905.5852028616</YMax>
              <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
                <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
                <XOrigin>-20037700</XOrigin>
                <YOrigin>-30241100</YOrigin>
                <XYScale>148923141.92838538</XYScale>
                <ZOrigin>-100000</ZOrigin>
                <ZScale>10000</ZScale>
                <MOrigin>-100000</MOrigin>
                <MScale>10000</MScale>
                <XYTolerance>0.001</XYTolerance>
                <ZTolerance>0.001</ZTolerance>
                <MTolerance>0.001</MTolerance>
                <HighPrecision>true</HighPrecision>
                <WKID>102100</WKID>
                <LatestWKID>3857</LatestWKID>
              </SpatialReference>
            </Extent>
            <HasHyperlinks>false</HasHyperlinks>
            <HasAttributes>false</HasAttributes>
            <CanIdentify>true</CanIdentify>
            <CanFind>false</CanFind>
            <IsFeatureLayer>false</IsFeatureLayer>
            <DisplayField></DisplayField>
            <IsComposite>false</IsComposite>
            <ParentLayerID>-1</ParentLayerID>
            <FieldAliases xsi:type="tns:ArrayOfString"></FieldAliases>
            <CopyrightText></CopyrightText>
            <SupportsTime>false</SupportsTime>
            <HasLayerDrawingDescription>false</HasLayerDrawingDescription>
            <SupportsStatistics>false</SupportsStatistics>
            <SupportsAdvancedQueries>false</SupportsAdvancedQueries>
          </MapLayerInfo>
          <MapLayerInfo xsi:type="tns:MapLayerInfo">
            <LayerID>1</LayerID>
            <Name>2016</Name>
            <Description></Description>
            <LayerType>Raster Layer</LayerType>
            <SourceDescription></SourceDescription>
            <HasLabels>false</HasLabels>
            <CanSelect>false</CanSelect>
            <CanScaleSymbols>false</CanScaleSymbols>
            <MinScale>0</MinScale>
            <MaxScale>0</MaxScale>
            <Extent xsi:type="tns:EnvelopeN">
              <XMin>-8883833.3022622615</XMin>
              <YMin>4935901.9968763581</YMin>
              <XMax>-7994169.8912911974</XMax>
              <YMax>5250426.0362308249</YMax>
              <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
                <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
                <XOrigin>-20037700</XOrigin>
                <YOrigin>-30241100</YOrigin>
                <XYScale>148923141.92838538</XYScale>
                <ZOrigin>-100000</ZOrigin>
                <ZScale>10000</ZScale>
                <MOrigin>-100000</MOrigin>
                <MScale>10000</MScale>
                <XYTolerance>0.001</XYTolerance>
                <ZTolerance>0.001</ZTolerance>
                <MTolerance>0.001</MTolerance>
                <HighPrecision>true</HighPrecision>
                <WKID>102100</WKID>
                <LatestWKID>3857</LatestWKID>
              </SpatialReference>
            </Extent>
            <HasHyperlinks>false</HasHyperlinks>
            <HasAttributes>false</HasAttributes>
            <CanIdentify>true</CanIdentify>
            <CanFind>false</CanFind>
            <IsFeatureLayer>false</IsFeatureLayer>
            <DisplayField></DisplayField>
            <IsComposite>false</IsComposite>
            <ParentLayerID>-1</ParentLayerID>
            <FieldAliases xsi:type="tns:ArrayOfString"></FieldAliases>
            <CopyrightText></CopyrightText>
            <SupportsTime>false</SupportsTime>
            <HasLayerDrawingDescription>false</HasLayerDrawingDescription>
            <SupportsStatistics>false</SupportsStatistics>
            <SupportsAdvancedQueries>false</SupportsAdvancedQueries>
          </MapLayerInfo>
          <MapLayerInfo xsi:type="tns:MapLayerInfo">
            <LayerID>2</LayerID>
            <Name>2015</Name>
            <Description></Description>
            <LayerType>Raster Layer</LayerType>
            <SourceDescription></SourceDescription>
            <HasLabels>false</HasLabels>
            <CanSelect>false</CanSelect>
            <CanScaleSymbols>false</CanScaleSymbols>
            <MinScale>0</MinScale>
            <MaxScale>0</MaxScale>
            <Extent xsi:type="tns:EnvelopeN">
              <XMin>-8757036.5142437723</XMin>
              <YMin>5172078.0822625048</YMin>
              <XMax>-8358024.1791779883</XMax>
              <YMax>5550135.624045318</YMax>
              <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
                <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
                <XOrigin>-20037700</XOrigin>
                <YOrigin>-30241100</YOrigin>
                <XYScale>148923141.92838538</XYScale>
                <ZOrigin>-100000</ZOrigin>
                <ZScale>10000</ZScale>
                <MOrigin>-100000</MOrigin>
                <MScale>10000</MScale>
                <XYTolerance>0.001</XYTolerance>
                <ZTolerance>0.001</ZTolerance>
                <MTolerance>0.001</MTolerance>
                <HighPrecision>true</HighPrecision>
                <WKID>102100</WKID>
                <LatestWKID>3857</LatestWKID>
              </SpatialReference>
            </Extent>
            <HasHyperlinks>false</HasHyperlinks>
            <HasAttributes>false</HasAttributes>
            <CanIdentify>true</CanIdentify>
            <CanFind>false</CanFind>
            <IsFeatureLayer>false</IsFeatureLayer>
            <DisplayField></DisplayField>
            <IsComposite>false</IsComposite>
            <ParentLayerID>-1</ParentLayerID>
            <FieldAliases xsi:type="tns:ArrayOfString"></FieldAliases>
            <CopyrightText></CopyrightText>
            <SupportsTime>false</SupportsTime>
            <HasLayerDrawingDescription>false</HasLayerDrawingDescription>
            <SupportsStatistics>false</SupportsStatistics>
            <SupportsAdvancedQueries>false</SupportsAdvancedQueries>
          </MapLayerInfo>
          <MapLayerInfo xsi:type="tns:MapLayerInfo">
            <LayerID>3</LayerID>
            <Name>2014</Name>
            <Description></Description>
            <LayerType>Raster Layer</LayerType>
            <SourceDescription></SourceDescription>
            <HasLabels>false</HasLabels>
            <CanSelect>false</CanSelect>
            <CanScaleSymbols>false</CanScaleSymbols>
            <MinScale>0</MinScale>
            <MaxScale>0</MaxScale>
            <Extent xsi:type="tns:EnvelopeN">
              <XMin>-8813309.0961515307</XMin>
              <YMin>4935408.7391783725</YMin>
              <XMax>-8150129.7942487178</XMax>
              <YMax>5632483.3843831643</YMax>
              <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
                <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
                <XOrigin>-20037700</XOrigin>
                <YOrigin>-30241100</YOrigin>
                <XYScale>148923141.92838538</XYScale>
                <ZOrigin>-100000</ZOrigin>
                <ZScale>10000</ZScale>
                <MOrigin>-100000</MOrigin>
                <MScale>10000</MScale>
                <XYTolerance>0.001</XYTolerance>
                <ZTolerance>0.001</ZTolerance>
                <MTolerance>0.001</MTolerance>
                <HighPrecision>true</HighPrecision>
                <WKID>102100</WKID>
                <LatestWKID>3857</LatestWKID>
              </SpatialReference>
            </Extent>
            <HasHyperlinks>false</HasHyperlinks>
            <HasAttributes>false</HasAttributes>
            <CanIdentify>true</CanIdentify>
            <CanFind>false</CanFind>
            <IsFeatureLayer>false</IsFeatureLayer>
            <DisplayField></DisplayField>
            <IsComposite>false</IsComposite>
            <ParentLayerID>-1</ParentLayerID>
            <FieldAliases xsi:type="tns:ArrayOfString"></FieldAliases>
            <CopyrightText></CopyrightText>
            <SupportsTime>false</SupportsTime>
            <HasLayerDrawingDescription>false</HasLayerDrawingDescription>
            <SupportsStatistics>false</SupportsStatistics>
            <SupportsAdvancedQueries>false</SupportsAdvancedQueries>
          </MapLayerInfo>
          <MapLayerInfo xsi:type="tns:MapLayerInfo">
            <LayerID>4</LayerID>
            <Name>2013</Name>
            <Description></Description>
            <LayerType>Raster Layer</LayerType>
            <SourceDescription></SourceDescription>
            <HasLabels>false</HasLabels>
            <CanSelect>false</CanSelect>
            <CanScaleSymbols>false</CanScaleSymbols>
            <MinScale>0</MinScale>
            <MaxScale>0</MaxScale>
            <Extent xsi:type="tns:EnvelopeN">
              <XMin>-8485598.4750933405</XMin>
              <YMin>4916395.3269803952</YMin>
              <XMax>-7973800.0204237271</XMax>
              <YMax>5581661.1208890416</YMax>
              <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
                <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
                <XOrigin>-20037700</XOrigin>
                <YOrigin>-30241100</YOrigin>
                <XYScale>148923141.92838538</XYScale>
                <ZOrigin>-100000</ZOrigin>
                <ZScale>10000</ZScale>
                <MOrigin>-100000</MOrigin>
                <MScale>10000</MScale>
                <XYTolerance>0.001</XYTolerance>
                <ZTolerance>0.001</ZTolerance>
                <MTolerance>0.001</MTolerance>
                <HighPrecision>true</HighPrecision>
                <WKID>102100</WKID>
                <LatestWKID>3857</LatestWKID>
              </SpatialReference>
            </Extent>
            <HasHyperlinks>false</HasHyperlinks>
            <HasAttributes>false</HasAttributes>
            <CanIdentify>true</CanIdentify>
            <CanFind>false</CanFind>
            <IsFeatureLayer>false</IsFeatureLayer>
            <DisplayField></DisplayField>
            <IsComposite>false</IsComposite>
            <ParentLayerID>-1</ParentLayerID>
            <FieldAliases xsi:type="tns:ArrayOfString"></FieldAliases>
            <CopyrightText></CopyrightText>
            <SupportsTime>false</SupportsTime>
            <HasLayerDrawingDescription>false</HasLayerDrawingDescription>
            <SupportsStatistics>false</SupportsStatistics>
            <SupportsAdvancedQueries>false</SupportsAdvancedQueries>
          </MapLayerInfo>
        </MapLayerInfos>
        <BackgroundColor xsi:type="tns:RgbColor">
          <UseWindowsDithering>true</UseWindowsDithering>
          <AlphaValue>255</AlphaValue>
          <Red>253</Red>
          <Green>253</Green>
          <Blue>253</Blue>
        </BackgroundColor>
        <Bookmarks xsi:type="tns:ArrayOfMapServerBookmark"></Bookmarks>
        <DefaultMapDescription xsi:type="tns:MapDescription">
          <Name>Layers</Name>
          <MapArea xsi:type="tns:MapExtent">
            <Extent xsi:type="tns:EnvelopeN">
              <XMin>-9032563.8177930452</XMin>
              <YMin>5231190.992039226</YMin>
              <XMax>-7825069.5048929453</XMax>
              <YMax>5668287.7872533016</YMax>
              <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
                <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
                <XOrigin>-20037700</XOrigin>
                <YOrigin>-30241100</YOrigin>
                <XYScale>148923141.92838538</XYScale>
                <ZOrigin>-100000</ZOrigin>
                <ZScale>10000</ZScale>
                <MOrigin>-100000</MOrigin>
                <MScale>10000</MScale>
                <XYTolerance>0.001</XYTolerance>
                <ZTolerance>0.001</ZTolerance>
                <MTolerance>0.001</MTolerance>
                <HighPrecision>true</HighPrecision>
                <WKID>102100</WKID>
                <LatestWKID>3857</LatestWKID>
              </SpatialReference>
            </Extent>
          </MapArea>
          <LayerDescriptions xsi:type="tns:ArrayOfLayerDescription">
            <LayerDescription xsi:type="tns:LayerDescription">
              <LayerID>0</LayerID>
              <Visible>true</Visible>
              <ShowLabels>false</ShowLabels>
              <ScaleSymbols>false</ScaleSymbols>
              <SetSelectionSymbol>true</SetSelectionSymbol>
              <SelectionBufferDistance>0</SelectionBufferDistance>
              <ShowSelectionBuffer>false</ShowSelectionBuffer>
              <DefinitionExpression></DefinitionExpression>
            </LayerDescription>
            <LayerDescription xsi:type="tns:LayerDescription">
              <LayerID>1</LayerID>
              <Visible>true</Visible>
              <ShowLabels>false</ShowLabels>
              <ScaleSymbols>false</ScaleSymbols>
              <SetSelectionSymbol>true</SetSelectionSymbol>
              <SelectionBufferDistance>0</SelectionBufferDistance>
              <ShowSelectionBuffer>false</ShowSelectionBuffer>
              <DefinitionExpression></DefinitionExpression>
            </LayerDescription>
            <LayerDescription xsi:type="tns:LayerDescription">
              <LayerID>2</LayerID>
              <Visible>true</Visible>
              <ShowLabels>false</ShowLabels>
              <ScaleSymbols>false</ScaleSymbols>
              <SetSelectionSymbol>true</SetSelectionSymbol>
              <SelectionBufferDistance>0</SelectionBufferDistance>
              <ShowSelectionBuffer>false</ShowSelectionBuffer>
              <DefinitionExpression></DefinitionExpression>
            </LayerDescription>
            <LayerDescription xsi:type="tns:LayerDescription">
              <LayerID>3</LayerID>
              <Visible>true</Visible>
              <ShowLabels>false</ShowLabels>
              <ScaleSymbols>false</ScaleSymbols>
              <SetSelectionSymbol>true</SetSelectionSymbol>
              <SelectionBufferDistance>0</SelectionBufferDistance>
              <ShowSelectionBuffer>false</ShowSelectionBuffer>
              <DefinitionExpression></DefinitionExpression>
            </LayerDescription>
            <LayerDescription xsi:type="tns:LayerDescription">
              <LayerID>4</LayerID>
              <Visible>true</Visible>
              <ShowLabels>false</ShowLabels>
              <ScaleSymbols>false</ScaleSymbols>
              <SetSelectionSymbol>true</SetSelectionSymbol>
              <SelectionBufferDistance>0</SelectionBufferDistance>
              <ShowSelectionBuffer>false</ShowSelectionBuffer>
              <DefinitionExpression></DefinitionExpression>
            </LayerDescription>
          </LayerDescriptions>
          <Rotation>0</Rotation>
          <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
            <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
            <XOrigin>-20037700</XOrigin>
            <YOrigin>-30241100</YOrigin>
            <XYScale>148923141.92838538</XYScale>
            <ZOrigin>-100000</ZOrigin>
            <ZScale>10000</ZScale>
            <MOrigin>-100000</MOrigin>
            <MScale>10000</MScale>
            <XYTolerance>0.001</XYTolerance>
            <ZTolerance>0.001</ZTolerance>
            <MTolerance>0.001</MTolerance>
            <HighPrecision>true</HighPrecision>
            <WKID>102100</WKID>
            <LatestWKID>3857</LatestWKID>
          </SpatialReference>
          <BackgroundSymbol xsi:type="tns:SimpleFillSymbol">
            <Color xsi:type="tns:RgbColor">
              <UseWindowsDithering>true</UseWindowsDithering>
              <AlphaValue>255</AlphaValue>
              <Red>253</Red>
              <Green>253</Green>
              <Blue>253</Blue>
            </Color>
            <Style>esriSFSSolid</Style>
          </BackgroundSymbol>
          <TimeRelation>esriTimeRelationOverlaps</TimeRelation>
        </DefaultMapDescription>
        <Units>esriMeters</Units>
        <BackgroundSymbol xsi:type="tns:SimpleFillSymbol">
          <Color xsi:type="tns:RgbColor">
            <UseWindowsDithering>true</UseWindowsDithering>
            <AlphaValue>255</AlphaValue>
            <Red>253</Red>
            <Green>253</Green>
            <Blue>253</Blue>
          </Color>
          <Style>esriSFSSolid</Style>
        </BackgroundSymbol>
        <CopyrightText></CopyrightText>
      </Result>
    </tns:GetServerInfoResponse>
  </soap:Body>
</soap:Envelope>
</verbatim>

So the return value of TCLWS is for me:
<verbatim>
-8883833.30226226154916395.3269803952-7973800.02042372715632483.3843831643PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]-20037700-30241100148923141.92838538-10000010000-100000100000.0010.0010.001true1021003857
</verbatim>

This is the concatenated data of all fields.
Only within the beginning, the values are different.

I close my analysis so far.

Eventually, Gerald may shed more light on his comment what is exactly missing and going wrong here. And what would be the correct output ;-)

Thank you,
Harald

The type to dict conversion routine should be looking at the xsi:type attribute of nodes who are an "abstract type" node to see what the type to use for the conversion to a dictionary really should be for incoming messages.

That is the behavior documented.

The dict to type conversion routine does this for outgoing messages.

I *really* seem to remember this code being there at one time.  It should be a couple of lines of code to fix the issue.

Actually, the code looks like it is there Utility.tcl lines 1589-1592 and lines 1622-1625.

I'm guessing that for some reason the test is failing when it should succeed.  Some debugging right there should fix the issue.

Thank you for the pointer to convertTypeToDict.

The (very complex) extend type is parsed as non array simple type.
Thus a call to "getText" on the whole result subtree gives this annoying result.

Here is the log file analysis on the call with the children of the Result node as argument:

<verbatim>
::WS::Utils::convertTypeToDict Client 1 domNode052AAEF0 tns1:MapServerInfo domNode052AB418 0
	 type def = {definition {Name {type xs:string comment {}} Description {type xs:string comment {}} FullExtent {type tns1:Envelope comment {}} Extent {type tns1:Envelope comment {}} SpatialReference {type tns1:SpatialReference comment {The spatial reference of the map (data frame).}} MapLayerInfos {type tns1:ArrayOfMapLayerInfo comment {}} BackgroundColor {type tns1:Color comment {}} Bookmarks {type tns1:ArrayOfMapServerBookmark comment {}} DefaultMapDescription {type tns1:MapDescription comment {}} Units {type tns1:esriUnits comment {The units for the map (data frame).}} SupportedImageReturnTypes {type tns1:esriImageReturnType comment {}} BackgroundSymbol {type tns1:FillSymbol comment {}} CopyrightText {type xs:string comment {}} StandaloneTableInfos {type tns1:ArrayOfStandaloneTableInfo comment {}} StandaloneTableDescriptions {type tns1:ArrayOfStandaloneTableDescription comment {}} FullTimeExtent {type tns1:TimeExtent comment {}} DefaultTimeStepInterval {type xs:double comment {}} DefaultTimeStepIntervalUnits {type tns1:esriTimeUnits comment {}} DefaultTimeWindow {type xs:double comment {}} SupportsDynamicLayers {type xs:boolean comment {}} HasLiveData {type xs:boolean comment {}} MinScale {type xs:double comment {}} MaxScale {type xs:double comment {}}} xns tns1 abstract false}
 	 XML of node is <Result xsi:type="tns:MapServerInfo">
     <Name>Layers</Name>
     <Description/>
     <FullExtent xsi:type="tns:EnvelopeN">
         <XMin>-8883833.3022622615</XMin>
         <YMin>4916395.3269803952</YMin>
         <XMax>-7973800.0204237271</XMax>
         <YMax>5632483.3843831643</YMax>
         <SpatialReference xsi:type="tns:ProjectedCoordinateSystem">
             <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
             <XOrigin>-20037700</XOrigin>
             <YOrigin>-30241100</YOrigin>
             <XYScale>148923141.92838538</XYScale>
             <ZOrigin>-100000</ZOrigin>
             <ZScale>10000</ZScale>
             <MOrigin>-100000</MOrigin>
             <MScale>10000</MScale>
             <XYTolerance>0.001</XYTolerance>
             <ZTolerance>0.001</ZTolerance>
             <MTolerance>0.001</MTolerance>
             <HighPrecision>true</HighPrecision>
             <WKID>102100</WKID>
             <LatestWKID>3857</LatestWKID>
         </SpatialReference>
     </FullExtent>
*** snip ***

 	 partsList is {Name Description FullExtent Extent SpatialReference MapLayerInfos BackgroundColor Bookmarks DefaultMapDescription Units SupportedImageReturnTypes BackgroundSymbol CopyrightText StandaloneTableInfos StandaloneTableDescriptions FullTimeExtent DefaultTimeStepInterval DefaultTimeStepIntervalUnits DefaultTimeWindow SupportsDynamicLayers HasLiveData MinScale MaxScale}
 Type = {string} typeInfoList = {0 0}
 @3
 	partName Name partType xs:string xns tns1 typeInfoList 0 0
 Trying #1 domNode052AAEF0 selectNodes tns1:Name
 Trying #2 domNode052AAEF0 selectNodes tns1:Name
 Trying #3 domNode052AAEF0 selectNodes Name
 		 Found 1 Name

*** in ::WS::Utils::GetServiceTypeDef Client 1 xs:string

 Type = {string} typeInfoList = {0 0}
 @3
*** -> symple type: string
 	partName Description partType xs:string xns tns1 typeInfoList 0 0
 Trying #1 domNode052AAEF0 selectNodes tns1:Description
 Trying #2 domNode052AAEF0 selectNodes tns1:Description
 Trying #3 domNode052AAEF0 selectNodes Description
 		 Found 1 Description
*** here is the FullExtend run ***

*** in (::WS::Utils::GetServiceTypeDef Client 1 tns1:Envelope)

 Type = {tns1:Envelope} typeInfoList = {0 0}
 @2

*** Custom simple type
*** simpleTypes($mode=Client,$service=1,$type=tns1:Envelope) = {0 0}

*** utilities 1443
	partName FullExtent partType tns1:Envelope xns tns1 typeInfoList 0 0
 Trying #1 domNode052AAEF0 selectNodes tns1:FullExtent
 Trying #2 domNode052AAEF0 selectNodes tns1:FullExtent
 Trying #3 domNode052AAEF0 selectNodes FullExtent
*** utilities 1477
 		 Found 1 FullExtent
</verbatim>

With the type "0 0", it goes to a getText and thus to the strange result.

Now, the type should be non simple non array "1 0".
Then, we would get the single fields (or would get a chance to get it).

Looking to the service array:

<verbatim>
simpletypes -> list of ... {tns1:Envelope {base string comment {} xns tns1}} ...
</verbatim>

so it is considered as simple type, cousing this result.

Looking at the wsdl:

Definition of FullExtend in the output:
<verbatim>
      <xs:complexType name="MapServerInfo">
        <xs:annotation>
          <xs:documentation />
        </xs:annotation>
        <xs:sequence>
          <xs:element name="Name" type="xs:string" />
          <xs:element name="Description" type="xs:string" />
          <xs:element minOccurs="0" name="FullExtent" type="Envelope" />

</verbatim>

-> type is "Envelope".

<verbatim>
<definitions


  <types>
    <xs:schema


..
      <xs:complexType name="Envelope" abstract="true">
        <xs:annotation>
          <xs:documentation />
        </xs:annotation>
        <xs:complexContent mixed="false">
          <xs:extension base="Geometry" />
        </xs:complexContent>
      </xs:complexType>
</verbatim>

Now letts look for Geometry:

<verbatim>
      <xs:complexType name="Geometry">
        <xs:annotation>
          <xs:documentation />
        </xs:annotation>
      </xs:complexType>
</verbatim>

This is nothing.


When reverse looking for the returned element "XMin", I only get one type, which directly follows the Extend type:

<verbatim>
      <xs:complexType name="Envelope" abstract="true">
        <xs:annotation>
          <xs:documentation />
        </xs:annotation>
        <xs:complexContent mixed="false">
          <xs:extension base="Geometry" />
        </xs:complexContent>
      </xs:complexType>
      <xs:complexType name="EnvelopeN">
        <xs:annotation>
          <xs:documentation />
        </xs:annotation>
        <xs:complexContent mixed="false">
          <xs:extension base="Envelope">
            <xs:sequence>
              <xs:element name="XMin" type="xs:double" />
              <xs:element name="YMin" type="xs:double" />
              <xs:element name="XMax" type="xs:double" />
              <xs:element name="YMax" type="xs:double" />
              <xs:element minOccurs="0" name="ZMin" type="xs:double" />
              <xs:element minOccurs="0" name="ZMax" type="xs:double" />
              <xs:element minOccurs="0" name="MMin" type="xs:double" />
              <xs:element minOccurs="0" name="MMax" type="xs:double" />
              <xs:element minOccurs="0" name="SpatialReference" type="SpatialReference" />
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
      <xs:complexType name="EnvelopeB">
        <xs:annotation>
          <xs:documentation />
        </xs:annotation>
        <xs:complexContent mixed="false">
          <xs:extension base="Envelope">
            <xs:sequence>
              <xs:element name="Bytes" type="xs:base64Binary" />
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
</verbatim>

Here is the definition matching the input data.

It seams to be something like abstract classes in oo-c.

The type is empty and replaced by one of the real types in function of context.

So, I suppose, abstract classes are not supported or broken.


Gerald wrote by private mail that abstract types are supported.

So look why the abstract type is not set for Envelope.

(The log of loading the wsdl is 1.8GB and takes 30 Minuites to be generated... ;-)

<verbatim>

>>> in: parseScheme Client domNode053D9940 1 serviceInfo tnsCount
 	processing domNode054299A4

>>> Call
Entering parseComplexType Client serviceInfo 1 domNode054299A4 tns1
Complex Type is tns1:Envelope
*** Line 3255 -> Abstract type is detected
	 Abstract type = true
Complex Type is tns1:Envelope, middle is annotation
Complex Type is tns1:Envelope, middle is complexContent

*** Line 3372: complexContent case

Content Type is {extension}

*** Line 3400: handler for extension

Calling partList for extension of tns1:Envelope

>>> Call: partList mode=Client node=domNode05429A54 serviceName=1 dictVar=results tns=tns1 {occurs=""}
Entering partList Client domNode05429A54 1 results tns1 -- for extension

*** Line 3535: special treatment for extension

	 base name of extension is {tns1:Geometry} with typeinfo {0 0}
*** As Geometry is a simple type, no further processing (which looks ok)
	 Simple type
*** As no child nodes, a list with an empty element is returned
<<< back
partList for extension of tns1:Envelope is {{}}
at end of foreach {tns1:Envelope} with {}
Defining tns1:Envelope

*** Line 3444: empty part list but abstract type

*** Line 3448: As there is no partlist, a simple type is defined here for the abstract type

>>> In: ServiceSimpleTypeDef Client 1 tns1:Envelope {base string comment {}} tns1
</verbatim>

For me, it looks, like a simple type may not be abstract.
The else case in line 3447:
<verbatim>
    if {[llength $partList] || $isAbstractType} {
        #dict set results types $tns:$typeName $partList
        dict set results types $typeName $partList
        ::log:::log debug  "Defining $typeName"
        if {[llength $partList]  && ![string equal [lindex $partList 0] {}]} {
            ::WS::Utils::ServiceTypeDef $mode $serviceName $typeName $partList $tns $isAbstractType
        } else {
            ::WS::Utils::ServiceSimpleTypeDef $mode $serviceName $typeName [list base $defaultType comment {}] $tns
        }
</verbatim>
may probably only be hit by an abstract type.

The abstract type information is lost (maybe not necessary for a simple type).

An abstract type may be flagged by the upper if-case routine "ServiceTypeDef ".

So far an analysis...

Harald


What I understand from an abstract type should have:

   *   simpleContent
   *   complexContent

In our case, it is complex content, but saved as simple type.

So this is changed in branch [bug584bfb7727-abstract-type] by commit [6975d0e818].

This results in a complex type definition for tns1:Envelope with the attributes:

<verbatim>
typeInfo client $service tns1:envelope {
    definition {}
    xns tns1
    abstract true
}
</verbatim>

The result is still the same. This does not help and there is more work necessary.

But here is the log of the WSDL parse of envelope type:

<verbatim>
Entering parseComplexType Client serviceInfo 1 domNode053DBE0C tns1
Complex Type is tns1:Envelope
	 Abstract type = true
Complex Type is tns1:Envelope, middle is annotation
Complex Type is tns1:Envelope, middle is complexContent
isComplexContent := 1
Content Type is {extension}
Calling partList for extension of tns1:Envelope
Entering partList Client domNode053DBEBC 1 results tns1 -- for extension
	 base name of extension is {tns1:Geometry} with typeinfo {0 0}
	 Simple type
partList for extension of tns1:Envelope is {{}}
at end of foreach {tns1:Envelope} with {}
Defining tns1:Envelope as
Entering ::WS::Utils::ServiceTypeDef Client 1 tns1:Envelope {} tns1 true
</verbatim>

The convert2dict of FullExtend is now:

<verbatim>
in ::WS::Utils::convertTypeToDict Client Latest_MapServer domNode054ED118 tns1:MapServerInfo domNode054ED640
...
Trying #3 domNode054ED118 selectNodes FullExtent
		 Found 1 FullExtent

*** Line 1628 Non-simple non-array
*** The abstract type FullExtend was replaced by tns:EnvelopeN
*** Before the change, we got here:
*** Type = {tns1:Envelope} typeInfoList = {0 0}

Entering convertTypeToDict Client Latest_MapServer domNode054ED19C tns:EnvelopeN domNode054ED640

*** ::WS::Utils::convertTypeToDict
*** type=tns:EnvelopeN
*** isArray=0

Type = {tns:EnvelopeN} typeInfoList = {1 0}

*** Apparently, tns:EnvelopeN is not present in the typeInfo.
*** So, the base type is evaluated and the asText is called.

Type = {tns1:Envelope} typeInfoList = {1 0}
</verbatim>

So, apparently one step further.

Now, tns:EnvelopeN is not found in dict:

   *   typeInfo Client Latest_MapServer tns:EnvelopeN
   *   typeInfo Client Latest_MapServer Latest_MapServer:tns:EnvelopeN

Its wsdl snippet is:

<verbatim>
      <xs:complexType name="EnvelopeN">
        <xs:annotation>
          <xs:documentation />
        </xs:annotation>
        <xs:complexContent mixed="false">
          <xs:extension base="Envelope">
            <xs:sequence>
              <xs:element name="XMin" type="xs:double" />
              <xs:element name="YMin" type="xs:double" />
              <xs:element name="XMax" type="xs:double" />
              <xs:element name="YMax" type="xs:double" />
              <xs:element minOccurs="0" name="ZMin" type="xs:double" />
              <xs:element minOccurs="0" name="ZMax" type="xs:double" />
              <xs:element minOccurs="0" name="MMin" type="xs:double" />
              <xs:element minOccurs="0" name="MMax" type="xs:double" />
              <xs:element minOccurs="0" name="SpatialReference" type="SpatialReference" />
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
</verbatim>

So lets look what was found in the wsdl:

<verbatim>
% dict get $::WS::Utils::typeInfo Client Latest_MapServer tns:EnvelopeN
key "tns:EnvelopeN" not known in dictionary
% dict get $::WS::Utils::typeInfo Client Latest_MapServer tns1:EnvelopeN
definition {
  XMin {type xs:double comment {}}
  YMin {type xs:double comment {}}
  XMax {type xs:double comment {}}
  YMax {type xs:double comment {}}
  ZMin {type xs:double comment {}}
  ZMax {type xs:double comment {}}
  MMin {type xs:double comment {}}
  MMax {type xs:double comment {}}
  SpatialReference {type tns1:SpatialReference comment {}}
}
xns tns1
abstract false
</verbatim>

So, there is a wrong namespace, "tns1" instead "tns"...

Stop here today. Maybe someone may comment...

Thank you,
Harald

The target namespace says:

<verbatim>
% dict get serviceArr(..) targetNamespace
tns1
d
xs
</verbatim>

thus, tns1 matches the target namespace of the response:

<verbatim>

</verbatim>

So, there is another issue in TCLWS...

If anybody may help where the sent namespace prefix of the response should be mapped to the TCLWS prefix...

Thanks,
Harald

A debug session I tried to find the code to find where the response namespace prefix is mapped to the auto-generated namespace prefix from the wsdl analysis.

To resume:

   *   TCLWS namespace prefix for type "EnvelopeN": tns1
   *   Response XML namespace for same type: tns

Both are not mapped together resulting in a miss-interpretation of the response.

<hr />

So, line 2170 of

<verbatim>
::log::log debug "Using namespaces {$xns}"
</verbatim>

of function

<verbatim>
proc ::WS::Client::parseResults {serviceName operationName inXML} {
</verbatim>

outputs:

<verbatim>
Using namespaces {
  ENV
  xsi
  xs
  tns1
  d
  xs
</verbatim>

So, here is "tns1 in "$serviceInfo targetNamespace".

Then, this is called:

<verbatim>
::WS::Utils::convertTypeToDict
</verbatim>

The response namespace prefix contained in the top "Envelope" tag is never looked up. It seams to be ignored. But the required information is in there:

<verbatim>
<soap:Envelope
  ...

</verbatim>

How may this work ?

IMHO there should be a match done of the header namespace prefixes to the ones saved in the wsdl.

Or is this an issue in tdom ?

Should the command

<verbatim>
$doc selectNodesNamespaces $xns
</verbatim>

(Line 2171 ClientSide, directly follows the debug line mentioned here at the top)

change the namespace prefixes ?

Any idea appreciated.

Thank you,
Harald

One day further...

I think, the point is just not implemented.

As the namespace prefix is given as attribute in the response (see xsi::type="tns:EnvelopeN"):

<verbatim>
<soap:Envelope


  <soap:Body>
    <tns:GetServerInfoResponse>
      <Result xsi:type="tns:MapServerInfo">
        <Name>Layers</Name>
        <Description></Description>
        <FullExtent xsi:type="tns:EnvelopeN">
          <XMin>-8883833.3022622615</XMin>
</verbatim>

it is not translated by tdom. How should tdom know, that there is a prefix to translate within an attribute?

So, I suppose the functionality is just missing.

I suppose, the issue is here:

<verbatim>
proc ::WS::Utils::convertTypeToDict {mode serviceName node type root {isArray 0}} {
    ...
                    if {$isAbstract && [$item hasAttributeNS type]} {
                        # partType is now tns::EnvelopeN
                        set partType [$item getAttributeNS type]
                        # The type attribute is removed from the snippet.
                        # So, it is not handled in the loop below.
                        $item removeAttributeNS type
                        ...
                    }
                    ...
                    dict set results $partName $valueAttr [convertTypeToDict $mode $serviceName $item $partType $root]
</verbatim>

After the abstract type is resolved, an eventual namespace prefix should be detected in partType and replaced by the tclws prefix.

For that, the Envelope element should be analysed and a table should be build:

<verbatim>
<soap:Envelope


</verbatim>

This should be done somewhere here:

<verbatim>
proc ::WS::Client::parseResults {serviceName operationName inXML} {
    ...
    $doc selectNodesNamespaces $xns
</verbatim>

There, we have the list of namespaces from the WSDL parse.

I don't know now how to transport this table to recursive function "::WS::Utils::convertTypeToDict", but this will come with implementation try.

Any thoughts welcome. I will hopefully soon try to implement this idea.

Thank you,
Harald

Well, after the intense help of Rolf, this point is fixed in checkin [300b2b5c3a].

I get the following result for the initial test script (running 10 minuites on my computer ;-)) (some line-feeds manually added):

<verbatim>
  Full Extent:
{} {
  XMin {{} -8883833.3022622615}
  YMin {{} 4916395.3269803952}
  XMax {{} -7973800.0204237271}
  YMax {{} 5632483.3843831643}
  SpatialReference {{} {
    WKT {{} {PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]}}
    XOrigin {{} -20037700}
    YOrigin {{} -30241100}
    XYScale {{} 148923141.92838538}
    ZOrigin {{} -100000}
    ZScale {{} 10000}
    MOrigin {{} -100000}
    MScale {{} 10000}
    XYTolerance {{} 0.001}
    ZTolerance {{} 0.001}
    MTolerance {{} 0.001}
    HighPrecision {{} true}
    WKID {{} 102100}
    LatestWKID {{} 3857}
  }
}}
</verbatim>

Kevin, I would appreciate a test and review within one week.
No test is ok to, I will merge and close.

Thank you,
Harald