EOFarm / geoportal.ypen.gr

0 stars 0 forks source link

WMS Validation #22

Closed grigoriouelena closed 2 years ago

grigoriouelena commented 2 years ago

Let's collect here all the issues that arise as regards the validation of the wms capabilities response.

The first one I am reporting is that the test failsfor the /Layer/Style/LegendURL/Format. The test requires the format to be application/xml when geoserver responds with format image/png. I have already asked the INSPIRE validator helpdesk here https://github.com/INSPIRE-MIF/helpdesk-validator/issues/618, by replying to an existing issue.

grigoriouelena commented 2 years ago

Validation of the wms using the staging instance of the INSPIRE Validator

Resource that was tested: http://beta.geoportal.ypen.gr/geoserver/aqd-wms/ows?service=WMS&request=GetCapabilities

The failure of tests at69 & at70 are caused by geoserver's behavior. I have asked the community here for input.

grigoriouelena commented 2 years ago

Check if Geoserver 2.19.1 would pass the missing parameters test for GetMap operation

The idea of going back to geoserver 2.19.1 would be a solution, since the internationalization is not enabled, so the language tests would be succesful.

Remembering that version 2.15.0 that is used in the production geoportal today, failed only in the tests regarding the behavior of geoserver when some parameters of the getmap request are missing, I manualy checked the getmap response of a local instance of geoserver 2.19.1, in order to find out if its behavior - as regards the missing parameters in getmap operation - would be INSPIRE compliant.

If the "Strict CITE compliance" is checked, Geoserver throws a service exception when style and crs parameters are missing and also when the transparent parameter is invalid (eg transparent=zzz). If the version parameter is missing, Geoserver responds with an empty map. I am not sure if this responce is accepted by the validator as valid.

We should try it.

kalxas commented 2 years ago

Lets downgrade to 2.19.x to test

grigoriouelena commented 2 years ago

Using a recommendation we got from a colleague who has tested 2.19.x versions of geoserver, it seems that there is a bug in 2.19.2 so we could try 2.19.3.

@kalxas

kalxas commented 2 years ago

Option 1: Downgrade to 2.19.x from 2.20.x Option 2: Rollback to 2.18.x and upgrade to 2.19.x

kalxas commented 2 years ago

GeoServer downgraded to 2.19.4 for testing

grigoriouelena commented 2 years ago

Version 2.19.4 does not seem to be suitable for our INSPIRE implementation, since it does not implement the WMS standard, as regards the missing VERSION parameter. According to the WMS standard (and the INSPIRE view service TG) , when a getmap request is sent without the version parameter, the service should throw an exception. Geoserver responds with a map, so the service does not pass the validator test.

Let's test version 2.19.3.

kalxas commented 2 years ago

GeoServer downgraded to 2.19.3 for testing

kalxas commented 2 years ago

GeoServer downgraded to 2.19.1 for testing

grigoriouelena commented 2 years ago

Testing of the WMS Capabilities response (Geoserver 2.19.2 on beta.geoportal.ypen.gr)

Request tested: http://beta.geoportal.ypen.gr/geoserver/aqd-wms/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities

Tests that fail: 1. at04-getcapabilities-xml-schema-validation

image

Might be related to this but I am not sure. I tried to validate the xml document using some free online tool (like https://www.freeformatter.com/xml-validator-xsd.html) It seems the schema is invalid. Its the first time this test fails for geoserver.

2. at50-getmap-version-parameter The test fails because the service is receiving a GetMap request without the VERSION parameter and it responds with a map, while this parameter is mandatory, according to the standard. So the validator would consider this test succesful if the server returned an exception. Instead Geoserver's behavior is the following:

WMS 1.3.0 GetMap request WITH version parameter: http://beta.geoportal.ypen.gr/geoserver/aqd-wms/wms?service=WMS&version=1.3.0&request=GetMap&layers=aqd-wms%3AAM.AirQualityManagementZone&bbox=33.2602917992464%2C18.2594706955248%2C41.7465936245625%2C30.1030588882255&width=768&height=550&crs=EPSG%3A4258&styles=&format=image/png

image

WMS 1.3.0 GetMap request WITHOUT version parameter: http://beta.geoportal.ypen.gr/geoserver/aqd-wms/wms?service=WMS&request=GetMap&layers=aqd-wms%3AAM.AirQualityManagementZone&bbox=33.2602917992464%2C18.2594706955248%2C41.7465936245625%2C30.1030588882255&width=768&height=550&crs=EPSG%3A4258&styles=&format=image/png

image

When the version parameter is missing Geoserver responds by default with a WMS 1.1.1 response, but due to the difference in the axis ordering (see here for details), the browser shows a different part of the planet.

There is one more difference between the two versions of the WMS standard (1.1.1 and 1.3.0), the name of the parameter for the coordinate reference system. For WMS 1.1.1 it should be "srs" and for WMS 1.3.0 it is "crs". When Geoserver is requested using the WMS 1.1.1 version of the std, it responds with a map whether the parameter srs or crs is used. And to prove the above, check the following request and response:

http://beta.geoportal.ypen.gr/geoserver/aqd-wms/wms?service=WMS&version=1.1.1&request=GetMap&layers=aqd-wms%3AAM.AirQualityManagementZone&bbox=33.2602917992464%2C18.2594706955248%2C41.7465936245625%2C30.1030588882255&width=768&height=550&crs=EPSG%3A4258&styles=&format=image/png

the response is:

image

It responds with a map, but the bbox order is wrong.

If we change the bbox order, without changing the crc to srs, http://beta.geoportal.ypen.gr/geoserver/aqd-wms/wms?service=WMS&version=1.1.1&request=GetMap&layers=aqd-wms%3AAM.AirQualityManagementZone&bbox=18.2594706955248%2C33.2602917992464%2C30.1030588882255%2C41.7465936245625&width=768&height=550&crs=EPSG%3A4258&styles=&format=image/png

the response is THE map (!)

image

So Geoserver, in order to provide a response to the user, even if the version parameter is missing when the WMS 1.3.0 is requested, it responds with the map in version 1.1.1. But it does not correct the bbox, so the map is empty because it shows another part of the globe.

I guess the above problem cannot be solved by reconfiguration. Can we take a look on the xml schema issue?

kalxas commented 2 years ago

Just deployed GeoServer 2.20.1 with inspire plugin 2.19.1 for testing

grigoriouelena commented 2 years ago

New deployment testing

resource: http://beta.geoportal.ypen.gr/geoserver/aqd-wms/ows?service=wms&version=1.3.0&request=GetCapabilities

1. tool: INSPIRE validator (PROD) https://inspire.ec.europa.eu/validator/test-selection/index.html validation report: wms_validation_production.html

Failed tests:

at04-getcapabilities-xml-schema-validation

related issues on the INSPIRE validator helpdesk: • https://github.com/INSPIRE-MIF/helpdesk-validator/issues/598 proposal for solution: This seems to be a problem of the geoserver 2.19.x inspire extension. I tried the following: o found the relevant file WMSExtendedCapabilitiesProvider.class in the INSPIRE extension .jar file (..\org\geoserver\inspire\wms) o used an online java decompiler (http://www.javadecompilers.com/ ) and got the following

Is it possible to edit this file and then put it back in the .jar package? If not, I could ask our colleague who reported the issue above.

at47-getcapabilities-layer-style-legend-url Please see the attached validation report. There is no human-readable message.

2. tool: INSPIRE validator (STAGING) http://staging-inspire-validator.eu-west-1.elasticbeanstalk.com/etf-webapp/test-selection/index.html validation report: wms_validation_staging.html

Failed tests:

at04-getcapabilities-xml-schema-validation same message

at47-getcapabilities-layer-style-legend-url There is a human-readable message

image

The issue was reported upstream here: https://github.com/INSPIRE-MIF/helpdesk-validator/issues/680 I do not have any proposal to fix that NOTE: The staging validator also tests GetMap operation, Link View Service Operation and the Language requirements.

3. tool: INSPIRE validator: local instance http://beta.geoportal.ypen.gr/validator/ validation report: wms_validation_beta.html same as INSPIRE validator (PROD)

I propose to keep this deployment and try to fix whatever is possible.

Att: validationReports.zip

kalxas commented 2 years ago

Switched to default configuration of GeoServer just to confirm the above is not a configuration issue.

kalxas commented 2 years ago

Updated to GeoServer 2.20.2 with 2.19.1 inspire plugin

grigoriouelena commented 2 years ago

New deployment testing with default configuration

resource tested: http://beta.geoportal.ypen.gr/geoserver/ows?service=wms&version=1.3.0&request=GetCapabilities

Minimum configuration:

INSPIRE validator (PROD)

Tests that fail: at04-getcapabilities-xml-schema-validation the test fails again, since the url of the schema location is not accepted, according to this.

image

I tried the following:

at39-getcapabilities-layer-name Expected to fail, since the resource tested does not publish INSPIRE layers

at47-getcapabilities-layer-style-legend-url same old behaviour

INSPIRE validator (STAGING)

As commented before, the staging instance of the validator tests other operations also (GetMap Operation, LinkViewService Operation, Language requirements). There are no fails with these extra tests.

As for the GetCapabilities Operation tests, the same tests fail (at04 for the xml schema and at47 for the legend url). The weird thing is that the layer name test passes (!).

kalxas commented 2 years ago

Updated InspireMetadata.class file in inspire jar, replacing https with http

kalxas commented 2 years ago

The file we need to change is https://github.com/geoserver/geoserver/blob/main/src/extension/inspire/src/main/java/org/geoserver/inspire/InspireSchema.java

kalxas commented 2 years ago

https://github.com/geoserver/geoserver/blob/main/doc/en/user/source/extensions/inspire/using.rst

"At the time of writing the INSPIRE Schemas only allow 23 choices for :guilabel:DefaultLanguage. The GeoServer INSPIRE extension allows some other languages to be chosen. If you choose one of these your capabilities document won't be Schema valid but, as discussed in :geos:issue 7388 <7388>, the INSPIRE Schemas seem to be at fault."

grigoriouelena commented 2 years ago

The file we need to change is https://github.com/geoserver/geoserver/blob/main/src/extension/inspire/src/main/java/org/geoserver/inspire/InspireSchema.java

Is it possible to give it a try?

grigoriouelena commented 2 years ago

https://github.com/geoserver/geoserver/blob/main/doc/en/user/source/extensions/inspire/using.rst

"At the time of writing the INSPIRE Schemas only allow 23 choices for :guilabel:DefaultLanguage. The GeoServer INSPIRE extension allows some other languages to be chosen. If you choose one of these your capabilities document won't be Schema valid but, as discussed in :geos:issue 7388 <7388>, the INSPIRE Schemas seem to be at fault."

Too bad that 2 of the EU official languages are left off of the extended capabilities schema. Fortunately, greek is not one of them, so choosing it, it wouldn' t cause a schema validation issue. Nevertheless, the reason why we did not use the internationalization is not the missing language code. The reason is that the extended capabilities section Geoserver adds to the capabilities response is wrong.

Correct Extended Capabilities (View Service TG v3.11)

image

Geoserver Extended Capabilities Section (https://github.com/geoserver/geoserver/blob/main/doc/en/user/source/extensions/inspire/using.rst#id71)

image

noted the wrong SupportedLanguage element.

grigoriouelena commented 2 years ago

New deployment testing with default configuration

resource tested: http://beta.geoportal.ypen.gr/geoserver/ows?service=wms&version=1.3.0&request=GetCapabilities

Minimum configuration:

  • check Strict CITE compliance
  • limit SRS list (4258) in order to minimise the extend of the capabilities document
  • enable the INSPIRE extension

INSPIRE validator (PROD)

Tests that fail: at04-getcapabilities-xml-schema-validation the test fails again, since the url of the schema location is not accepted, according to this. image

I tried the following:

  • saved a local copy of the capabilities response with correct schema location urls (http instead of https).
  • Moved it to beta.geoportal.ypen.gr/atom/, so that the validator can access the file.
  • Tested the resource Several tests fail, because of the fact that the validator is sending requests to a file (!), but the xml schema seems to pass the test. Validation report: localCapsValidation.zip

at39-getcapabilities-layer-name Expected to fail, since the resource tested does not publish INSPIRE layers

at47-getcapabilities-layer-style-legend-url same old behaviour

INSPIRE validator (STAGING)

As commented before, the staging instance of the validator tests other operations also (GetMap Operation, LinkViewService Operation, Language requirements). There are no fails with these extra tests.

As for the GetCapabilities Operation tests, the same tests fail (at04 for the xml schema and at47 for the legend url). The weird thing is that the layer name test passes (!).

requested other implementers' feedback as regards the failure of test at04, here

grigoriouelena commented 2 years ago

After revisiting the wms validation issue, I came accross the following, as regards the fixing of the missing &VERSION= parameter in the GetLegendGraphic request.

@kalxas are we using the latest version of Geoserver? If yes, I should check if the inspire extension is causing the problem...

kalxas commented 2 years ago

Pull request merged on 2.20.x branch on Jan 27th: https://github.com/geoserver/geoserver/pull/5595 GeoServer 2.20.3 was released Feb 23 https://github.com/geoserver/geoserver/releases/tag/2.20.3

We have currently 2.20.2 in beta with 2.19.1 inspire extension.

We need to update GeoServer and the INSPIRE extension to 2.20.3

kalxas commented 2 years ago

GeoServer 2.20.3 now available in beta geoportal

grigoriouelena commented 2 years ago

Tested the new geoserver using the staging instance of the INSPIRE validator. The problem ith the missing version parameter in the GetLegendGraphic url is fixed in the new version.

The use of the 2.20.3 inspire extension brings back the languages problem.

We could probably try to solve the language requirements issues by using an older version of inspire extension, like we did before. I propose though to keep the current set up in order to avoid compatibility issues. Additionaly, the use of the older extension might cause other mulfunction.