View Ticket
Not logged in
Ticket UUID: 584bfb772724c1a938f671b8a9ac1d57b2d70f58
Title: WS::Client returns nonsense for abstract types
Status: Closed Type: Code_Defect
Severity: Important Priority: Immediate
Subsystem: Client_Side Resolution: Fixed
Assigned to: unassigned
Last Modified: 2018-05-28 11:18:49
Version Found In: 2.5
Description & Comments:
The following program, which access a public API provided by the State of New York, produces nonsense rather than processing the embedded 'Extent' object.
package require WS::Client 2.5
 
::WS::Client::SetOption genOutAttr 1
::WS::Client::SetOption parseInAttr 1
 
set serviceInfo \
    [::WS::Client::GetAndParseWsdl \
	 http://orthos.dhses.ny.gov/arcgis/services/Latest/MapServer?wsdl]
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 \\x[format $02x $ch]
    }
}
puts \n

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

::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}

oehhar added on 2018-01-15 15:04:49 UTC:
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.


oehhar added on 2018-01-17 19:04:04 UTC:
Here is the sent query:

<?xml version="1.0"  encoding="utf-8"?>
<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns="http://www.esri.com/schemas/ArcGIS/10.3"
  xmlns:tns1="http://www.esri.com/schemas/ArcGIS/10.3"
  xmlns:d="http://schemas.xmlsoap.org/wsdl/soap/">
  <SOAP-ENV:Body>
    <tns1:GetServerInfo>
      <tns1:MapName MapName="{} Layers">
      </tns1:MapName>
    </tns1:GetServerInfo>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Here is the answer:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.esri.com/schemas/ArcGIS/10.3">
  <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>

So the return value of TCLWS is for me:

-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

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


gwlester added on 2018-01-26 21:03:48 UTC:
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.


gwlester added on 2018-01-26 21:34:13 UTC:
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.


oehhar added on 2018-02-09 13:38:26 UTC:
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:

::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 

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).


oehhar added on 2018-02-09 14:51:47 UTC:
Looking to the service array:

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

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

Looking at the wsdl:

Definition of FullExtend in the output:

      <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" />

-> type is "Envelope".

<definitions
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:e="http://www.esri.com/schemas/ArcGIS/10.3"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    targetNamespace="http://www.esri.com/schemas/ArcGIS/10.3">
  <types>
    <xs:schema
        targetNamespace="http://www.esri.com/schemas/ArcGIS/10.3"
        xmlns="http://www.esri.com/schemas/ArcGIS/10.3">
..
      <xs:complexType name="Envelope" abstract="true">
        <xs:annotation>
          <xs:documentation />
        </xs:annotation>
        <xs:complexContent mixed="false">
          <xs:extension base="Geometry" />
        </xs:complexContent>
      </xs:complexType>

Now letts look for Geometry:

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

This is nothing.

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

      <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>

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.


oehhar added on 2018-02-09 19:01:51 UTC:
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... ;-)


>>> in: parseScheme Client http://orthos.dhses.ny.gov/arcgis/services/Latest/MapServer 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 

For me, it looks, like a simple type may not be abstract. The else case in line 3447:

    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
        }
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


oehhar added on 2018-02-20 21:50:59 UTC:
What I understand from https://www.w3.org/TR/xmlschema-1/#ct-target_namespace, 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:

typeInfo client $service tns1:envelope {
    definition {}
    xns tns1
    abstract true
}

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:

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 

oehhar added on 2018-02-21 09:43:04 UTC:
The convert2dict of FullExtend is now:

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} 

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:

      <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>

So lets look what was found in the wsdl:

% 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

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

Stop here today. Maybe someone may comment...

Thank you, Harald


oehhar added on 2018-02-21 10:18:10 UTC:
The target namespace says:

% dict get serviceArr(..) targetNamespace
tns1 http://www.esri.com/schemas/ArcGIS/10.3
d http://schemas.xmlsoap.org/wsdl/soap/
xs http://www.w3.org/2001/XMLSchema

thus, tns1 matches the target namespace of the response:

xmlns:tns="http://www.esri.com/schemas/ArcGIS/10.3"

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


oehhar added on 2018-05-11 17:49:22 UTC:
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.


So, line 2170 of

::log::log debug "Using namespaces {$xns}"

of function

proc ::WS::Client::parseResults {serviceName operationName inXML} {

outputs:

Using namespaces {
  ENV http://schemas.xmlsoap.org/soap/envelope/
  xsi http://www.w3.org/2001/XMLSchema-instance
  xs http://www.w3.org/2001/XMLSchema
  tns1 http://www.esri.com/schemas/ArcGIS/10.3
  d http://schemas.xmlsoap.org/wsdl/soap/
  xs http://www.w3.org/2001/XMLSchema}

So, here is "tns1 http://www.esri.com/schemas/ArcGIS/10.3" in "$serviceInfo targetNamespace".

Then, this is called:

::WS::Utils::convertTypeToDict

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:

<soap:Envelope
  ...
  xmlns:tns="http://www.esri.com/schemas/ArcGIS/10.3">

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

$doc selectNodesNamespaces $xns

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

change the namespace prefixes ?

Any idea appreciated.

Thank you, Harald


oehhar added on 2018-05-12 13:00:01 UTC:
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"):

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:tns="http://www.esri.com/schemas/ArcGIS/10.3">
  <soap:Body>
    <tns:GetServerInfoResponse>
      <Result xsi:type="tns:MapServerInfo">
        <Name>Layers</Name>
        <Description></Description>
        <FullExtent xsi:type="tns:EnvelopeN">
          <XMin>-8883833.3022622615</XMin>

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:

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

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:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:tns="http://www.esri.com/schemas/ArcGIS/10.3">

This should be done somewhere here:

proc ::WS::Client::parseResults {serviceName operationName inXML} {
    ...
    $doc selectNodesNamespaces $xns

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


oehhar added on 2018-05-14 15:00:15 UTC:
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):

  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}
  }
}}

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

Thank you, Harald


oehhar added on 2018-05-28 11:18:49 UTC:
No news, good news. So, patch merged by commit [e406ab9e21].

Bug closed.

Thanks to all for this long way foll of stones.