diff --git a/src/providers/wfs/qgswfsdescribefeaturetype.cpp b/src/providers/wfs/qgswfsdescribefeaturetype.cpp index 8c46e9f826a..e48a6cf6c91 100644 --- a/src/providers/wfs/qgswfsdescribefeaturetype.cpp +++ b/src/providers/wfs/qgswfsdescribefeaturetype.cpp @@ -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 ); diff --git a/src/providers/wfs/qgswfsfeatureiterator.cpp b/src/providers/wfs/qgswfsfeatureiterator.cpp index e24f8695427..7229311449a 100644 --- a/src/providers/wfs/qgswfsfeatureiterator.cpp +++ b/src/providers/wfs/qgswfsfeatureiterator.cpp @@ -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 ); diff --git a/src/providers/wfs/qgswfsgetfeature.cpp b/src/providers/wfs/qgswfsgetfeature.cpp index ca96396c43f..ff49cb8f48c 100644 --- a/src/providers/wfs/qgswfsgetfeature.cpp +++ b/src/providers/wfs/qgswfsgetfeature.cpp @@ -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() ) diff --git a/tests/src/python/test_provider_wfs.py b/tests/src/python/test_provider_wfs.py index 20701f10651..af2f5d152e9 100644 --- a/tests/src/python/test_provider_wfs.py +++ b/tests/src/python/test_provider_wfs.py @@ -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): 1 -&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): -&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): -&NAMESPACES=xmlns(my,http://my)&NAMESPACE=xmlns(my,http://my)""", +&NAMESPACES=xmlns(my,http://my)""", ), "wb", ) as f: