[udig-devel] Troubles using FeatureWriter

Damjan Šavko damjan.savd at gmail.com
Tue Aug 8 00:28:42 PDT 2006


Hello, I've been having a lot of troubles trying to write to a shapefile.
I've done it before but it always worked and now I don't know what I'm doing
wrong.
This is my piece of code:

try {

            FilterFactory filterFactory =
FilterFactoryFinder.createFilterFactory ();
            CompareFilter filter = filterFactory.createCompareFilter(
FilterType.COMPARE_EQUALS);
            filter.addLeftValue(filterFactory.createAttributeExpression
(...........));
            filter.addRightValue(filterFactory.createLiteralExpression (
feature.getAttribute(.....................)));

            Transaction transaction = new DefaultTransaction();
            FeatureWriter fw = fs.getDataStore().getFeatureWriter(
fs.getSchema().getTypeName(),filter, transaction);

            try {

                while(fw.hasNext()) {

                    Feature changedFeature = fw.next();
                    changedFeature.setAttribute (...........,
..............);

                    fw.write();
                }

                fw.close();
                transaction.commit();


            }
            catch (Exception e) {
                transaction.rollback();
            }
            finally {
                fw.close();
                transaction.close();
            }

        } catch (IOException ioe) {
            e.printStackTrace();
        }


 The error I get is:

java.io.IOException: Shp has extra record
    at
org.geotools.data.shapefile.indexed.IndexedShapefileDataStore$Reader.hasNext
(IndexedShapefileDataStore.java:1204)
    at org.geotools.data.FIDFeatureReader.hasNext (FIDFeatureReader.java
:139)
    at org.geotools.data.FilteringFeatureReader.hasNext(
FilteringFeatureReader.java:118)
    at org.geotools.data.DiffFeatureReader.hasNext(DiffFeatureReader.java
:115)
    at org.geotools.data.DiffFeatureWriter.hasNext (DiffFeatureWriter.java
:206)
    at org.geotools.data.InProcessLockingManager$1.hasNext(
InProcessLockingManager.java:338)
    at org.geotools.data.FilteringFeatureWriter.hasNext(
FilteringFeatureWriter.java:134)
    at si.triport.udig.modal.Split.test(Split.java
:997)..............................

The problem seems to be laying in the method hasNext().  At the end of the
loop when it should return false it just breaks down.
I tried to change the iterator by using a feature iterator:

FeatureCollection fc = fs.getFeatures(filter);
FeatureIterator fi = fc.features();

            try {

                while(fi.hasNext()) {

                    Feature f = fi.next();
                    Feature changedFeature = fw.next();
                   ........................................
                    fw.write();
                }

                fi.close();
                fw.close();
                transaction.commit();     ....

But the error remained the same except that it was fired from
transaction.commit() and not hasNext()


java.io.IOException: Shp has extra record
    at
org.geotools.data.shapefile.indexed.IndexedShapefileDataStore$Reader.hasNext
(IndexedShapefileDataStore.java:1204)
    at
org.geotools.data.shapefile.indexed.IndexedShapefileDataStore$Writer.close(
IndexedShapefileDataStore.java:1509)
    at org.geotools.data.TransactionStateDiff.applyDiff(
TransactionStateDiff.java:251)
    at org.geotools.data.TransactionStateDiff.commit(
TransactionStateDiff.java:137)
    at org.geotools.data.DefaultTransaction.commit(DefaultTransaction.java
:176)
    at si.triport.udig.modal.Split.test(Split.java
:1011)..........................

Can anybody tell me what I'm doing wrong?

Damjan Šavko
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.refractions.net/pipermail/udig-devel/attachments/20060808/e6a88a53/attachment.html


More information about the udig-devel mailing list