Hi Emma, thanks for the report... yes, I can reproduce. An additional condition is that the raster layer is not the first in the list, otherwise it's working fine. That's probably why it went un-noticed, the more common case for a basemap is to have a raster as the first layer, and vectors for overlays.
I've reproduced using the usual "spearfish" demo layer group, by moving the DEM at the top of the group, and changing the interpolation method for it. Could you please open a bug report in our tracker? https://osgeo-org.atlassian.net/jira/dashboards/last-visited Cheers Andrea On Sat, May 20, 2023 at 7:03 PM Emma Flukes <emma.flu...@utas.edu.au> wrote: > 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 > > > Geoserver-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/geoserver-users > -- Regards, Andrea Aime == GeoServer Professional Services from the experts! Visit http://bit.ly/gs-services-us for more information. == Ing. Andrea Aime @geowolf Technical Lead GeoSolutions Group phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 8844549 https://www.geosolutionsgroup.com/ http://twitter.com/geosolutions_it ------------------------------------------------------- Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si precisa che ogni circostanza inerente alla presente email (il suo contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le sarei comunque grato se potesse darmene notizia. This email is intended only for the person or entity to which it is addressed and may contain information that is privileged, confidential or otherwise protected from disclosure. We remind that - as provided by European Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or the information herein by anyone other than the intended recipient is prohibited. If you have received this email by mistake, please notify us immediately by telephone or e-mail
_______________________________________________ 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 Geoserver-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geoserver-users