[WFS] Only use NAMESPACE for WFS 1 and NAMESPACES for WFS 2.0

This commit is contained in:
Andrea Giudiceandrea 2025-08-14 12:11:08 +02:00
parent b24906550b
commit e6a44f6876
4 changed files with 25 additions and 18 deletions

View File

@ -43,14 +43,17 @@ bool QgsWFSDescribeFeatureType::requestFeatureType( const QString &WFSVersion, c
query.addQueryItem( QStringLiteral( "NAMESPACES" ), namespaceValue );
}
}
else
{
if ( !namespaceValue.isEmpty() )
{
query.addQueryItem( QStringLiteral( "NAMESPACE" ), namespaceValue );
}
}
// Always add singular form for broken servers
// See: https://github.com/qgis/QGIS/issues/41087
query.addQueryItem( QStringLiteral( "TYPENAME" ), typeName );
if ( !namespaceValue.isEmpty() )
{
query.addQueryItem( QStringLiteral( "NAMESPACE" ), namespaceValue );
}
url.setQuery( query );
return sendGET( url, QString(), true, false );

View File

@ -335,8 +335,13 @@ QUrl QgsWFSFeatureDownloaderImpl::buildURL( qint64 startIndex, long long maxFeat
if ( !namespaces.isEmpty() )
{
if ( mShared->mWFSVersion.startsWith( QLatin1String( "2.0" ) ) )
{
query.addQueryItem( QStringLiteral( "NAMESPACES" ), namespaces );
query.addQueryItem( QStringLiteral( "NAMESPACE" ), namespaces );
}
else
{
query.addQueryItem( QStringLiteral( "NAMESPACE" ), namespaces );
}
}
getFeatureUrl.setQuery( query );

View File

@ -48,11 +48,10 @@ bool QgsWFSGetFeature::request( bool synchronous, const QString &WFSVersion, con
else
{
query.addQueryItem( QStringLiteral( "TYPENAME" ), typeName );
}
if ( !namespaceValue.isEmpty() )
{
query.addQueryItem( QStringLiteral( "NAMESPACE" ), namespaceValue );
if ( !namespaceValue.isEmpty() )
{
query.addQueryItem( QStringLiteral( "NAMESPACE" ), namespaceValue );
}
}
if ( !filter.isEmpty() )

View File

@ -4642,7 +4642,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
with open(
sanitize(
endpoint,
"?SERVICE=WFS&REQUEST=DescribeFeatureType&VERSION=2.0.0&TYPENAMES=my:typename&NAMESPACES=xmlns(my,http://my)&TYPENAME=my:typename&NAMESPACE=xmlns(my,http://my)",
"?SERVICE=WFS&REQUEST=DescribeFeatureType&VERSION=2.0.0&TYPENAMES=my:typename&NAMESPACES=xmlns(my,http://my)&TYPENAME=my:typename",
),
"wb",
) as f:
@ -4677,7 +4677,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
with open(
sanitize(
endpoint,
"?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=my:typename&SRSNAME=urn:ogc:def:crs:EPSG::32631&NAMESPACES=xmlns(my,http://my)&NAMESPACE=xmlns(my,http://my)",
"?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=my:typename&SRSNAME=urn:ogc:def:crs:EPSG::32631&NAMESPACES=xmlns(my,http://my)",
),
"wb",
) as f:
@ -4731,7 +4731,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
with open(
sanitize(
endpoint,
"?SERVICE=WFS&REQUEST=DescribeFeatureType&VERSION=2.0.0&TYPENAMES=my:typename&NAMESPACES=xmlns(my,http://my)&TYPENAME=my:typename&NAMESPACE=xmlns(my,http://my)",
"?SERVICE=WFS&REQUEST=DescribeFeatureType&VERSION=2.0.0&TYPENAMES=my:typename&NAMESPACES=xmlns(my,http://my)&TYPENAME=my:typename",
),
"wb",
) as f:
@ -4766,7 +4766,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
with open(
sanitize(
endpoint,
"?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=my:typename&SRSNAME=urn:ogc:def:crs:EPSG::32631&NAMESPACES=xmlns(my,http://my)&NAMESPACE=xmlns(my,http://my)",
"?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=my:typename&SRSNAME=urn:ogc:def:crs:EPSG::32631&NAMESPACES=xmlns(my,http://my)",
),
"wb",
) as f:
@ -4820,7 +4820,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
with open(
sanitize(
endpoint,
"?SERVICE=WFS&REQUEST=DescribeFeatureType&VERSION=2.0.0&TYPENAMES=my:typename&NAMESPACES=xmlns(my,http://my)&TYPENAME=my:typename&NAMESPACE=xmlns(my,http://my)",
"?SERVICE=WFS&REQUEST=DescribeFeatureType&VERSION=2.0.0&TYPENAMES=my:typename&NAMESPACES=xmlns(my,http://my)&TYPENAME=my:typename",
),
"wb",
) as f:
@ -4863,7 +4863,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
<fes:Literal>1</fes:Literal>
</fes:PropertyIsEqualTo>
</fes:Filter>
&NAMESPACES=xmlns(my,http://my)&NAMESPACE=xmlns(my,http://my)""",
&NAMESPACES=xmlns(my,http://my)""",
),
"wb",
) as f:
@ -4919,7 +4919,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
</fes:PropertyIsGreaterThan>
</fes:And>
</fes:Filter>
&NAMESPACES=xmlns(my,http://my)&NAMESPACE=xmlns(my,http://my)""",
&NAMESPACES=xmlns(my,http://my)""",
),
"wb",
) as f:
@ -4970,7 +4970,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
</fes:PropertyIsEqualTo>
</fes:And>
</fes:Filter>
&NAMESPACES=xmlns(my,http://my)&NAMESPACE=xmlns(my,http://my)""",
&NAMESPACES=xmlns(my,http://my)""",
),
"wb",
) as f: