Hi guys,
I'm wondering what to do since the fix for <http://jira.codehaus.org/browse/GEOT-2403> breaks the org.geotools.gml3.v3_2.GMLParsingTest. But it actually exposes a bug in gml parsing, so it does not break it, just uncovers it. Explanation: the fix for GEOT-2403 stops SimpleFeatureImpl from returning "the first non null geometry" when asked for the default geometry, but instead returns the default geometry value, which may well be null. Otherwise it is inconsistent with FeatureType.getGeometryAttribute. So the patch is good. But, GMLParsingTest.testParseFeatureCollection, at line 75 does assertTrue( f.getDefaultGeometry() instanceof Point ); which is fine, but it sort of relied on SimpleFeatureImple accidentally returning the first non null geometry instance found. The root of the problem being that the proper default geometry attribute is not being set on the FeatureType parsed by GMLParsingUtils.featureType. Since this method is not setting the default geometry attribute, and since the SimpleFeatureType being built extends from AbstractFeatureType, the SimpleFeatureTypeImpl implementation is setting the default geometry to be gml:location instead. Now, why GMLParsingUtils.featureType is not setting the default geometry? because of the namespace change in GML 3.2. Lines 254 to 263 in GMLParsingUtils: //set the default geometry explicitly if (Geometry.class.isAssignableFrom(theClass) && !GML.NAMESPACE.equals(property.getTargetNamespace())) { //only set if non-gml, we do this because of "gml:location", // we dont want that to be the default if the user has another // geometry attribute if (ftBuilder.getDefaultGeometry() == null) { ftBuilder.setDefaultGeometry(property.getName()); } } The GML.NAMESPACE being compared is the one in the gml2 package, and though it matches the GML 3.1.2 namespace, it does not match the GML 3.2 namespace, hence the default geom property is not set. As I don't quite see a straightforward solution, I'm asking you for any clue on how to proceed. What I thought so far is to change the static reference to GML.NAMESPACE for the namespace of the XSD instance being used, whether it is gml2, gml3.1 or gml3.2... But I don't see how to get to that XSD instance from inside that method? any idea? Also, how can I proceed to commit the change in main for GEOT-2403 without breaking the build while this is sorted out? Cheers, Gabriel. ------------------------------------------------------------------------------ _______________________________________________ Geotools-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/geotools-devel
