[prev in list] [next in list] [prev in thread] [next in thread] 

List:       fdo-commits
Subject:    [fdo-commits] r8151 - in sandbox/adsk/4.2.Pi: . Fdo/Unmanaged/Src/Fdo/Schema Providers/WFS/Src/Provi
From:       svn_fdo () osgeo ! org
Date:       2021-10-27 2:19:05
Message-ID: 20211027021906.00420178636 () trac ! osgeo ! org
[Download RAW message or body]

Author: christinebao
Date: 2021-10-26 19:19:03 -0700 (Tue, 26 Oct 2021)
New Revision: 8151

Modified:
   sandbox/adsk/4.2.Pi/
   sandbox/adsk/4.2.Pi/Fdo/Unmanaged/Src/Fdo/Schema/SchemaFromExternal.h
   sandbox/adsk/4.2.Pi/Fdo/Unmanaged/Src/Fdo/Schema/SchemaFromExternal.xslt
   sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsConnection.cpp
   sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsDelegate.cpp
   sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsDelegate.h
   sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsFeatureType.cpp
   sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGetFeature.cpp
   sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGetFeature.h
   sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGlobals.h
   sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsSelectCommand.cpp
   sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsSpatialExtentsAggregateReader.cpp
  sandbox/adsk/4.2.Pi/Utilities/OWS/Inc/OWS/FdoOwsGlobals.h
   sandbox/adsk/4.2.Pi/Utilities/OWS/Src/FdoOwsExceptionReport.cpp
Log:
Merged revision(s) 7712 from sandbox/adsk/4.2.Q:
#947: WFS: Cannot handle type name which ends with "_".

Fixed other 2 places which are affected by the case that class name ends with "_".

........

Merged revision(s) 7847 from sandbox/adsk/4.2.Q:
WFS Provider: Solve issues of two customer servers.

Two customer WFS servers have some special rules for filter, schema name, etc. We \
make changes to support the 2 servers.

1. Filter. The customer server has some special requirement of filter. 
a) Must specify customer app name space. b) The SRS name is case sensitive. The SRS \
in filter must be same as the name got from server. c) Must add name space prefix to \
the filter property.  This commit implemented above requirements.

2. Schema name. The complex type name is like 'AAAA_FeatureType'. Then what we get is \
'AAAA_Feature'. However, the real class name is 'AAAA_'. So we need to remove last \
'Feature' from the class name when getting FeatureType from the FeatureType \
collection.  Maybe update .xslt to handle the case is a better solution. However, \
current change will have limited impact. If more servers have complex type like \
"*_FeatureType", we will consider to update the .xslt file.

3. Exception report. Add 2 element names 'ExceptionReport' and 'Exception' for the \
                server.
........

........

Merged revision(s) 7907 from sandbox/adsk/4.2.Q:

WFS Provider: Continue working on updated server schema

We got a request from another customer that the class name is ended in 'FeatureType' \
e.g. AAFeatureType. The real name is AA, and what we get is AAFeature. So we change \
the code to adapt this change.



........




Index: sandbox/adsk/4.2.Pi
===================================================================
--- sandbox/adsk/4.2.Pi	2021-10-12 09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi	2021-10-27 02:19:03 UTC (rev 8151)

Property changes on: sandbox/adsk/4.2.Pi
___________________________________________________________________
Added: svn:mergeinfo
## -0,0 +1 ##
+/sandbox/adsk/4.2.Q:7712,7847,7907
\ No newline at end of property
Modified: sandbox/adsk/4.2.Pi/Fdo/Unmanaged/Src/Fdo/Schema/SchemaFromExternal.h
===================================================================
--- sandbox/adsk/4.2.Pi/Fdo/Unmanaged/Src/Fdo/Schema/SchemaFromExternal.h	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Fdo/Unmanaged/Src/Fdo/Schema/SchemaFromExternal.h	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -2888,6 +2888,7 @@
 "        <xsl:choose>",
 "          <xsl:when test=\"$typeName='boolean'\">boolean</xsl:when>",
 "          <xsl:when test=\"$typeName='dateTime'\">datetime</xsl:when>",
+"          <xsl:when test=\"$typeName='date'\">string</xsl:when>",
 "          <xsl:when test=\"$typeName='double'\">double</xsl:when>",
 "          <xsl:when test=\"$typeName='float'\">single</xsl:when>",
 "          <xsl:when test=\"$typeName='hexBinary'\">blob</xsl:when>",

Modified: sandbox/adsk/4.2.Pi/Fdo/Unmanaged/Src/Fdo/Schema/SchemaFromExternal.xslt
===================================================================
--- sandbox/adsk/4.2.Pi/Fdo/Unmanaged/Src/Fdo/Schema/SchemaFromExternal.xslt	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Fdo/Unmanaged/Src/Fdo/Schema/SchemaFromExternal.xslt	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -2884,6 +2884,7 @@
         <xsl:choose>
           <xsl:when test="$typeName='boolean'">boolean</xsl:when>
           <xsl:when test="$typeName='dateTime'">datetime</xsl:when>
+          <xsl:when test="$typeName='date'">string</xsl:when>
           <xsl:when test="$typeName='double'">double</xsl:when>
           <xsl:when test="$typeName='float'">single</xsl:when>
           <xsl:when test="$typeName='hexBinary'">blob</xsl:when>

Modified: sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsConnection.cpp
===================================================================
--- sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsConnection.cpp	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsConnection.cpp	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -687,8 +687,14 @@
                     {
                         // Cannot find the class, try to add a "_" to the class \
                name.
                         // This case happens if the type name is like "AAAA_Type". \
Fdo XML reader will read the name as "AAAA". +                        // Another \
special case is the type name is like AAAA_FeatureType. Fdo XML reader will read the \
name as "AAAA_Feature".  // But the name in feature collection is "AAAA_".
-                        NameFeat += L"_";
+                        FdoInt32 len = NameFeat.GetLength();
+                        FdoStringP suffix = NameFeat.Mid(len - 7, 7);
+                        if (wcsicmp(L"Feature", suffix) == 0)
+                            NameFeat = NameFeat.Mid(0, len - 7);
+                        else
+                            NameFeat += L"_";
                         pFeat = pFeatColl->FindItem(NameFeat);
                     }
                 }

Modified: sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsDelegate.cpp
===================================================================
--- sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsDelegate.cpp	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsDelegate.cpp	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -104,6 +104,7 @@
 FdoIFeatureReader* FdoWfsDelegate::GetFeature(FdoFeatureSchemaCollection* schemas, 
                                               FdoPhysicalSchemaMappingCollection* \
schemaMappings,   FdoString* targetNamespace,
+                                              FdoString* targetNamespaceName,
                                               FdoString* srsName,
                                               FdoStringCollection* \
propertiesToSelect,  FdoString* from,
@@ -114,6 +115,7 @@
                                               void* handleData)
 {
     FdoPtr<FdoWfsGetFeature> request = FdoWfsGetFeature::Create(targetNamespace, 
+                                                                targetNamespaceName,
                                                                 srsName, 
                                                                 propertiesToSelect, 
                                                                 from, 
@@ -127,35 +129,45 @@
     {
         response = Invoke(request);
     }
-    catch(FdoException* exc) // some servers request to have the class name in the \
front of properties, so we will try to place them +    catch(FdoException* exc) // \
some servers request to have the class or namespace name in the front of properties, \
so we will try to place them  {
         exc1 = exc;
-        request->EncodeWithClassName(true);
+        request->EncodeWithNamespaceName(true);
         try
         {
             response = Invoke(request);
         }
-        catch(FdoException* exc2) // rare cases
+        catch (FdoException* exc2)
         {
             exc2->Release();
-            request->SetSchemaName(L""); // remove schema name
-            request->EncodeWithClassName(false);
+            request->EncodeWithNamespaceName(false);
+            request->EncodeWithClassName(true);
             try
             {
                 response = Invoke(request);
             }
-            catch(FdoException* exc3)
+            catch (FdoException* exc3) // rare cases
             {
                 exc3->Release();
-                request->EncodeWithClassName(true);
+                request->SetSchemaName(L""); // remove schema name
+                request->EncodeWithClassName(false);
                 try
                 {
                     response = Invoke(request);
                 }
-                catch(FdoException* exc4)
+                catch (FdoException* exc4)
                 {
                     exc4->Release();
-                    throw exc1;
+                    request->EncodeWithClassName(true);
+                    try
+                    {
+                        response = Invoke(request);
+                    }
+                    catch (FdoException* exc5)
+                    {
+                        exc5->Release();
+                        throw exc1;
+                    }
                 }
             }
         }

Modified: sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsDelegate.h
===================================================================
--- sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsDelegate.h	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsDelegate.h	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -55,7 +55,9 @@
     FdoFeatureSchemaCollection* DescribeFeatureType(FdoStringCollection* \
typeNames,FdoString* version);  FdoIFeatureReader* \
                GetFeature(FdoFeatureSchemaCollection* schemas, 
                                     FdoPhysicalSchemaMappingCollection* \
                schemaMappings, 
-                                    FdoString* targetNamespace, FdoString* srsName,
+                                    FdoString* targetNamespace,
+                                    FdoString* targetNamesapceName,
+                                    FdoString* srsName,
                                     FdoStringCollection* propertiesToSelect,
                                     FdoString* from,
                                     FdoFilter* where,

Modified: sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsFeatureType.cpp
===================================================================
--- sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsFeatureType.cpp	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsFeatureType.cpp	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -69,7 +69,8 @@
                     FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::Title) == 0 ||
 					FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::Abstract) == 0 ||
 					FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::Keywords) == 0 ||
-					FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::MetadataURL) == 0 )
+					FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::MetadataURL) == 0 ||
+                    FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::OutputFormats) == \
0)  {
                     FdoPtr<FdoXmlCharDataHandler> charDataHandler = \
                FdoXmlCharDataHandler::Create();
                     myContext->SetFeatureTypeCharDataHandler(charDataHandler);
@@ -178,7 +179,7 @@
                         FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::DefaultCRS) == \
0)  {
                         m_srs = charDataHandler->GetString();
-                        m_srs = m_srs.Upper();
+                        // m_srs = m_srs.Upper();
                     }
                     else if (FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::Title) == \
0)  m_title = charDataHandler->GetString();
@@ -186,9 +187,10 @@
 						m_abstract = charDataHandler->GetString();
 					else if (FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::Keywords) == 0)
 						m_keywords = charDataHandler->GetString();
-					else if (FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::MetadataURL) ==0)
+					else if (FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::MetadataURL) ==0 ||
+                        FdoCommonOSUtil::wcsicmp(name, FdoWfsGlobals::OutputFormats) \
== 0)  {
-						// For now, we don't make use of MetadataURL tag. 
+						// For now, we don't make use of MetadataURL/OutputFormats tag. 
 						// So we just ignore them.
 					}
 

Modified: sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGetFeature.cpp
===================================================================
--- sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGetFeature.cpp	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGetFeature.cpp	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -24,7 +24,9 @@
 // this line have been added for debug purposes
 //#define DEBUG_LIMIT_FEATURES
 
-FdoWfsGetFeature::FdoWfsGetFeature(FdoString* targetNamespace, FdoString* srsName, 
+FdoWfsGetFeature::FdoWfsGetFeature(FdoString* targetNamespace,
+                                    FdoString* targetNamespaceName,
+                                    FdoString* srsName,
                                     FdoStringCollection* propertiesToSelect,
                                     FdoString* from,
                                     FdoFilter* where,
@@ -31,11 +33,12 @@
                                     FdoString* schemaName,
                                     FdoString* version,
                                     FdoBoolean invertAxis) : \
                FdoOwsRequest(FdoWfsGlobals::WFS, FdoWfsGlobals::GetFeature),
-                                    m_targetNamespace(targetNamespace), \
m_srsName(srsName), +                                    \
m_targetNamespace(targetNamespace), m_targetNamespaceName(targetNamespaceName), \
                m_srsName(srsName),
                                     m_propertiesToSelect(propertiesToSelect),
                                     m_from(from), m_where(where), \
m_schemaName(schemaName), m_invertAxis(invertAxis)  {
     m_encodeWithClassName = false;
+    m_encodeWithNamespaceName = false;
 	FdoOwsRequest::SetVersion (version ? version : FdoWfsGlobals::WfsVersion);
     FDO_SAFE_ADDREF(propertiesToSelect);
     FDO_SAFE_ADDREF(where);
@@ -45,10 +48,10 @@
 {
 }
 
-FdoWfsGetFeature* FdoWfsGetFeature::Create(FdoString* targetNamespace, FdoString* \
srsName, FdoStringCollection* propertiesToSelect, +FdoWfsGetFeature* \
FdoWfsGetFeature::Create(FdoString* targetNamespace, FdoString* targetNamespaceName, \
                FdoString* srsName, FdoStringCollection* propertiesToSelect,
                             FdoString* from, FdoFilter* where, FdoString* \
schemaName, FdoString* version, FdoBoolean invertAxis)  {
-    return new FdoWfsGetFeature(targetNamespace, srsName, propertiesToSelect, from, \
where, schemaName, version, invertAxis); +    return new \
FdoWfsGetFeature(targetNamespace, targetNamespaceName, srsName, propertiesToSelect, \
from, where, schemaName, version, invertAxis);  }
 
 FdoStringP FdoWfsGetFeature::EncodeKVP()
@@ -112,13 +115,19 @@
         ns += FdoXml::mGmlNs;
         writer->WriteAttribute(ns, FdoXml::mGmlUri);
         // application namespace
-        //ns = FdoXml::mXmlnsPref;
-        //ns += L":";
-        //ns += FdoWfsGlobals::appns;
-        //writer->WriteAttribute(ns, m_targetNamespace);
+        if (m_targetNamespace != L"" && m_targetNamespaceName != L"")
+        {
+            ns = FdoXml::mXmlnsPref;
+            ns += L":";
+            ns += m_targetNamespaceName;
+            writer->WriteAttribute(ns, m_targetNamespace);
+        }
 
-        FdoOwsOgcFilterSerializer::Serialize(m_where, writer, m_srsName, NULL, \
                m_invertAxis);
-        
+        FdoStringP prefix;
+        if (m_encodeWithNamespaceName && m_targetNamespaceName != L"")
+            prefix = m_targetNamespaceName;
+        FdoOwsOgcFilterSerializer::Serialize(m_where, writer, m_srsName, prefix, \
m_invertAxis); +
         writer = NULL;
         stream->Reset();
         FdoInt64 length = stream->GetLength();

Modified: sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGetFeature.h
===================================================================
--- sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGetFeature.h	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGetFeature.h	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -31,14 +31,18 @@
     FdoStringP m_from;
     FdoPtr<FdoFilter> m_where;
     FdoStringP m_targetNamespace;
+    FdoStringP m_targetNamespaceName;
     FdoStringP m_srsName;
     bool m_encodeWithClassName;
+    bool m_encodeWithNamespaceName;
     FdoStringP m_schemaName;
     FdoBoolean m_invertAxis;
 
 protected:
     FdoWfsGetFeature() {};
-    FdoWfsGetFeature(FdoString* targetNamespace, FdoString* srsName,
+    FdoWfsGetFeature(FdoString* targetNamespace,
+                                FdoString* targetNamespaceName,
+                                FdoString* srsName,
                                 FdoStringCollection* propertiesToSelect,
                                 FdoString* from,
                                 FdoFilter* where,
@@ -49,7 +53,9 @@
     virtual void Dispose() { delete this; }
 
 public:
-    static FdoWfsGetFeature* Create(FdoString* targetNamespace, FdoString* srsName,
+    static FdoWfsGetFeature* Create(FdoString* targetNamespace,
+                                FdoString* targetNamespaceName,
+                                FdoString* srsName,
                                 FdoStringCollection* propertiesToSelect,
                                 FdoString* from,
                                 FdoFilter* where,
@@ -61,6 +67,7 @@
     virtual FdoStringP EncodeXml();
 
     virtual void EncodeWithClassName(bool bVal) {m_encodeWithClassName = bVal;};
+    virtual void EncodeWithNamespaceName(bool bVal) { m_encodeWithNamespaceName = \
                bVal; }
     virtual void SetSchemaName(FdoStringP schemaName) {m_schemaName = schemaName;}
 };
 

Modified: sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGlobals.h
===================================================================
--- sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGlobals.h	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsGlobals.h	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -42,6 +42,7 @@
     static FdoString* Abstract                          = L"Abstract";
     static FdoString* Keywords                          = L"Keywords";
     static FdoString* MetadataURL                       = L"MetadataURL";
+    static FdoString* OutputFormats                     = L"OutputFormats";
     static FdoString* LatLongBoundingBox                = L"LatLongBoundingBox";
     static FdoString* WGS84BoundingBox                  = L"WGS84BoundingBox";
     static FdoString* minx                              = L"minx";

Modified: sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsSelectCommand.cpp
===================================================================
--- sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsSelectCommand.cpp	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsSelectCommand.cpp	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -119,6 +119,7 @@
 	    FdoString* featureTypeName = NULL;
         FdoStringP featureTypeNameCheck;
 	    FdoString* targetNamespace = L"";
+        FdoString* targetNamespaceName = L"";
 	    FdoPtr<FdoFeatureSchemaCollection> schemas = mConnection->GetSchemas();
 	    FdoPtr<FdoPhysicalSchemaMappingCollection> mappings = \
schemas->GetXmlSchemaMappings();  FdoPtr<FdoXmlClassMapping> elementClass;
@@ -142,6 +143,7 @@
 						        featureTypeName = elementMapping->GetName();
                                 schemaFeatureName = schema->GetName();
 						        targetNamespace = mapping->GetTargetNamespace();
+                                targetNamespaceName = mapping->GetName();
 						        break;
 					        }
 				        }
@@ -167,6 +169,23 @@
         {
             FdoPtr<FdoWfsServiceMetadata> metadata = \
                mConnection->GetServiceMetadata();
             FdoPtr<FdoWfsFeatureType> featureType = \
metadata->GetFeatureType(mClassName); +            if (featureType == NULL)
+            {
+                // handle the case which 'real' class name ends with "_" or \
"Feature" +                FdoStringP cName = mClassName->GetText();
+                FdoStringP realName = cName + L"_";
+                FdoPtr<FdoIdentifier> realNameIdentifier = \
FdoIdentifier::Create(realName); +                featureType = \
metadata->GetFeatureType(realNameIdentifier); +                if (featureType == \
NULL) +                {
+                    FdoInt32 len = cName.GetLength();
+                    FdoStringP suffix = cName.Mid(len - 7, 7);
+                    if (wcsicmp(L"Feature", suffix) == 0)
+                        realName = cName.Mid(0, len - 7);
+                    realNameIdentifier = FdoIdentifier::Create(realName);
+                    featureType = metadata->GetFeatureType(realNameIdentifier);
+                }
+            }
             if (featureType != NULL)
                 srsName = featureType->GetSRS();
 	    }
@@ -276,6 +295,7 @@
             schemas, 
             mappings, 
             targetNamespace, 
+            targetNamespaceName,
             srsName, 
             bHasComputedProperties ? FdoPtr<FdoStringCollection>() : props, // \
Computed properties may reference other properties so retrieve all of them.  \
featureTypeName, 

Modified: sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsSpatialExtentsAggregateReader.cpp
 ===================================================================
--- sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsSpatialExtentsAggregateReader.cpp	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Providers/WFS/Src/Provider/FdoWfsSpatialExtentsAggregateReader.cpp	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -31,6 +31,23 @@
     FdoPtr<FdoWfsServiceMetadata> serviceMetadata = conn->GetServiceMetadata ();
     FdoPtr<FdoWfsFeatureType> featureType = \
serviceMetadata->GetFeatureType(className);  if (featureType == NULL)
+    {
+        // handle the case which 'real' class name ends with "_" or "Feature"
+        FdoStringP cName = className->GetText();
+        FdoStringP realName = cName + L"_";
+        FdoPtr<FdoIdentifier> realNameIdentifier = FdoIdentifier::Create(realName);
+        featureType = serviceMetadata->GetFeatureType(realNameIdentifier);
+        if (featureType == NULL)
+        {
+            FdoInt32 len = cName.GetLength();
+            FdoStringP suffix = cName.Mid(len - 7, 7);
+            if (wcsicmp(L"Feature", suffix) == 0)
+                realName = cName.Mid(0, len - 7);
+            realNameIdentifier = FdoIdentifier::Create(realName);
+            featureType = serviceMetadata->GetFeatureType(realNameIdentifier);
+        }
+    }
+    if (featureType == NULL)
         throw FdoCommandException::Create (
             NlsMsgGet(FDO_NLSID(WFS_NAMED_FEATURETYPE_NOT_FOUND), \
(FdoString*)className->GetText()));  

Modified: sandbox/adsk/4.2.Pi/Utilities/OWS/Inc/OWS/FdoOwsGlobals.h
===================================================================
--- sandbox/adsk/4.2.Pi/Utilities/OWS/Inc/OWS/FdoOwsGlobals.h	2021-10-12 09:04:04 UTC \
                (rev 8150)
+++ sandbox/adsk/4.2.Pi/Utilities/OWS/Inc/OWS/FdoOwsGlobals.h	2021-10-27 02:19:03 UTC \
(rev 8151) @@ -88,8 +88,11 @@
     static FdoString* href                                  = \
L"http://www.w3.org/1999/xlink:href";  static FdoString* type									= \
                L"http://www.w3.org/1999/xlink:type";
     static FdoString* ServiceExceptionReport                = \
L"ServiceExceptionReport"; +    static FdoString* ExceptionReport                     \
                = L"ExceptionReport";
     static FdoString* ServiceException                      = L"ServiceException";
+    static FdoString* Exception                             = L"Exception";
     static FdoString* code                                  = L"code";
+    static FdoString* ExceptionCode                         = L"ExceptionCode";
     static FdoString* REQUEST                               = L"REQUEST";
     static FdoString* Equal                                 = L"=";
     static FdoString* service                               = L"service";

Modified: sandbox/adsk/4.2.Pi/Utilities/OWS/Src/FdoOwsExceptionReport.cpp
===================================================================
--- sandbox/adsk/4.2.Pi/Utilities/OWS/Src/FdoOwsExceptionReport.cpp	2021-10-12 \
                09:04:04 UTC (rev 8150)
+++ sandbox/adsk/4.2.Pi/Utilities/OWS/Src/FdoOwsExceptionReport.cpp	2021-10-27 \
02:19:03 UTC (rev 8151) @@ -59,7 +59,8 @@
     // we are now in document root, possible subelements include only \
<ServiceExceptionReport/>  case 0:
         {
-            if (FdoCommonOSUtil::wcsicmp(name, \
FdoOwsGlobals::ServiceExceptionReport) == 0) +            if \
(FdoCommonOSUtil::wcsicmp(name, FdoOwsGlobals::ServiceExceptionReport) == 0 || +      \
FdoCommonOSUtil::wcsicmp(name, FdoOwsGlobals::ExceptionReport) == 0)  \
myContext->SetStateExceptionReport(1);  else
                 throw FdoException::Create(FdoException::NLSGetMessage(
@@ -71,11 +72,15 @@
     // we are now in nested level 1, possible subelements include only \
<ServiceException/>  case 1:
         {
-            if (FdoCommonOSUtil::wcsicmp(name, FdoOwsGlobals::ServiceException) == \
0) +            if (FdoCommonOSUtil::wcsicmp(name, FdoOwsGlobals::ServiceException) \
== 0 || +                FdoCommonOSUtil::wcsicmp(name, FdoOwsGlobals::Exception) == \
0)  {
                 FdoPtr<FdoXmlAttribute> attr = atts->FindItem(FdoOwsGlobals::code);
+                if (NULL == attr)
+                    attr = atts->FindItem(FdoOwsGlobals::ExceptionCode);
                 if (attr != NULL)
                     m_exceptionMessage = attr->GetValue();
+
                 FdoPtr<FdoXmlCharDataHandler> handler = \
FdoXmlCharDataHandler::Create();  \
myContext->SetExceptionReportCharDataHandler(handler);  pRet = handler.p;
@@ -111,7 +116,8 @@
         }
     case 1:
         {
-            if (FdoCommonOSUtil::wcsicmp(name, FdoOwsGlobals::ServiceException) == \
0) +            if (FdoCommonOSUtil::wcsicmp(name, FdoOwsGlobals::ServiceException) \
== 0 || +                FdoCommonOSUtil::wcsicmp(name, FdoOwsGlobals::Exception) == \
0)  {
                 FdoPtr<FdoXmlCharDataHandler> handler = \
                myContext->ExceptionReportCharDataHandler();
                 if (handler != NULL) // exception message provided in the content
@@ -125,7 +131,8 @@
                     myContext->SetExceptionReportCharDataHandler(NULL);
                 }
             }
-            else if (FdoCommonOSUtil::wcsicmp(name, \
FdoOwsGlobals::ServiceExceptionReport) == 0) +            else if \
(FdoCommonOSUtil::wcsicmp(name, FdoOwsGlobals::ServiceExceptionReport) == 0 || +      \
FdoCommonOSUtil::wcsicmp(name, FdoOwsGlobals::ExceptionReport) == 0)  \
myContext->SetStateExceptionReport(0);  break;
         }

_______________________________________________
fdo-commits mailing list
fdo-commits@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/fdo-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic