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.

Details

Assignee

Reporter

Affects versions

Components

Priority

Created January 13, 2023 at 3:05 PM
Updated January 14, 2023 at 10:09 AM