From: Gabriel <gr...@ax...> - 2006-09-15 14:59:12
|
Hi Duncan yes, that's an old and well known problem. The good news is that we have a couple ideas and are waiting for 2.3.0 to g= et=20 out before implementing it (http://jira.codehaus.org/browse/GEOT-602) So please keep in sync since we're going to fix it asap, and do not hesitat= e=20 to talk back if you have any suggestion. regards, Gabriel On Thursday 14 September 2006 13:25, Duncan Clarkson wrote: > Hi, > > We're having a problem with the way that geotools 2.1.1+ deals with > parsing literal values in OGC filters. We are providing data to users > via Geoserver 1.3.0 which uses the 2.1.1 version of Geotools. > > Some of the datasets we offer have a string column called 'label' > although the value of this field can be numeric and can contain leading > zeros. We need to generate EqualTo and Like filters based on these > fields but the problem is that they are being treated as integers by > geotools. Here is the code that handles this > (org.geotools.filter.ExpressionSAXParser): > > } else if (curExprssn instanceof LiteralExpression) { > // This is a relatively loose assignment routine, which > uses // the fact that the three allowed literal types have a strict > // instatiation hierarchy (ie. double can be an int can > be a > // string, but not the other way around). > // A better routine would consider the use of this > expression > // (ie. will it be compared to a double or searched with= a > // like filter?) > //HACK: This should also not use exception catching, it's > //expensive and bad code practice. > try { > Object temp =3D new Integer(message); > ((LiteralExpression) curExprssn).setLiteral(temp); > currentState =3D "complete"; > } catch (NumberFormatException nfe1) { > try { > Object temp =3D new Double(message); > ((LiteralExpression) curExprssn).setLiteral(temp); > currentState =3D "complete"; > } catch (NumberFormatException nfe2) { > Object temp =3D message; > ((LiteralExpression) curExprssn).setLiteral(temp); > currentState =3D "complete"; > } > } > } > > So if the literal can be converted to a number it will be, leading zeros > will be lost. This of course means that the SQL generated by Geoserver > to extract the features will return no data as '007' !=3D 7. > > We were thinking that a better way to handle this would be not to try > and convert a literal unless it is required by a calculation. Any ideas > or plans for what to do about this? > > Duncan > > PS. For completeness sake here is the output I have from Geoserver: > > 176638862 [FINER] org.geotools.filter.ExpressionSAXParser - incoming > type: Literal > 176638862 [FINER] org.geotools.filter.ExpressionSAXParser - declared > type: PropertyName > 176638862 [FINER] org.geotools.filter.ExpressionSAXParser - current > state: complete > 176638863 [FINER] org.geotools.filter.ExpressionSAXParser - is literal > expression > 176638863 [FINER] GMLFilterDocument - RETURN > 176638864 [FINER] GMLFilterDocument - ENTRY [C@ef1df6 77 3 > 176638864 [FINER] org.geotools.filter.ExpressionSAXParser - incoming > message: 007 > 176638864 [FINER] org.geotools.filter.ExpressionSAXParser - should read > chars: true > 176638865 [FINER] GMLFilterDocument - RETURN > 176638865 [FINER] GMLFilterDocument - ENTRY http://www.opengis.net/ogc > Literal ogc:Literal > 176638865 [FINER] org.geotools.filter.FilterFilter - found start > element: Literal > 176638865 [FINER] AbstractFilter - ENTRY 109 > 176638865 [FINER] org.geotools.filter.FilterFilter - found an expression > filter end > 176638866 [FINER] org.geotools.filter.ExpressionSAXParser - declared > type: Literal > 176638866 [FINER] org.geotools.filter.ExpressionSAXParser - end message: > Literal > 176638867 [FINER] org.geotools.filter.ExpressionSAXParser - current > state: complete > 176638867 [FINER] org.geotools.filter.FilterFilter - expression factory > is ready > 176638868 [FINER] org.geotools.filter.ExpressionSAXParser - about to > create expression: 7 > 176638868 [FINER] org.geotools.filter.FilterSAXParser - current state > (end): complete > 176638869 [FINER] GMLFilterDocument - RETURN > 176638869 [FINER] GMLFilterDocument - ENTRY http://www.opengis.net/ogc > PropertyIsEqualTo ogc:PropertyIsEqualTo > 176638869 [FINER] org.geotools.filter.FilterFilter - found start > element: PropertyIsEqualTo > 176638869 [FINER] AbstractFilter - ENTRY 14 > 176638870 [FINER] org.geotools.filter.FilterSAXParser - complete called, > state =3D complete > 176638870 [FINER] org.geotools.filter.LogicSAXParser - added a filter: [ > label =3D 7 ] > 176638870 [FINER] org.geotools.filter.LogicSAXParser - added to sub > filters: [ label =3D 7 ] > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job > easier Download IBM WebSphere Application Server v.1.0.1 based on Apache > Geronimo > http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&dat= =3D121642 > _______________________________________________ > Geotools-gt2-users mailing list > Geo...@li... > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users =2D-=20 Gabriel Rold=E1n (gr...@ax...) Axios Engineering (http://www.axios.es) Tel. +34 944 41 63 84 =46ax. +34 944 41 64 90 |