[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