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

Reply via email to