[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 ); query.addQueryItem( QStringLiteral( "NAMESPACES" ), namespaceValue );
} }
} }
else
{
if ( !namespaceValue.isEmpty() )
{
query.addQueryItem( QStringLiteral( "NAMESPACE" ), namespaceValue );
}
}
// Always add singular form for broken servers // Always add singular form for broken servers
// See: https://github.com/qgis/QGIS/issues/41087 // See: https://github.com/qgis/QGIS/issues/41087
query.addQueryItem( QStringLiteral( "TYPENAME" ), typeName ); query.addQueryItem( QStringLiteral( "TYPENAME" ), typeName );
if ( !namespaceValue.isEmpty() )
{
query.addQueryItem( QStringLiteral( "NAMESPACE" ), namespaceValue );
}
url.setQuery( query ); url.setQuery( query );
return sendGET( url, QString(), true, false ); return sendGET( url, QString(), true, false );

View File

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

View File

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

View File

@ -4642,7 +4642,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
with open( with open(
sanitize( sanitize(
endpoint, 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", "wb",
) as f: ) as f:
@ -4677,7 +4677,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
with open( with open(
sanitize( sanitize(
endpoint, 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", "wb",
) as f: ) as f:
@ -4731,7 +4731,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
with open( with open(
sanitize( sanitize(
endpoint, 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", "wb",
) as f: ) as f:
@ -4766,7 +4766,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
with open( with open(
sanitize( sanitize(
endpoint, 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", "wb",
) as f: ) as f:
@ -4820,7 +4820,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
with open( with open(
sanitize( sanitize(
endpoint, 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", "wb",
) as f: ) as f:
@ -4863,7 +4863,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
<fes:Literal>1</fes:Literal> <fes:Literal>1</fes:Literal>
</fes:PropertyIsEqualTo> </fes:PropertyIsEqualTo>
</fes:Filter> </fes:Filter>
&NAMESPACES=xmlns(my,http://my)&NAMESPACE=xmlns(my,http://my)""", &NAMESPACES=xmlns(my,http://my)""",
), ),
"wb", "wb",
) as f: ) as f:
@ -4919,7 +4919,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
</fes:PropertyIsGreaterThan> </fes:PropertyIsGreaterThan>
</fes:And> </fes:And>
</fes:Filter> </fes:Filter>
&NAMESPACES=xmlns(my,http://my)&NAMESPACE=xmlns(my,http://my)""", &NAMESPACES=xmlns(my,http://my)""",
), ),
"wb", "wb",
) as f: ) as f:
@ -4970,7 +4970,7 @@ class TestPyQgsWFSProvider(QgisTestCase, ProviderTestCase):
</fes:PropertyIsEqualTo> </fes:PropertyIsEqualTo>
</fes:And> </fes:And>
</fes:Filter> </fes:Filter>
&NAMESPACES=xmlns(my,http://my)&NAMESPACE=xmlns(my,http://my)""", &NAMESPACES=xmlns(my,http://my)""",
), ),
"wb", "wb",
) as f: ) as f: