I am trying to use the Geoserver Importer extension to mass import all the tables I have in a PostGIS database into separate layers, and am running into an error on certain layers. I am using gdal/ogr2ogr to convert and import an Esri GDB file into a PostGIS database (using ogr2ogr’s convert_to_linear and promote_to_multi options), and then are using the Geoserver Importer extension to import from that PostGIS database. The error I am getting on several layers is:
java.lang.RuntimeException: org.geotools.data.DataSourceException: An exception occurred while parsing WKB data
at org.geotools.jdbc.JDBCFeatureReader.readNextFeature(JDBCFeatureReader.java:389)
at org.geotools.jdbc.JDBCFeatureReader.hasNext(JDBCFeatureReader.java:332)
at org.geotools.data.store.ContentFeatureCollection$WrappingFeatureIterator.hasNext(ContentFeatureCollection.java:145)
at org.geotools.feature.collection.DecoratingFeatureIterator.hasNext(DecoratingFeatureIterator.java:42)
at org.geoserver.importer.ImportTransformFeatureCollection$CancelableFeatureIterator.hasNext(ImportTransformFeatureCollection.java:163)
at org.geotools.feature.collection.DecoratingFeatureIterator.hasNext(DecoratingFeatureIterator.java:42)
at org.geotools.data.store.ContentFeatureStore.addFeatures(ContentFeatureStore.java:248)
at org.geoserver.importer.Importer.copyFromFeatureSource(Importer.java:1716)
at org.geoserver.importer.Importer.loadIntoDataStore(Importer.java:1469)
at org.geoserver.importer.Importer.doIndirectImport(Importer.java:1209)
at org.geoserver.importer.Importer.run(Importer.java:1015)
at org.geoserver.importer.Importer.runInternal(Importer.java:975)
at org.geoserver.importer.Importer$3.callInternal(Importer.java:1055)
at org.geoserver.importer.Importer$3.callInternal(Importer.java:1047)
at org.geoserver.importer.Importer$SecurityContextCopyingJob.call(Importer.java:1091)
at org.geoserver.importer.job.Job.call(Job.java:16)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.geotools.data.DataSourceException: An exception occurred while parsing WKB data
at org.geotools.data.postgis.WKBAttributeIO.wkb2Geometry(WKBAttributeIO.java:88)
at org.geotools.data.postgis.WKBAttributeIO.read(WKBAttributeIO.java:116)
at org.geotools.data.postgis.PostGISDialect.decodeGeometryValue(PostGISDialect.java:350)
at org.geotools.data.postgis.PostGISPSDialect.decodeGeometryValue(PostGISPSDialect.java:83)
at org.geotools.jdbc.JDBCFeatureReader.readNextFeature(JDBCFeatureReader.java:381)
… 19 more
Caused by: org.locationtech.jts.io.ParseException: Attempt to read past end of input
at org.locationtech.jts.io.ByteOrderDataInStream.read(ByteOrderDataInStream.java:142)
at org.locationtech.jts.io.ByteOrderDataInStream.readInt(ByteOrderDataInStream.java:107)
at org.geotools.geometry.jts.WKBReader.readLinearRing(WKBReader.java:292)
at org.geotools.geometry.jts.WKBReader.readPolygon(WKBReader.java:302)
at org.geotools.geometry.jts.WKBReader.readGeometry(WKBReader.java:219)
at org.geotools.geometry.jts.WKBReader.readGeometry(WKBReader.java:204)
at org.geotools.geometry.jts.WKBReader.readMultiPolygon(WKBReader.java:383)
at org.geotools.geometry.jts.WKBReader.readGeometry(WKBReader.java:230)
at org.geotools.geometry.jts.WKBReader.readGeometry(WKBReader.java:204)
at org.geotools.geometry.jts.WKBReader.read(WKBReader.java:170)
at org.geotools.data.postgis.WKBAttributeIO.wkb2Geometry(WKBAttributeIO.java:86)
… 23 more
Can you run a few queries to confirm tha the data (in the tables that is having a problem) is valid? It really looks like an invalid geometry is tripping you up.
The stack trace shows it trying to read linear ring, and being directed to read past the end of the available coordinates. So check for any polygons that only have two points (for example).
Thank you for the reply. I ran some queries and while I did find some invalid geometries, after correcting them I have found that the issue is with empty geometries (MULTIPOLYGON EMPTY or MULTIPOLYGON(EMPTY) in this table) which I believe should be valid. I also ran into a similar issue on another table with 4-dimensional geometries (MULTILINESTRING ZM) which should also be valid according to PostGIS.
The error output in the 4-dimensional geometry case is:
java.lang.IllegalArgumentException: Invalid output dimension (must be 2 or 3)
at org.geotools.geometry.jts.WKTWriter2.(WKTWriter2.java:158)
at org.geotools.data.postgis.PostGISDialect.encodeGeometryValue(PostGISDialect.java:1329)
at org.geotools.jdbc.JDBCDataStore.insertSQL(JDBCDataStore.java:4397)
at org.geotools.jdbc.JDBCDataStore.insertNonPS(JDBCDataStore.java:2030)
at org.geotools.jdbc.JDBCDataStore.insert(JDBCDataStore.java:1852)
at org.geotools.jdbc.JDBCInsertFeatureWriter.flush(JDBCInsertFeatureWriter.java:130)
at org.geotools.jdbc.JDBCInsertFeatureWriter.write(JDBCInsertFeatureWriter.java:102)
at org.geotools.data.InProcessLockingManager$1.write(InProcessLockingManager.java:302)
at org.geotools.data.store.ContentFeatureStore.addFeature(ContentFeatureStore.java:295)
at org.geotools.data.store.ContentFeatureStore.addFeatures(ContentFeatureStore.java:250)
at org.geoserver.importer.Importer.copyFromFeatureSource(Importer.java:1716)
at org.geoserver.importer.Importer.loadIntoDataStore(Importer.java:1469)
at org.geoserver.importer.Importer.doIndirectImport(Importer.java:1209)
at org.geoserver.importer.Importer.run(Importer.java:1015)
at org.geoserver.importer.Importer.runInternal(Importer.java:975)
at org.geoserver.importer.Importer$3.callInternal(Importer.java:1055)
at org.geoserver.importer.Importer$3.callInternal(Importer.java:1047)
at org.geoserver.importer.Importer$SecurityContextCopyingJob.call(Importer.java:1091)
at org.geoserver.importer.job.Job.call(Job.java:16)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Can you run a few queries to confirm tha the data (in the tables that is having a problem) is valid? It really looks like an invalid geometry is tripping you up.
The stack trace shows it trying to read linear ring, and being directed to read past the end of the available coordinates. So check for any polygons that only have two points (for example).
I am trying to use the Geoserver Importer extension to mass import all the tables I have in a PostGIS database into separate layers, and am running into an error on certain layers. I am using gdal/ogr2ogr to convert and import an Esri GDB file into a PostGIS database (using ogr2ogr’s convert_to_linear and promote_to_multi options), and then are using the Geoserver Importer extension to import from that PostGIS database. The error I am getting on several layers is:
java.lang.RuntimeException: org.geotools.data.DataSourceException: An exception occurred while parsing WKB data
at org.geotools.jdbc.JDBCFeatureReader.readNextFeature(JDBCFeatureReader.java:389)
at org.geotools.jdbc.JDBCFeatureReader.hasNext(JDBCFeatureReader.java:332)
at org.geotools.data.store.ContentFeatureCollection$WrappingFeatureIterator.hasNext(ContentFeatureCollection.java:145)
at org.geotools.feature.collection.DecoratingFeatureIterator.hasNext(DecoratingFeatureIterator.java:42)
at org.geoserver.importer.ImportTransformFeatureCollection$CancelableFeatureIterator.hasNext(ImportTransformFeatureCollection.java:163)
at org.geotools.feature.collection.DecoratingFeatureIterator.hasNext(DecoratingFeatureIterator.java:42)
at org.geotools.data.store.ContentFeatureStore.addFeatures(ContentFeatureStore.java:248)
at org.geoserver.importer.Importer.copyFromFeatureSource(Importer.java:1716)
at org.geoserver.importer.Importer.loadIntoDataStore(Importer.java:1469)
at org.geoserver.importer.Importer.doIndirectImport(Importer.java:1209)
at org.geoserver.importer.Importer.run(Importer.java:1015)
at org.geoserver.importer.Importer.runInternal(Importer.java:975)
at org.geoserver.importer.Importer$3.callInternal(Importer.java:1055)
at org.geoserver.importer.Importer$3.callInternal(Importer.java:1047)
at org.geoserver.importer.Importer$SecurityContextCopyingJob.call(Importer.java:1091)
at org.geoserver.importer.job.Job.call(Job.java:16)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.geotools.data.DataSourceException: An exception occurred while parsing WKB data
at org.geotools.data.postgis.WKBAttributeIO.wkb2Geometry(WKBAttributeIO.java:88)
at org.geotools.data.postgis.WKBAttributeIO.read(WKBAttributeIO.java:116)
at org.geotools.data.postgis.PostGISDialect.decodeGeometryValue(PostGISDialect.java:350)
at org.geotools.data.postgis.PostGISPSDialect.decodeGeometryValue(PostGISPSDialect.java:83)
at org.geotools.jdbc.JDBCFeatureReader.readNextFeature(JDBCFeatureReader.java:381)
… 19 more
Caused by: org.locationtech.jts.io.ParseException: Attempt to read past end of input
at org.locationtech.jts.io.ByteOrderDataInStream.read(ByteOrderDataInStream.java:142)
at org.locationtech.jts.io.ByteOrderDataInStream.readInt(ByteOrderDataInStream.java:107)
at org.geotools.geometry.jts.WKBReader.readLinearRing(WKBReader.java:292)
at org.geotools.geometry.jts.WKBReader.readPolygon(WKBReader.java:302)
at org.geotools.geometry.jts.WKBReader.readGeometry(WKBReader.java:219)
at org.geotools.geometry.jts.WKBReader.readGeometry(WKBReader.java:204)
at org.geotools.geometry.jts.WKBReader.readMultiPolygon(WKBReader.java:383)
at org.geotools.geometry.jts.WKBReader.readGeometry(WKBReader.java:230)
at org.geotools.geometry.jts.WKBReader.readGeometry(WKBReader.java:204)
at org.geotools.geometry.jts.WKBReader.read(WKBReader.java:170)
at org.geotools.data.postgis.WKBAttributeIO.wkb2Geometry(WKBAttributeIO.java:86)
… 23 more
Geoserver-users mailing list
Please make sure you read the following two resources before posting to this list: