WMS Version negotiation is producing an unexpected result for the following request:
This request is produced by the Cadcorp's SIS software, which should be subject to version negotiation as per the WMS specification (resulting in a WMS 1.3.0 document).
The resulting filename is *getcapabilities_1.3.0.xml* but the contents are a WMS 1.1.1 capabilities document:
In debugging I have found the following operations listed:
GetCapabilities, Capabilities, GetMap, Map, DescribeLayer, GetFeatureInfo, GetLegendGraphic, reflect, kml, animate
This matches the applicationContext.xml definition:
Tomcat, Windows Server 2012
Looks like Capabilities may be expected, this from the WMS 1.1.1 specification:
This nature of the required REQUEST parameter is specified in the Basic Service Elements section. To invoke the GetCapabilities operation, the value "GetCapabilities" shall be used. In WMS version 1.0.0, the value of this parameter was "capabilities". That value is now deprecated, but for backwards compatibility a post-1.0.0 server shall accept either form without issuing a Service Exception. When a client is initially contacting a WMS whose version it does not know the Client should be prepared to recover if REQUEST=GetCapabilities fails and may send REQUEST=capabilities.
This clause was dropped from WMS 1.3.0 specification:
The nature of the mandatory REQUEST parameter is defined in 6.9.2. To invoke the GetCapabilities operation, the value "GetCapabilities" shall be used.
So we are left in an odd situation where, to preserve compatibility with WMS 1.1.1 we wish to break compatibility of version negotiation. To wit a REQUEST=capabilities response should return a WMS 1.1.1 document, since that is the newest protocol that is willing to respond.
Removing the "capabilities" entry from the wms-1_3_0-ServiceDescriptor definition does not cleanly work:
The request http://localhost:8080/geoserver/topp/wms?REQUEST=capabilities now fails with No such operation wms null capabilities service exception.
The request http://localhost:8080/geoserver/topp/wms?VERSION=1.1.1&REQUEST=capabilities succeeds with a getcapabilities_1.1.1.xml file
I have an approach here: https://github.com/jodygarnett/geoserver/tree/wms-capabilities-compatibility
It involves asking the dispatcher to check versions on each operation (to prevent dispatching capabilities operation to WMS 1.3.0 endpoint). This patch is of general utility - but does represent a functionality change.