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

Reply via email to