Hi Alessandro,

I just tried your "old school" code in a plain vanilla java app with
the following jars attached:

gt-api
gt-data
gt-main
gt-shapefile
gt-opengis

All taken from the 2.7-RC2 distribution. The app runs without error on
my system (Java 1.6, OSX).  The code I used is below. I'm guessing
that it's a classpath issue at your end, unless someone else is able
to replicate the problem.

Michael

package mxb.geotools.testapp;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.FeatureSource;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureIterator;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.AttributeDescriptor;

public class Foo {
    private static final Logger logger = Logger.getLogger(Foo.class.getName());

    public static void main(String[] args) throws Exception {
        Foo foo = new Foo();
        foo.runTest(new
File("/Users/michael/coding/geotools/data/refractions/bc_border.shp"));
    }

    private void runTest(File shpfile) throws Exception {
        Map map = new HashMap();
        map.put("url", shpfile.toURI().toURL());
        DataStore store = DataStoreFinder.getDataStore(map);
        String[] typeNames = store.getTypeNames();
        String typeName = typeNames[0];
        logger.info("typeName: " + typeName);
        FeatureSource<SimpleFeatureType, SimpleFeature> featureSource
= store.getFeatureSource(typeName);
        SimpleFeatureType ft = featureSource.getSchema();
        Map<String, Integer> attributemap = new HashMap<String, Integer>();
        List<AttributeDescriptor> attrdescripts = ft.getAttributeDescriptors();
        for (int x = 0; x < attrdescripts.size(); x++) {
            attributemap.put(attrdescripts.get(x).getLocalName(), x);
        }

        FeatureCollection<SimpleFeatureType, SimpleFeature> collection
= featureSource.getFeatures();
        FeatureIterator<SimpleFeature> iterator = collection.features();
        int n = 0;
        try {
            // dumb code just for testing :)
            while (iterator.hasNext()) {
                iterator.next();
                n++ ;
            }
        } finally {
            iterator.close();
        }
        System.out.println("count = " + n);

    }
}


On 19 March 2011 09:31, Alessandro Ferrucci
<[email protected]> wrote:
> Testing pre-built 2.7.RC2 binaries to compile simple shapefile reading
> program.
>
> Using 2.7.RC2 I get
>
> Exception in thread "Thread-5" Exception in thread "Thread-2"
> java.lang.RuntimeException: Unable to find function Length
>         at
> org.geotools.filter.FunctionFinder.findFunction(FunctionFinder.java:103)
>         at
> org.geotools.filter.FunctionFinder.findFunction(FunctionFinder.java:69)
>         at
> org.geotools.filter.FilterFactoryImpl.function(FilterFactoryImpl.java:469)
>         at
> org.geotools.feature.AttributeTypeBuilder.lengthRestriction(AttributeTypeBuilder.java:624)
>         at
> org.geotools.feature.AttributeTypeBuilder.buildType(AttributeTypeBuilder.java:455)
>         at
> org.geotools.feature.AttributeTypeBuilder.buildDescriptor(AttributeTypeBuilder.java:516)
>         at
> org.geotools.data.shapefile.ShapefileDataStore.readAttributes(ShapefileDataStore.java:811)
>         at
> org.geotools.data.shapefile.ShapefileDataStore.getSchema(ShapefileDataStore.java:714)
>         at
> org.geotools.data.shapefile.ShapefileDataStore.getSchema(ShapefileDataStore.java:708)
>         at
> org.geotools.data.shapefile.ShapefileDataStore.getFeatureSource(ShapefileDataStore.java:1040)
>         at geom_reader.run(geom_reader.java:57)
>         at java.lang.Thread.run(Thread.java:619)
>
> If I swap out 2.7.RC2 geotools with 2.6.5 geotools it works fine.
>
> I've found lots of postings about people having this exact same issue but
> they were all using maven plugin voodoo and creating these service functions
> at build time... I am not using maven but pre-built bin jars downloaded from
>
> http://sourceforge.net/projects/geotools/files/GeoTools%202.7%20Releases/2.7-RC2/
>
>
> and a simple.sh file to invoke java, keepin' it old school.
>
> I unjarred the gt-main and did find a lot of  SPI files, with many functions
> inside
>
> grep -r "Length" *
> org.opengis.filter.expression.Function:org.geotools.filter.LengthFunction
> org.opengis.filter.expression.Function:org.geotools.filter.function.FilterFunction_geomLength
> org.opengis.filter.expression.Function:org.geotools.filter.function.FilterFunction_strLength
>
> The following are the jars I'm including in classpath:
>
> gt-api-2.7-RC2.jar
> gt-main-2.7-RC2.jar
> gt-opengis-2.7-RC2.jar
> gt-shapefile-2.7-RC2.jar
> jts-1.11.jar
> gt-data-2.7-RC2.jar
> gt-metadata-2.7-RC2.jar
> gt-referencing-2.7-RC2.jar
> jsr-275-1.0-beta-2.jar
>
>
> code is straight forward:
>
>   Map map = new HashMap();
>                     map.put("url", shpfile.toURI().toURL());
>                     DataStore store = DataStoreFinder.getDataStore(map);
>                     String[] typeNames = store.getTypeNames();
>                     String typeName = typeNames[0];
>                     logger.info("typeName: " + typeName);
>                     FeatureSource<SimpleFeatureType, SimpleFeature>
> featureSource = store.getFeatureSource(typeName);
>                     SimpleFeatureType ft = featureSource.getSchema();
>                     Map<String, Integer> attributemap = new HashMap<String,
> Integer>();
>                     List<AttributeDescriptor> attrdescripts =
> ft.getAttributeDescriptors();
>                     for (int x = 0; x < attrdescripts.size(); x++) {
>
> attributemap.put(attrdescripts.get(x).getLocalName(), x);
>                     }
>                     FeatureCollection<SimpleFeatureType, SimpleFeature>
> collection = featureSource.getFeatures();
>                     FeatureIterator<SimpleFeature> iterator =
> collection.features();
>                     while (iterator.hasNext()) {
>                     }
>
>
> Any ideas?
>
> Thank you,
> --
> Signed,
> Alessandro Ferrucci
>
> ------------------------------------------------------------------------------
> Colocation vs. Managed Hosting
> A question and answer guide to determining the best fit
> for your organization - today and in the future.
> http://p.sf.net/sfu/internap-sfd2d
> _______________________________________________
> Geotools-gt2-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>
>

------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to