Hi,
we are trying to load a NetCDF through the NetCDF reader extension on our
Geoserver 2.9.0 instance, using the web admin interface.
This unfortunately results in an error:
- The web interface shows: Could not list layers for this store, an error
occurred retrieving them: Failed to create reader from
file:data/WASCAL-WMS/testfolder/WestAfrica_05min2007yearsum.nc and hints null
- Below you'll also find the stack trace from the geoserver log
- The ncdump of the file we try to load
Do you have any hint what could have gone wrong here and what we could do to
fix the situation? Let me know if any other information is required.
I am unfortunately not really familiar with the NetCDF format and therefore not
sure if Geoserver will be able to deal with the provided files. Could it be
that the file is not raster/grid but point based as pointed out in this
previous post:
http://osgeo-org.1560.x6.nabble.com/Adding-NetCDF-datastore-gives-a-runtime-exception-td5290171.html
?
Thanks in advance,
Max
Stack trace:
2017-01-15 22:34:48,410 WARN [netcdf.NetCDFFormat] - Unable to connect
org.geotools.data.DataSourceException: Unable to connect
at
org.geotools.coverage.io.netcdf.NetCDFReader.<init>(NetCDFReader.java:159)
at
org.geotools.coverage.io.netcdf.NetCDFFormat.getReader(NetCDFFormat.java:95)
at
org.geoserver.catalog.ResourcePool.getGridCoverageReader(ResourcePool.java:1441)
at
org.geoserver.catalog.ResourcePool.getGridCoverageReader(ResourcePool.java:1369)
at
org.geoserver.catalog.impl.CoverageStoreInfoImpl.getGridCoverageReader(CoverageStoreInfoImpl.java:59)
at sun.reflect.GeneratedMethodAccessor564.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.geoserver.catalog.impl.ModificationProxy.invoke(ModificationProxy.java:147)
at com.sun.proxy.$Proxy36.getGridCoverageReader(Unknown Source)
at
org.geoserver.web.data.layer.NewLayerPageProvider.getItemsInternal(NewLayerPageProvider.java:88)
at
org.geoserver.web.data.layer.NewLayerPageProvider.getItems(NewLayerPageProvider.java:57)
at
org.geoserver.web.wicket.GeoServerDataProvider.fullSize(GeoServerDataProvider.java:243)
at
org.geoserver.web.wicket.GeoServerTablePanel$PagerDelegate.updateMatched(GeoServerTablePanel.java:583)
at
org.geoserver.web.wicket.GeoServerTablePanel$PagerDelegate.<init>(GeoServerTablePanel.java:576)
at
org.geoserver.web.wicket.GeoServerTablePanel.<init>(GeoServerTablePanel.java:176)
at
org.geoserver.web.wicket.GeoServerTablePanel.<init>(GeoServerTablePanel.java:97)
at
org.geoserver.web.data.layer.NewLayerPage$1.<init>(NewLayerPage.java:105)
at
org.geoserver.web.data.layer.NewLayerPage.<init>(NewLayerPage.java:105)
at
org.geoserver.web.data.store.CoverageStoreNewPage.onSuccessfulSave(CoverageStoreNewPage.java:78)
at
org.geoserver.web.data.store.CoverageStoreNewPage.onSave(CoverageStoreNewPage.java:69)
at
org.geoserver.web.data.store.AbstractCoverageStorePage$1.onSubmit(AbstractCoverageStorePage.java:116)
at
org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink$1.onSubmit(AjaxSubmitLink.java:110)
at
org.apache.wicket.ajax.form.AjaxFormSubmitBehavior$AjaxFormSubmitter.onSubmit(AjaxFormSubmitBehavior.java:215)
at
org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1307)
at org.apache.wicket.markup.html.form.Form.process(Form.java:974)
at
org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:795)
at
org.apache.wicket.ajax.form.AjaxFormSubmitBehavior.onEvent(AjaxFormSubmitBehavior.java:171)
at
org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:155)
at
org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:588)
at sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
at
org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
at
org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:248)
at
org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:234)
at
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:865)
at
org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
at
org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:265)
at
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:222)
at
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:293)
at
org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:261)
at
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203)
at
org.apache.wicket.protocol.http.WicketServlet.doPost(WicketServlet.java:159)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at
org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:158)
at
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:147)
at
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:50)
at
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968)
at
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at
org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:28)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:75)
at
org.geoserver.wms.animate.AnimatorFilter.doFilter(AnimatorFilter.java:71)
at
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:71)
at
org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:46)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at
org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:50)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316)
at
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
at
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
at
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
at
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
at
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
at
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at
org.geoserver.security.filter.GeoServerAnonymousAuthenticationFilter.doFilter(GeoServerAnonymousAuthenticationFilter.java:54)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
at
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205)
at
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
at
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at
org.geoserver.security.filter.GeoServerUserNamePasswordAuthenticationFilter.doFilter(GeoServerUserNamePasswordAuthenticationFilter.java:116)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
at
org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:157)
at
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
at
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
at
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)
at
org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1.doFilter(GeoServerSecurityContextPersistenceFilter.java:53)
at
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
at
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)
at
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
at
org.geoserver.security.GeoServerSecurityFilterChainProxy.doFilter(GeoServerSecurityFilterChainProxy.java:152)
at
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:87)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:42)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at
org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:48)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at
org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:44)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.geotools.data.DataSourceException: java.io.IOException:
java.lang.NoClassDefFoundError: Could not initialize class
org.geotools.coverage.io.catalog.DataStoreConfiguration
at
org.geotools.coverage.io.netcdf.NetCDFAccess.<init>(NetCDFAccess.java:126)
at
org.geotools.coverage.io.netcdf.NetCDFDriver.connect(NetCDFDriver.java:92)
at
org.geotools.coverage.io.impl.DefaultFileDriver.process(DefaultFileDriver.java:216)
at
org.geotools.coverage.io.netcdf.NetCDFReader.<init>(NetCDFReader.java:157)
... 138 more
Caused by: java.lang.RuntimeException: java.io.IOException:
java.lang.NoClassDefFoundError: Could not initialize class
org.geotools.coverage.io.catalog.DataStoreConfiguration
at
org.geotools.imageio.netcdf.NetCDFImageReader.setInput(NetCDFImageReader.java:267)
at javax.imageio.ImageReader.setInput(ImageReader.java:380)
at
org.geotools.coverage.io.netcdf.NetCDFAccess.<init>(NetCDFAccess.java:115)
... 141 more
Caused by: java.io.IOException: java.lang.NoClassDefFoundError: Could not
initialize class org.geotools.coverage.io.catalog.DataStoreConfiguration
at
org.geotools.imageio.netcdf.NetCDFImageReader.initIndex(NetCDFImageReader.java:368)
at
org.geotools.imageio.netcdf.NetCDFImageReader.init(NetCDFImageReader.java:475)
at
org.geotools.imageio.netcdf.NetCDFImageReader.setInput(NetCDFImageReader.java:265)
... 143 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class
org.geotools.coverage.io.catalog.DataStoreConfiguration
at
org.geotools.imageio.netcdf.AncillaryFileManager.getDatastoreConfiguration(AncillaryFileManager.java:825)
at
org.geotools.imageio.netcdf.NetCDFImageReader.initIndex(NetCDFImageReader.java:284)
... 145 more
Ncdump:
netcdf C:/Users/Max/Desktop/temp/NetCDF/WestAfrica_05min2007yearsum.nc {
dimensions:
lon = 503;
lat = 271;
time = UNLIMITED; // (1 currently)
variables:
double lon(lon=503);
:standard_name = "longitude";
:long_name = "longitude";
:units = "degrees_east";
:axis = "X";
double lat(lat=271);
:standard_name = "latitude";
:long_name = "latitude";
:units = "degrees_north";
:axis = "Y";
double time(time=1);
:standard_name = "time";
:long_name = "Time";
:units = "days since 1900-01-01 00:00:00";
:calendar = "standard";
:_ChunkSizes = 1; // int
float irrigationGross(time=1, lat=271, lon=503);
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:long_name = "Gross Irrigation";
:units = "mm/day";
:_ChunkSizes = 1, 271, 503; // int
float livestockDemand(time=1, lat=271, lon=503);
:long_name = "Livestock Demand";
:units = "m3/pixel/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float riverEvap(time=1, lat=271, lon=503);
:long_name = "Evaporation from rivers & reservoirs";
:units = "m3/pixel/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float irrigationGrwt(time=1, lat=271, lon=503);
:long_name = "Gross Irrigation from ground water";
:units = "mm/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float domesticDemand(time=1, lat=271, lon=503);
:long_name = "Domestic Demand";
:units = "m3/pixel/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float precip(time=1, lat=271, lon=503);
:long_name = "Precipitatiion";
:units = "mm/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float discharge(time=1, lat=271, lon=503);
:long_name = "Discharge";
:units = "m3/sec";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:routing_method = "LRR";
:_ChunkSizes = 1, 271, 503; // int
float irrigationFlow(time=1, lat=271, lon=503);
:long_name = "Gross Irrigation from river storage";
:units = "mm/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float resStorage(time=1, lat=271, lon=503);
:long_name = "Stream and Reservoir Storage";
:units = "m3/pixel";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float pet(time=1, lat=271, lon=503);
:long_name = "Potential Evapotranspiration";
:units = "mm/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float infiltration(time=1, lat=271, lon=503);
:long_name = "Infiltration into GW";
:units = "mm/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float evapotrans(time=1, lat=271, lon=503);
:long_name = "Evapotranspiration";
:units = "mm/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float irrigationExtra(time=1, lat=271, lon=503);
:long_name = "Gross Irrigation from Extra water";
:units = "mm/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float runoff(time=1, lat=271, lon=503);
:long_name = "Runoff";
:units = "mm/day";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
float airT(time=1, lat=271, lon=503);
:long_name = "Temperature";
:units = "deg C";
:_FillValue = -9999.0f; // float
:missing_value = -9999.0f; // float
:_ChunkSizes = 1, 271, 503; // int
// global attributes:
:CDI = "Climate Data Interface version 1.6.5rc4
(http://code.zmaw.de/projects/cdi)";
:history = "Tue Nov 11 08:39:18 2014: cdo yearsum
/raid5/userdata/dwisser/output/WestAfrica_05min2007.nc
/raid5/userdata/dwisser/output/annual/WestAfrica_05min2007yearsum.nc\nCreated
on 2014-11-10 by Dominik Wisser ([email protected])";
:source = "Unreferenced Data";
:institution = "Water Systems Analysis Group (WSAG), the University of New
Hampshire (UNH)";
:Conventions = "CF-1.0";
:FilePath = "/raid5/userdata/dwisser/output/WestAfrica_05min2007.nc";
:NetCDF_version = "netCDF.4.21";
:Temporal_Res. = "Daily";
:references = "http://www.wsag.unh.edu";
:projection = "epsg:4326";
:title = "PDL/WBM data";
:CDO = "Climate Data Operators version 1.6.5rc4
(http://code.zmaw.de/projects/cdo)";
}
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
Geoserver-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-users