invalid configured shp layer results in complete WFS getFeature breakdown of all layers
Description
We have our server configured to skip invalid configured layers.
Our problem was, that some SHP files were missing but the layer was still there. That resulted in a complete failure of all WFS requests to this server on all layers. It logged a FileNotFoundException on this SHP file even by requesting other layers:
2023-01-13 15:00:36,074 INFO [stdout] (default task-7) 13 000 15:00:36 WARN [geoserver.catalog] - Error while getting feature type, flushing cache and retrying: java.io.FileNotFoundException: /srv/.../geoserver_data_dir/data/myprojectshp/UeSG_BB_20160131/uesg_bb.shp (No such file or directory)
2023-01-13 15:00:36,078 INFO [stdout] (default task-7) 13 000 15:00:36 ERROR [geoserver.ows] -
2023-01-13 15:00:36,078 INFO [stdout] (default task-7) java.lang.RuntimeException: java.io.FileNotFoundException: /srv/.../geoserver_data_dir/data/myprojectshp/UeSG_BB_20160131/uesg_bb.shp (No such file or directory)
2023-01-13 15:00:36,078 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.data.store.ContentFeatureSource.getAbsoluteSchema(ContentFeatureSource.java:341)
2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.data.store.ContentFeatureSource.getSchema(ContentFeatureSource.java:308)
2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.data.store.ContentDataStore.getSchema(ContentDataStore.java:295)
2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.data.store.ContentDataStore.getSchema(ContentDataStore.java:633)
2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.data.store.ContentDataStore.getSchema(ContentDataStore.java:97)
2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.ResourcePool.acquireFeatureType(ResourcePool.java:993)
2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.ResourcePool.getCacheableFeatureType(ResourcePool.java:975)
2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.ResourcePool.tryGetFeatureType(ResourcePool.java:958)
2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.ResourcePool.getFeatureType(ResourcePool.java:950)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.ResourcePool.getFeatureType(ResourcePool.java:935)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.impl.FeatureTypeInfoImpl.getFeatureType(FeatureTypeInfoImpl.java:134)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at jdk.internal.reflect.GeneratedMethodAccessor418.invoke(Unknown Source)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at java.base/java.lang.reflect.Method.invoke(Unknown Source)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.impl.ModificationProxy.invoke(ModificationProxy.java:144)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//com.sun.proxy.$Proxy153.getFeatureType(Unknown Source)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.wfs.xml.FeatureTypeSchemaBuilder.isSimpleFeature(FeatureTypeSchemaBuilder.java:433)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.wfs.xml.FeatureTypeSchemaBuilder.buildSchemaInternal(FeatureTypeSchemaBuilder.java:204)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.wfs.xml.FeatureTypeSchemaBuilder.addApplicationTypes(FeatureTypeSchemaBuilder.java:585)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.wfs.xml.v1_0_0.WFS.buildSchema(WFS.java:225)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.xsd.XSD.getSchema(XSD.java:197)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.xsd.SchemaLocator.locateSchema(SchemaLocator.java:87)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.xsd.impl.ParserHandler.loadSchemas(ParserHandler.java:594)
2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.xsd.impl.ParserHandler.startElement(ParserHandler.java:344)
The problematic layer was still listed in the capabilities document.
Environment
Linux JDK 11 GeoServer
Activity
Andrea Aime
January 14, 2023 at 10:08 AM
(edited)
The “skip misconfigured layers” logic exists only for GetCapabilities. The GML encoder is tied to a schema driven machinery (FeatureTypeSchemaBuilder) that unfortunately needs the schema of all layers before doing its work, and has no knowledge of that flag. It’s possible to implement though.
We have our server configured to skip invalid configured layers.
Our problem was, that some SHP files were missing but the layer was still there. That resulted in a complete failure of all WFS requests to this server on all layers. It logged a FileNotFoundException on this SHP file even by requesting other layers:
2023-01-13 15:00:36,074 INFO [stdout] (default task-7) 13 000 15:00:36 WARN [geoserver.catalog] - Error while getting feature type, flushing cache and retrying: java.io.FileNotFoundException: /srv/.../geoserver_data_dir/data/myprojectshp/UeSG_BB_20160131/uesg_bb.shp (No such file or directory) 2023-01-13 15:00:36,078 INFO [stdout] (default task-7) 13 000 15:00:36 ERROR [geoserver.ows] - 2023-01-13 15:00:36,078 INFO [stdout] (default task-7) java.lang.RuntimeException: java.io.FileNotFoundException: /srv/.../geoserver_data_dir/data/myprojectshp/UeSG_BB_20160131/uesg_bb.shp (No such file or directory) 2023-01-13 15:00:36,078 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.data.store.ContentFeatureSource.getAbsoluteSchema(ContentFeatureSource.java:341) 2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.data.store.ContentFeatureSource.getSchema(ContentFeatureSource.java:308) 2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.data.store.ContentDataStore.getSchema(ContentDataStore.java:295) 2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.data.store.ContentDataStore.getSchema(ContentDataStore.java:633) 2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.data.store.ContentDataStore.getSchema(ContentDataStore.java:97) 2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.ResourcePool.acquireFeatureType(ResourcePool.java:993) 2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.ResourcePool.getCacheableFeatureType(ResourcePool.java:975) 2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.ResourcePool.tryGetFeatureType(ResourcePool.java:958) 2023-01-13 15:00:36,079 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.ResourcePool.getFeatureType(ResourcePool.java:950) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.ResourcePool.getFeatureType(ResourcePool.java:935) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.impl.FeatureTypeInfoImpl.getFeatureType(FeatureTypeInfoImpl.java:134) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at jdk.internal.reflect.GeneratedMethodAccessor418.invoke(Unknown Source) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at java.base/java.lang.reflect.Method.invoke(Unknown Source) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.catalog.impl.ModificationProxy.invoke(ModificationProxy.java:144) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//com.sun.proxy.$Proxy153.getFeatureType(Unknown Source) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.wfs.xml.FeatureTypeSchemaBuilder.isSimpleFeature(FeatureTypeSchemaBuilder.java:433) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.wfs.xml.FeatureTypeSchemaBuilder.buildSchemaInternal(FeatureTypeSchemaBuilder.java:204) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.wfs.xml.FeatureTypeSchemaBuilder.addApplicationTypes(FeatureTypeSchemaBuilder.java:585) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geoserver.wfs.xml.v1_0_0.WFS.buildSchema(WFS.java:225) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.xsd.XSD.getSchema(XSD.java:197) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.xsd.SchemaLocator.locateSchema(SchemaLocator.java:87) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.xsd.impl.ParserHandler.loadSchemas(ParserHandler.java:594) 2023-01-13 15:00:36,080 INFO [stdout] (default task-7) at deployment.geoserver.war//org.geotools.xsd.impl.ParserHandler.startElement(ParserHandler.java:344)
The problematic layer was still listed in the capabilities document.