Dear Geotools Developers:
We are using Geoserver for data dissemination through OGC services, and we are
experiencing an issue that is preventing us from successfully serving data via
WCS: we are receiving a NullPointerException when executing WCS Get Coverage
requests.
Our setup uses ImageMosaic coverage stores based on GeoTIFFs. The coverage
stores are created and updated using Geoserver's REST interface. These
coverages can always be listed and examined using WCS GetCapabilities and
DescribeCoverage. Normally we get successful WCS GetCoverage response. But we
have experienced cases, usually after application restart, in which we are
unable to retrieve data via WCS GetCoverage due to the NullPointerExeception in
the stack trace below. When the NullPointerException error starts occurring,
all coverages created/updated are affected and the GetCoverage requests
consistently results in errors. Once the NullPointerException starts occurring,
the Geoserver application must be restarted and all image mosaic regenerated
for the error to go away.
10 May 14:03:55 ERROR [geoserver.ows] -
org.geoserver.wcs2_0.exception.WCS20Exception: Failed to read the coverage XYZ
at org.geoserver.wcs2_0.GetCoverage.run(GetCoverage.java:305)
at
org.geoserver.wcs2_0.DefaultWebCoverageService20.getCoverage(DefaultWebCoverageService20.java:138)
...
Caused by: org.geotools.data.DataSourceException: Unable to create this mosaic
at
org.geotools.gce.imagemosaic.RasterLayerResponse.prepareResponse(RasterLayerResponse.java:1319)
at
org.geotools.gce.imagemosaic.RasterLayerResponse.processRequest(RasterLayerResponse.java:1203)
at
org.geotools.gce.imagemosaic.RasterLayerResponse.createResponse(RasterLayerResponse.java:1169)
at
org.geotools.gce.imagemosaic.RasterManager.read(RasterManager.java:1163)
at
org.geotools.gce.imagemosaic.ImageMosaicReader.read(ImageMosaicReader.java:871)
at
org.geotools.gce.imagemosaic.ImageMosaicReader.read(ImageMosaicReader.java:850)
at
org.geotools.gce.imagemosaic.ImageMosaicReader.read(ImageMosaicReader.java:784)
at
org.geoserver.catalog.CoverageDimensionCustomizerReader.read(CoverageDimensionCustomizerReader.java:229)
at
org.geoserver.catalog.CoverageDimensionCustomizerReader.read(CoverageDimensionCustomizerReader.java:219)
at
org.geoserver.wcs2_0.util.RequestUtils.readBestCoverage(RequestUtils.java:242)
at org.geoserver.wcs2_0.GetCoverage.readCoverage(GetCoverage.java:928)
at org.geoserver.wcs2_0.GetCoverage.readCoverage(GetCoverage.java:771)
at org.geoserver.wcs2_0.GetCoverage.setupCoverage(GetCoverage.java:349)
at org.geoserver.wcs2_0.GetCoverage.run(GetCoverage.java:300)
... 111 more
Caused by: java.io.IOException: java.lang.NullPointerException
at
org.geotools.gce.imagemosaic.RasterLayerResponse$GranuleCollector.collectGranules(RasterLayerResponse.java:502)
at
org.geotools.gce.imagemosaic.RasterLayerResponse$GranuleCollector.access$2400(RasterLayerResponse.java:325)
at
org.geotools.gce.imagemosaic.RasterLayerResponse$MosaicProducer.produce(RasterLayerResponse.java:1039)
at
org.geotools.gce.imagemosaic.RasterLayerResponse$MosaicProducer.access$3100(RasterLayerResponse.java:858)
at
org.geotools.gce.imagemosaic.RasterLayerResponse.prepareResponse(RasterLayerResponse.java:1271)
... 124 more
Caused by: java.lang.NullPointerException
at
org.geotools.gce.imagemosaic.RasterLayerResponse$GranuleCollector.collectGranules(RasterLayerResponse.java:461)
... 128 more
10 May 14:03:55 WARN [geoserver.ows] - OWS20SEH: handling
org.geoserver.wcs2_0.exception.WCS20Exception: Failed to read the coverage XYZ
A detected "symptom" in the image mosaic that result in NullPointerException
was seen in the SuggestedSPI property of the properties file. We are seeing
that when the image mosaic is returning NullPointerException, the SuggestedSPI
property is equal to com.sun.media.imageioimpl.plugins.tiff.TIFFImageReaderSpi.
However, when the image mosaic is OK, the SuggestedSPI property is equal to
it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReaderSpi
Our research indicates that this error relates to the loading of the Geotools
GeoTIFF plugin it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReaderSpi. We
noticed that the org.geotools.gce.imagemosaic.ImageMosaicFormatFactory class
attempts to set the GeoTIFF plugin as the "preferred" ImageReaderSpi using
IIORegistry.setOrdering. Then the
org.geotools.gce.imagemosaic.ImageMosaicWalker loads the ImageReaderSpi by
reading the first iterator of ImageIO.getImageReader(), and we suspect that
this does not guarantee proper loading of the Geotools GeoTIFF plugin.
We suggest that passing an instance of
it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReaderSpi as the suggested
ImageReaderSpi when calling Utils.getReaderSpiFromStream
(org.geotools.gce.imagemosaic.ImageMosaicWalker line 194) ensures proper
loading of the Geotools GeoTIFF plugin.
Geoserver version = 2.8.3
Geoserver git revision = 1c8c9ba0f74a465c397d46cf19d3b34b95b2fb6e
Geoserver build date = 22-Mar-2016 21:12
Geotools version = 14.3 (rev 2298d56000bef6f526b521a480316ea544c74571)
Tomcat version = 8.0.30
Java version = 1.8.0.72 64-bit
Edgardo Antuna
Software Developer
NextGen Federal Systems, LLC
HUBZone Certified #44547
235 High St. Suite 220
Morgantown, WV 26505
Mobile 787.955.8867
[email protected] <mailto:[email protected]>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
GeoTools-Devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel