Hi, I made some more testing. It seems that the changed behaviour in ArcGIS Server 10.2.2 affects also other software: - QGIS 2.0 *can* read layers with spaces in the layer names - OpenJUMP 1.7 *can't* because it changes spaces to + signs in GetMaps - Geoserver 2.6 RC1 *can't* cascade layers and the reason is probably the same.
Does anybody know where the ESRI bug tracker is? I would like to file a ticket. -Jukka- Rahkonen Jukka wrote: > > Hi, > > What if I have mapfiles in directories "my mapfiles" and in "my+mapfiles" > (made > a test and they seem to be OK for Windows) and I use WMS urls > http://host.com/cgi-bin/mapserv.exe?map=my mapfiles/demo.map and urls > http://host.com/cgi-bin/mapserv.exe?map=my+mapfiles/demo.map? > > If user sends "map=my+mapfiles" then the listening party should interpret > that + > means space and search mapfiles from "my mapfiles". Theoretical example but > somehow I feel that using per cent encoding in every place would be more safe > though not as compact. > > How about the "ä" case and "%C3%A4" vs. %E4? Mapserver generates %E4's > now and the ArcGIS WMS I should cascade will not accept it even if the problem > with the space character is solved. Following RFC3986 would solve this > problem. > > -Jukka Rahkonen- > > > Lime, Steve D wrote: > > > > The bit of reading I've done indicates that +'s for spaces are still > > allowed by the rfc3986.txt. The + character is still a valid delimiter > > in the query portion of the string. It's silly for ESRI to not support > > either - I mean the trend is towards more compact URLs. MapServer CGI > processing handles %20 or +... > > > > Adding a switch to toggle + vs %20 encoding would be painful. > > > > Steve > > > > -----Original Message----- > > From: [email protected] [mailto:mapserver-users- > > [email protected]] On Behalf Of Rahkonen Jukka (Tike) > > Sent: Thursday, August 21, 2014 8:28 AM > > To: Mapserver-Users ([email protected]) > > Subject: Re: [mapserver-users] [mapserver-dev] FW: WMS request fails > > when spaces are encoded as plus symbol in query part of URL > > > > Hi, > > > > A little bit more information. Here is a GetMap request that returns > > an image from ArcGIS server. Space is changed into "%20" and letter > > "ä" is changed into "%C3%A4" . This, according to > > http://www.albionresearch.com/misc/urlencode.php, seems to implement > > RFC3986. > > > > > http://gtkdata.gtk.fi/arcgis/services/GTKWMS/MapServer/WMSServer?REQUE > > S > T=GetMap&SERVICE=WMS&VERSION=1.1.1&WIDTH=459&HEIGHT=346&LAYER > > > S=Suomen%20maaper%C3%A4kartta%201:1%20000%20000&TRANSPARENT=T > > > RUE&FORMAT=image%2Fpng&BBOX=434844.4854575534,7035986.957235612, > > 452739.30027509434,7144417.839725949&SRS=EPSG:3067&STYLES= > > > > The mode where space is encoded as "+" seems to be something that is > > called > > "RFC2396 mode". In this mode letter "ä" will become "%E4". The > > following test where I have only changed "%C3%A4" into "%E4" proves > > that ArcGIS server does not support RFC2396 mode. > > > > > http://gtkdata.gtk.fi/arcgis/services/GTKWMS/MapServer/WMSServer?REQUE > > S > T=GetMap&SERVICE=WMS&VERSION=1.1.1&WIDTH=459&HEIGHT=346&LAYER > > > S=Suomen%20maaper%E4kartta%201:1%20000%20000&TRANSPARENT=TRUE > > > &FORMAT=image%2Fpng&BBOX=434844.4854575534,7035986.957235612,452 > > 739.30027509434,7144417.839725949&SRS=EPSG:3067&STYLES= > > > > If http://www.ietf.org/rfc/rfc3986.txt is newer than > > http://www.ietf.org/rfc/rfc2396.txt I can imagine that there are > > servers which support either the old, or the new, or both, or neither. > > Should ther be a > > RFC2396/RFC3986 switch for selecting the URL-encoding method to use? > > Or is > > RFC2396 deprecated and ESRI is doing the right thing by supporting > > only > > RFC3986 and Mapserver should do the same? > > > > > > -Jukka Rahkonen- > > > > > > Rahkonen Jukka wrote: > > > > > > Hi, > > > > > > Here is an ArcGIS WMS to test with. > > > > > > http://gtkdata.gtk.fi/arcgis/services/GTKWMS/GTKWMS/MapServer/WMSServe > > > r?request=GetCapabilities&service=WMS > > > > > > Do it quickly because I have asked the service provider to change > > > the layer names, and guess what - because I could not make our > > > Mapserver to cascade the service. You will find layer names like > > > <Name>Maaperä > > > 1:20 000; 1:50 000</Name> > > > > > > I would really much like to know also how the non-ascii characters > > > should be handled in the mapfile when cascading such layers. > > > > > > -Jukka Rahkonen- > > > > > > > > > > > > Jeff McKenna wrote: > > > > > > > spaces are encoded as plus symbol in query part of URL > > > > > > > > I agree it's a change that should slip in now for 7.0, but I hope > > > > those with later ArcServer versions can test it in the beta (or we > > > > have one volunteer to let us use their Arc WMS instance for testing). > > > > > > > > -jeff > > > > > > > > > > > > > > > > On 2014-08-20 1:52 PM, Lime, Steve D (MNIT) wrote: > > > > > Devs: Is this a change that we should make for 7.0? Seems > > > > > reasonable but I'm not sure what the side effects might be. > > > > > > > > > > Steve > > > > > > > > > > *From:*Moen, Paul T. [mailto:[email protected]] > > > > > *Sent:* Wednesday, August 20, 2014 9:44 AM > > > > > *To:* Lime, Steve D (MNIT); [email protected] > > > > > *Subject:* Re: [mapserver-users] WMS request fails when spaces > > > > > are encoded as plus symbol in query part of URL > > > > > > > > > > Steve, > > > > > > > > > > You are right about the outcome of 1 and 2. 1 encodes the % and > > > > > 2 throws the following error. > > > > > > > > > > msBuildWMSLayerURLBase(): One of wms_onlineresource, > > > > > wms_server_version, wms_name metadata is missing in layer USGS > > > > > DRG 250k Topo Maps. Please either provide a valid CONNECTION > > > > > URL, or provide those values in the layer's metadata.\n\n > > > > > > > > > > I found the function as you said and > > > > > > > > > > I removed the > > > > > > > > > > if (*i == ' ') > > > > > > > > > > *j = '+'; > > > > > > > > > > else > > > > > > > > > > from the function then recompiled. > > > > > > > > > > char *msEncodeUrlExcept(const char *data, const char except) > > > > > > > > > > { > > > > > > > > > > char *hex = "0123456789ABCDEF"; > > > > > > > > > > const char *i; > > > > > > > > > > char *j, *code; > > > > > > > > > > int inc; > > > > > > > > > > unsigned char ch; > > > > > > > > > > for (inc=0, i=data; *i!='\0'; i++) > > > > > > > > > > if (msEncodeChar(*i)) > > > > > > > > > > inc += 2; > > > > > > > > > > code = (char*)msSmallMalloc(strlen(data)+inc+1); > > > > > > > > > > for (j=code, i=data; *i!='\0'; i++, j++) { > > > > > > > > > > if ( except != '\0' && *i == except ) { > > > > > > > > > > *j = except; > > > > > > > > > > } else if (msEncodeChar(*i)) { > > > > > > > > > > ch = *i; > > > > > > > > > > *j++ = '%'; > > > > > > > > > > *j++ = hex[ch/16]; > > > > > > > > > > *j = hex[ch%16]; > > > > > > > > > > } else > > > > > > > > > > *j = *i; > > > > > > > > > > } > > > > > > > > > > *j = '\0'; > > > > > > > > > > return code; > > > > > > > > > > } > > > > > > > > > > Everything works again after a mapserver recompile, install and > > > > > finally a restart of apache. Thanks so much for the path to the > > > > > solution. > > > > > > > > > > Paul Moen > > > > > [email protected] <mailto:[email protected]> > > > > > 701-328-2434 > > > > > > > > > > *From: *<Lime>, "Steve D (MNIT)" <[email protected] > > > > > <mailto:[email protected]>> > > > > > *Date: *Wednesday, August 20, 2014 at 12:41 AM > > > > > *To: *Paul Moen <[email protected] <mailto:[email protected]>>, > > > > > "[email protected] > > > > > <mailto:[email protected]>" > > > > > <[email protected] > > > > > <mailto:[email protected]>> > > > > > *Subject: *RE: [mapserver-users] WMS request fails when spaces > > > > > are encoded as plus symbol in query part of URL > > > > > > > > > > Hmmm... Nice backwards compatibility ESRI. The +'s seem to still > > > > > be quite legal (http://tools.ietf.org/html/rfc3986 and other > > > > > references) in the query string (but not the path). I don't have > > > > > access to test and I'm guessing these ideas won't work but they > > > > > might be > > > worth a quick try: > > > > > > > > > > 1) Try encoding the wms_name in the metadata: "wms_name" > > > > > "Topomap%20DRG%20250k" > > > > > > > > > > 2) Don't set the wms_name in the metadata but add it to the > > > > > connection: CONNECTION > > > > > > > > > "http://ndgishub.nd.gov/arcgis/services/All_Elevation/MapServer/WM > > > > SS > > > > er > > > > ver?L > > > > AYERS=Topomap%20DRG%20250k&" > > > > > > > > > > I'm betting MapServer will encode the %'s in 1 and throw an error in > > > > > 2. > > > > > Otherwise you could hack the MapServer source. Function is > > > > > called > > > > > msEncodeUrlExcept() in mapstring.c you can see the section to > > > > > change starting at line 1138 in git master > > > > > (https://github.com/mapserver/mapserver/blob/master/mapstring.c) > > > > > <https://github.com/mapserver/mapserver/blob/master/mapstring.c) > > > > > .> > > > > > > > > > > Maybe it's worth making this change as part of 7.0? > > > > > > > > > > Steve > > > > > > > > > > ---------------------------------------------------------------- > > > > > -- > > > > > -- > > > > > -- > > > > > -- > > > > > > > > > > *From:*[email protected] > > > > > <mailto:[email protected]> > > > > > [[email protected] > > > > > <mailto:[email protected]>] on behalf of > > > > > Moen, Paul T. [[email protected] <mailto:[email protected]>] > > > > > *Sent:* Tuesday, August 19, 2014 4:56 PM > > > > > *To:* [email protected] > > > > > <mailto:[email protected]> > > > > > *Subject:* [mapserver-users] WMS request fails when spaces are > > > > > encoded as plus symbol in query part of URL > > > > > > > > > > Hi all, > > > > > > > > > > We are consuming WMS services hosted by ESRI ArcGIS Server 10.0. > > > > > The server was upgraded to ArcGIS Server 10.2.2 and we no longer > > > > > can access layer names with spaces. > > > > > > > > > > This is the server's capabilities. > > > > > > > > > > http://ndgishub.nd.gov/arcgis/services/All_Elevation/MapServer/W > > > > > MS Se rv er?request=GetCapabilities&service=WMS > > > > > > > > > > This is the layer I am using. > > > > > > > > > > LAYER > > > > > > > > > > # DEBUG 5 > > > > > > > > > > CONNECTIONTYPE WMS > > > > > > > > > > CONNECTION > > > > > > > > > > > > > > > "http://ndgishub.nd.gov/arcgis/services/All_Elevation/MapServer/WMSServer?" > > > > > > > > > > METADATA > > > > > > > > > > "wms_name" "Topomap DRG 250k" > > > > > > > > > > "wms_format" "image/png" > > > > > > > > > > "wms_server_version" "1.1.1" > > > > > > > > > > "wms_srs" "EPSG:2266" > > > > > > > > > > END > > > > > > > > > > TYPE RASTER > > > > > > > > > > STATUS OFF > > > > > > > > > > NAME "USGS DRG 250k Topo Maps" > > > > > > > > > > END > > > > > > > > > > Mapserver encodes this request as follows. Notice that the > > > > > layer name, which is 'Topomap DRG 250k', is encoded with the > > > > > spaces becoming the > > > > '+' > > > > > character. > > > > > > > > > > http://ndgishub.nd.gov/arcgis/services/All_Elevation/MapServer/W > > > > > MS > > > > > Se > > > > > rv > > > > > > > > > > > > > > > er?LAYERS=Topomap+DRG+250k&REQUEST=map&WMTVER=1.0.0&SERVICE=W > > > > MS&FORMAT > > > > > > > > > > > > > > > =image/png&STYLES=&HEIGHT=1146&SRS=EPSG:2266&WIDTH=1271&BBOX=19 > > > > 06240.1 > > > > > > > > > > > > > > > 5992838,596656.333359479,2119730.85012732,789150.692893686&TRANSPAR > > > > ENT > > > > > =TRUE&EXCEPTIONS=INIMAGE > > > > > > > > > > This returns the error in an image that says "Parameter 'layers' > > > > > contains unacceptable layer names." > > > > > > > > > > When I replace the + in the layer name with %20, > > > > > LAYERS=Topomap+DRG+250k become > LAYERS=Topomap%20DRG%20250k > > > > and the request becomes the following. > > > > > > > > > > http://ndgishub.nd.gov/arcgis/services/All_Elevation/MapServer/W > > > > > MS > > > > > Se > > > > > rv > > > > > > > > > > > > > > > er?LAYERS=Topomap%20DRG%20250k&REQUEST=map&WMTVER=1.0.0&SERVI > > > > CE=WMS&FO > > > > > > > > > > > > > > > RMAT=image/png&STYLES=&HEIGHT=1146&SRS=EPSG:2266&WIDTH=1271&BB > > > > OX=19062 > > > > > > > > > > > > > > > 40.15992838,596656.333359479,2119730.85012732,789150.692893686&TRAN > > > > SPA > > > > > RENT=TRUE&EXCEPTIONS=INIMAGE > > > > > > > > > > That request works. Obviously, ESRI is no longer decoding + as > > > > > a space and therefore does not recognize the layer name with spaces. > > > > > > > > > > Is there any way I can have mapserver encode all characters > > > > > using percent-encoding, or at least encode spaces as %20 instead > > > > > of a + > > character. > > > > > > > > > > Thanks, > > > > > > > > > > Paul Moen > > > > > [email protected] <mailto:[email protected]> > > > > > 701-328-2434 > > > > > > > > > > > > > > _______________________________________________ > > > > mapserver-dev mailing list > > > > [email protected] > > > > http://lists.osgeo.org/mailman/listinfo/mapserver-dev > > _______________________________________________ > > mapserver-users mailing list > > [email protected] > > http://lists.osgeo.org/mailman/listinfo/mapserver-users > _______________________________________________ > mapserver-users mailing list > [email protected] > http://lists.osgeo.org/mailman/listinfo/mapserver-users _______________________________________________ mapserver-users mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/mapserver-users
