The default interpolation method for raster layers can be set at the level of 
the workspace, or within individual layer definitions.

There seems to be a bug where GetFeatureInfo requests of multiple layers (>1) 
fail when at least one of the layers is a raster with a layer-level default 
interpolation method set to anything other than 'use service default', and the 
layer is queryable. This is consistent in Geoserver versions 2.15.0 and 2.21.0 
(these are the only ones I have at my disposal for testing).

Steps to repeat:
Set a default interpolation method for a single raster layer to anything other 
than 'use service default'. It doesn't matter if the layer-level interpolation 
method is set to the same as the service default - just any value that is not 
'use service default'.
Ensure the raster layer is queryable under layer settings.
Make a GetFeatureInfo request from multiple layers, including the raster layer 
you've just configured. This can be as a layer group, or a series of individual 
layers.
The CRS of the requested layers, or the CRS of the request, or the layer types 
(all raster, mix raster + vector, image mosaic etc), doesn't matter.

This is the error returned

2022-08-02 15:45:24,944 ERROR [geoserver.ows] -
org.geoserver.platform.ServiceException: Failed to run GetFeatureInfo on layer 
seamap:Key_Ecological_Features
      at org.geoserver.wms.GetFeatureInfo.execute(GetFeatureInfo.java:88)
      at org.geoserver.wms.GetFeatureInfo.run(GetFeatureInfo.java:38)
      at 
org.geoserver.wms.DefaultWebMapService.getFeatureInfo(DefaultWebMapService.java:265)
      at sun.reflect.GeneratedMethodAccessor559.invoke(Unknown Source)
      at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
      at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
      at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
      at 
org.geoserver.kml.WebMapServiceKmlInterceptor.invoke(WebMapServiceKmlInterceptor.java:38)
      at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
      at 
org.geoserver.ows.util.RequestObjectLogger.invoke(RequestObjectLogger.java:50)
      at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
      at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
      at com.sun.proxy.$Proxy64.getFeatureInfo(Unknown Source)
      at sun.reflect.GeneratedMethodAccessor550.invoke(Unknown Source)
      at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.geoserver.ows.Dispatcher.execute(Dispatcher.java:877)
      at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:264)
      at 
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
      at 
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
      at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
      at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
      at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)
      at 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:890)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
      at 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at 
org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:26)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at 
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:69)
      at 
org.geoserver.flow.controller.IpBlacklistFilter.doFilter(IpBlacklistFilter.java:89)
      at 
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:66)
      at 
org.geoserver.flow.ControlFlowCallback.doFilter(ControlFlowCallback.java:260)
      at 
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:66)
      at 
org.geoserver.wms.animate.AnimatorFilter.doFilter(AnimatorFilter.java:73)
      at 
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:66)
      at 
org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:41)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at 
org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:37)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:70)
      at 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
      at 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:74)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:91)
      at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:70)
      at 
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:74)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:91)
      at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
      at 
org.geoserver.security.filter.GeoServerAnonymousAuthenticationFilter.doFilter(GeoServerAnonymousAuthenticationFilter.java:51)
      at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:70)
      at 
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:158)
      at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:74)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:91)
      at 
org.geoserver.security.filter.GeoServerBasicAuthenticationFilter.doFilter(GeoServerBasicAuthenticationFilter.java:81)
      at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:70)
      at 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
      at 
org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1.doFilter(GeoServerSecurityContextPersistenceFilter.java:52)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:74)
      at 
org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:91)
      at 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
      at 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
      at 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
      at 
org.geoserver.security.GeoServerSecurityFilterChainProxy.doFilter(GeoServerSecurityFilterChainProxy.java:142)
      at 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
      at 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:86)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at 
org.geoserver.filters.XFrameOptionsFilter.doFilter(XFrameOptionsFilter.java:79)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:42)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at 
org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:46)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:42)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at 
org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:352)
      at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:171)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at 
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
      at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)
      at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163)
      at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
      at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
      at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
      at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
      at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
      at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
      at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
      at 
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
      at 
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
      at 
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
      at 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723)
      at 
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
      at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at 
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      at java.lang.Thread.run(Thread.java:750)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
      at 
java.util.concurrent.CopyOnWriteArrayList.get(CopyOnWriteArrayList.java:388)
      at 
java.util.concurrent.CopyOnWriteArrayList.get(CopyOnWriteArrayList.java:397)
      at 
org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:521)
      at 
org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:265)
      at 
org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:132)
      at 
org.geoserver.wms.featureinfo.VectorRenderingLayerIdentifier.identify(VectorRenderingLayerIdentifier.java:218)
      at org.geoserver.wms.GetFeatureInfo.execute(GetFeatureInfo.java:73)
      ... 122 more
2022-08-02 15:45:24,944 TRACE [servlet.DispatcherServlet] - No view rendering, 
null ModelAndView returned.
2022-08-02 15:45:24,944 DEBUG [servlet.DispatcherServlet] - Completed 500 
INTERNAL_SERVER_ERROR, headers={masked}
2022-08-02 15:45:24,944 DEBUG [access.ExceptionTranslationFilter] - Chain 
processed normally
2022-08-02 15:45:24,944 DEBUG 
[filter.GeoServerSecurityContextPersistenceFilter$1] - SecurityContextHolder 
now cleared, as request processing completed
2022-08-02 15:45:24,944 INFO [geoserver.filters] - 10.240.132.169 "GET 
/geoserver/wms?REQUEST=GetFeatureInfo&TRANSPARENT=true&SERVICE=WMS&STYLES=&BBOX=2095133.9618053886,-2382877.1528354827,2365073.2264149915,-2194775.0663344897,EPSG:3112&WIDTH=101&FORMAT=image/png&SRS=EPSG:3112&CRS=EPSG:3112&INFO_FORMAT=text/html&QUERY_LAYERS=seamap:Key_Ecological_Features,seamap:bathymetry_AMP_grp&Y=50&FEATURE_COUNT=1000&HEIGHT=101&LAYERS=seamap:Key_Ecological_Features,seamap:bathymetry_AMP_grp&X=50&VERSION=1.1.1"
 took 9ms


Making GetFeatureInfo requests of the layers singly is no issue. The request 
succeeds as expected when the default interpolation method of the raster layer 
is changed back to 'use service default'.

I have workspaces containing both categorical and continuous rasters. Ideally 
I'd use nearest neighbour interpolation for the categorical rasters and 
bilinear/bicubic for continuous ones. Instead I have to pick a single 
interpolation method to apply for the whole workspace.


This email is confidential, and is for the intended recipient only. Access, 
disclosure, copying, distribution, or reliance on any of it by anyone outside 
the intended recipient organisation is prohibited and may be a criminal 
offence. Please delete if obtained in error and email confirmation to the 
sender. The views expressed in this email are not necessarily the views of the 
University of Tasmania, unless clearly intended otherwise.
_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this 
list:
- Earning your support instead of buying it, but Ian Turton: 
http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: 
http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: 
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to