Opened 16 years ago
Closed 16 years ago
#2604 closed defect (fixed)
A GetObservation request with an invalid value in the result field, sent to a SOS 1.0.0 server must return an exception
Reported by: | nsavard | Owned by: | tomkralidis |
---|---|---|---|
Priority: | normal | Milestone: | 5.2 release |
Component: | SOS Server | Version: | svn-trunk (development) |
Severity: | normal | Keywords: | OGC, CITE, TEAM, SOS 1.0.0 |
Cc: | assefa, jmckenna |
Description
When a GetObservation request with an invalid value in the result field is sent to a SOS 1.0.0 server, an exception must be returned. Presently the server returned the following response:
<?xml version="1.0" encoding="ISO-8859-1"?> <om:ObservationCollection xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:swe="http://www.opengis.net/swe/1.0.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sos="http://www.opengis.net/sos/1.0" xmlns:om="http://www.opengis.net/om/1.0" gml:id="Water" xsi:schemaLocation="http://www.opengis.net/om/1.0 http://schemas.opengis.net/om/1.0.0/om.xsd"> <gml:description xmlns:gml="http://www.opengis.net/gml">This is for water</gml:description> <gml:name xmlns:gml="http://www.opengis.net/gml">Water</gml:name> <gml:boundedBy> <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:lowerCorner>-141 42</gml:lowerCorner> <gml:upperCorner>-52 84</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <om:member> <om:Observation> <om:samplingTime> <gml:TimeInstant> <gml:timePosition>2001-10-30T14:24:55Z</gml:timePosition> </gml:TimeInstant> </om:samplingTime> <om:procedure xlink:href="urn:ogc:def:procedure:35"/> <observedProperty>WaterQuality</observedProperty> <om:result> <gml:featureMember xmlns:gml="http://www.opengis.net/gml" gml:id="371"> <obs> <gml:boundedBy> <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:lowerCorner>-75 45</gml:lowerCorner> <gml:upperCorner>-75 45</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <msGeometry> <gml:Point srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:pos>-75 45</gml:pos> </gml:Point> </msGeometry> <Value>89.9</Value> </obs> </gml:featureMember> </om:result> </om:Observation> </om:member> <om:member> <om:Observation> <om:samplingTime> <gml:TimeInstant> <gml:timePosition>2002-10-30T18:31:38Z</gml:timePosition> </gml:TimeInstant> </om:samplingTime> <om:procedure xlink:href="urn:ogc:def:procedure:35"/> <observedProperty>WaterQuality</observedProperty> <om:result> <gml:featureMember xmlns:gml="http://www.opengis.net/gml" gml:id="377"> <obs> <gml:boundedBy> <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:lowerCorner>-75 45</gml:lowerCorner> <gml:upperCorner>-75 45</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <msGeometry> <gml:Point srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:pos>-75 45</gml:pos> </gml:Point> </msGeometry> <Value>93.9</Value> </obs> </gml:featureMember> </om:result> </om:Observation> </om:member> <om:member> <om:Observation> <om:samplingTime> <gml:TimeInstant> <gml:timePosition>2007-10-30T08:57:29Z</gml:timePosition> </gml:TimeInstant> </om:samplingTime> <om:procedure xlink:href="urn:ogc:def:procedure:2147"/> <observedProperty>WaterQuality</observedProperty> <om:result> <gml:featureMember xmlns:gml="http://www.opengis.net/gml" gml:id="238"> <obs> <gml:boundedBy> <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:lowerCorner>-79 43</gml:lowerCorner> <gml:upperCorner>-79 43</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <msGeometry> <gml:Point srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:pos>-79 43</gml:pos> </gml:Point> </msGeometry> <Value>103.5</Value> </obs> </gml:featureMember> </om:result> </om:Observation> </om:member> <om:member> <om:Observation> <om:samplingTime> <gml:TimeInstant> <gml:timePosition>2003-10-30T07:37:29Z</gml:timePosition> </gml:TimeInstant> </om:samplingTime> <om:procedure xlink:href="urn:ogc:def:procedure:2147"/> <observedProperty>WaterQuality</observedProperty> <om:result> <gml:featureMember xmlns:gml="http://www.opengis.net/gml" gml:id="297"> <obs> <gml:boundedBy> <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:lowerCorner>-79 43</gml:lowerCorner> <gml:upperCorner>-79 43</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <msGeometry> <gml:Point srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:pos>-79 43</gml:pos> </gml:Point> </msGeometry> <Value>93.5</Value> </obs> </gml:featureMember> </om:result> </om:Observation> </om:member> <om:member> <om:Observation> <om:samplingTime> <gml:TimeInstant> <gml:timePosition>2000-10-30T18:24:39Z</gml:timePosition> </gml:TimeInstant> </om:samplingTime> <om:procedure xlink:href="urn:ogc:def:procedure:604"/> <observedProperty>WaterQuality</observedProperty> <om:result> <gml:featureMember xmlns:gml="http://www.opengis.net/gml" gml:id="964"> <obs> <gml:boundedBy> <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:lowerCorner>-122 49</gml:lowerCorner> <gml:upperCorner>-122 49</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <msGeometry> <gml:Point srsName="urn:ogc:crs:epsg:4326" srsDimension="2"> <gml:pos>-122 49</gml:pos> </gml:Point> </msGeometry> <Value>99.9</Value> </obs> </gml:featureMember> </om:result> </om:Observation> </om:member> </om:ObservationCollection>
The relevant CITE test is: getObservation:core-SOS.GetObservation-RequestInvalidResult.1 (s0003) at http://cite.geoenterpriselab.com/teamengine/ Web page
Request sent is:
URL: http://dev1.lan.mapgears.com/manwe/cgi-bin/mssos100_ogc_cite? Body: <GetObservation xmlns="http://www.opengis.net/sos/1.0" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ctl="http://www.occamlab.com/ctl" xmlns:parsers="http://www.occamlab.com/te/parsers" xmlns:xows="http://www.opengeospatial.net/ows" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:sos="http://www.opengis.net/sos/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:te="java:com.occamlab.te.TECore" xmlns:sosFunctions="https://cite.opengeospatial.org/sos-1.0.0/src/ctl/functions.xml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:getObservation="https://cite.opengeospatial.org/sos-1.0.0/src/ctl/GetObservation.xml" xmlns:gml="http://www.opengis.net/gml" xmlns:tml="http://www.opengis.net/tml" xmlns:om="http://www.opengis.net/om/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:tep="http://teamengine.sourceforge.net/parsers" service="SOS" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosGetObservation.xsd"> <offering>Water</offering> <observedProperty>WaterQuality</observedProperty> <result> <ogc:PropertyIsLessThan> <ogc:PropertyName/> <ogc:Literal/> </ogc:PropertyIsLessThan> </result> <responseFormat>text/xml; subtype=om/1.0.0</responseFormat> </GetObservation>
Change History (11)
comment:1 by , 16 years ago
comment:3 by , 16 years ago
Assefa: does mapogcfilter.c check if values are empty:
<ogc:PropertyIsLessThan> <ogc:PropertyName/> <ogc:Literal/> </ogc:PropertyIsLessThan>
?
comment:5 by , 16 years ago
Tom,
From what I can see, we call FLTParseFilterEncoding in the mapogcsod.c and for "invalid" filter as in this example, the function should return NULL and we throw an exception. Is this not working?
comment:6 by , 16 years ago
It's not working. If the elements are empty, it's throwing a segfault:
[devgeo:/home/tkralidi/foss4g/mapserver/trunk/mapserver]$ gdb --args ./mapserv QUERY_STRING="map=../msautotest/wxs/sos.map&service=SOS&version=1.0.0&request=GetObservation&offering=Water&observedproperty=WaterQuality&responseformat=text/xml; subtype=om/1.0.0&result=<Filter><PropertyIsLessThan><PropertyName/><Literal/></PropertyIsLessThan></Filter>" GNU gdb Red Hat Linux (6.6-16.fc7rh) Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"... Using host libthread_db library "/lib/libthread_db.so.1". (gdb) r Starting program: /home/tkralidi/foss4g/mapserver/trunk/mapserver/mapserv QUERY_STRING=map=../msautotest/wxs/sos.map\&service=SOS\&version=1.0.0\&request=GetObservation\&offering=Water\&observedproperty=WaterQuality\&responseformat=text/xml\;\ subtype=om/1.0.0\&result=\<Filter\>\<PropertyIsLessThan\>\<PropertyName/\>\<Literal/\>\</PropertyIsLessThan\>\</Filter\> [Thread debugging using libthread_db enabled] [New Thread -1208858928 (LWP 25015)] Program received signal SIGSEGV, Segmentation fault. [Switching to Thread -1208858928 (LWP 25015)] 0x0810cc4d in FLTInsertElementInNode (psFilterNode=0x9b6a658, psXMLNode=0x9b6a670) at mapogcfilter.c:1753 1753 if (psTmpNode && psXMLNode->psChild && (gdb) bt #0 0x0810cc4d in FLTInsertElementInNode (psFilterNode=0x9b6a658, psXMLNode=0x9b6a670) at mapogcfilter.c:1753 #1 0x0810db71 in FLTParseFilterEncoding (szXMLString=0x9b642f8 "<Filter><PropertyIsLessThan><PropertyName/><Literal/></PropertyIsLessThan></Filter>") at mapogcfilter.c:1252 #2 0x0812b1d2 in msSOSGetObservation (map=0x9b537c8, sosparams=0x9b64280) at mapogcsos.c:2184 #3 0x0812cd5a in msSOSDispatch (map=0x9b537c8, req=0x9b52d48) at mapogcsos.c:2695 #4 0x080ecc7c in msOWSDispatch (map=0x9b537c8, request=0x9b52d48, force_ows_mode=0) at mapows.c:100 #5 0x080567bf in main (argc=2, argv=0xbfa22094) at mapserv.c:1245 (gdb)
comment:8 by , 16 years ago
Works now. ExceptionReport as expected. Thanks Assefa!
Norm: can you test and verify?
comment:9 by , 16 years ago
Cc: | added |
---|
comment:11 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Norm: this has been fixed in r7686, as part of #2379). Can you try now and verify?