Hi all

GeoServer version: 2.19.2
Database type: Oracle

When clicking a point on a WMS that delivers a complex feature data standard, 
if the app-schema mapping file contains a jdbcMultipleValue mapping, the 
application throws an exception.

The GetFeatureInfo request:

http://localhost:8080/er/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&QUERY_LAYERS=er%3AMineralOccurrence&STYLES&LAYERS=er%3AMineralOccurrence&exceptions=application%2Fvnd.ogc.se_inimage&INFO_FORMAT=text%2Fhtml&FEATURE_COUNT=50&X=50&Y=50&SRS=EPSG%3A4283&WIDTH=101&HEIGHT=101&BBOX=116.85058593750001%2C-32.6953125%2C125.72753906250001%2C-23.818359375

The exception:


2021-11-22 09:55:05,661 ERROR [org.geoserver.ows] -
org.geoserver.platform.ServiceException: Failed to run GetFeatureInfo on layer 
er:MineralOccurrence
   at org.geoserver.wms.GetFeatureInfo.execute(GetFeatureInfo.java:87)
   at org.geoserver.wms.GetFeatureInfo.run(GetFeatureInfo.java:38)
   at 
org.geoserver.wms.DefaultWebMapService.getFeatureInfo(DefaultWebMapService.java:260)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   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.$Proxy114.getFeatureInfo(Unknown Source)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   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:876)
   at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:265)
   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:1040)
   at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
   at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
   at 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
   at 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   at 
org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:26)
   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   at 
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:69)
   at org.geoserver.wms.animate.AnimatorFilter.doFilter(AnimatorFilter.java:70)
   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:193)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   at 
org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:37)
   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   at 
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
   at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   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:119)
   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:358)
   at 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:101)
   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:47)
   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   at 
org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:46)
   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   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:193)
   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
   at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
   at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
   at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
   at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
   at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
   at 
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
   at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
   at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
   at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
   at 
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
   at 
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853)
   at 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587)
   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:748)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Error 
applying mapping with targetAttribute er:form
   at 
org.geotools.data.complex.AbstractMappingFeatureIterator.next(AbstractMappingFeatureIterator.java:421)
   at 
org.geoserver.wms.featureinfo.FeatureCollectionDecorator.size(FeatureCollectionDecorator.java:111)
   at org.geoserver.wms.GetFeatureInfo.addToResults(GetFeatureInfo.java:126)
   at org.geoserver.wms.GetFeatureInfo.execute(GetFeatureInfo.java:77)
   ... 115 more
Caused by: java.lang.RuntimeException: Error applying mapping with 
targetAttribute er:form
   at 
org.geotools.data.complex.DataAccessMappingFeatureIterator.computeNext(DataAccessMappingFeatureIterator.java:1488)
   at 
org.geotools.data.complex.AbstractMappingFeatureIterator.next(AbstractMappingFeatureIterator.java:418)
   ... 118 more
Caused by: java.io.IOException
   at 
org.geotools.appschema.jdbc.JoiningJDBCFeatureSource.getJoiningReaderInternal(JoiningJDBCFeatureSource.java:1373)
   at 
org.geotools.data.complex.DataAccessMappingFeatureIterator.extractMultipleValues(DataAccessMappingFeatureIterator.java:988)
   at 
org.geotools.data.complex.DataAccessMappingFeatureIterator.setAttributeValue(DataAccessMappingFeatureIterator.java:649)
   at 
org.geotools.data.complex.DataAccessMappingFeatureIterator.computeNext(DataAccessMappingFeatureIterator.java:1437)
   ... 119 more
Caused by: java.lang.RuntimeException: Subclasses must implement this method in 
order to handle geometries
   at 
org.geotools.data.jdbc.FilterToSQL.visitLiteralGeometry(FilterToSQL.java:1724)
   at org.geotools.data.jdbc.FilterToSQL.visit(FilterToSQL.java:1601)
   at org.geotools.jdbc.PreparedFilterToSQL.visit(PreparedFilterToSQL.java:80)
   at 
org.geotools.filter.LiteralExpressionImpl.accept(LiteralExpressionImpl.java:242)
   at 
org.geotools.data.oracle.OracleFilterToSQL.doSDORelate(OracleFilterToSQL.java:514)
   at 
org.geotools.data.oracle.OracleFilterToSQL.visitBinarySpatialOperator(OracleFilterToSQL.java:415)
   at 
org.geotools.data.oracle.OracleFilterToSQL.visitBinarySpatialOperator(OracleFilterToSQL.java:390)
   at 
org.geotools.data.jdbc.FilterToSQL.visitBinarySpatialOperator(FilterToSQL.java:1262)
   at org.geotools.data.jdbc.FilterToSQL.visit(FilterToSQL.java:1206)
   at org.geotools.filter.spatial.IntersectsImpl.accept(IntersectsImpl.java:56)
   at org.geotools.data.jdbc.FilterToSQL.encode(FilterToSQL.java:282)
   at org.geotools.data.jdbc.FilterToSQL.encodeToString(FilterToSQL.java:308)
   at 
org.geotools.appschema.jdbc.JoiningJDBCFeatureSource.processSortByKey(JoiningJDBCFeatureSource.java:927)
   at 
org.geotools.appschema.jdbc.JoiningJDBCFeatureSource.buildFiterBasedOnSortBy(JoiningJDBCFeatureSource.java:850)
   at 
org.geotools.appschema.jdbc.JoiningJDBCFeatureSource.buildFilter(JoiningJDBCFeatureSource.java:782)
   at 
org.geotools.appschema.jdbc.JoiningJDBCFeatureSource.selectSQL(JoiningJDBCFeatureSource.java:641)
   at 
org.geotools.appschema.jdbc.JoiningJDBCFeatureSource.selectSQL(JoiningJDBCFeatureSource.java:388)
   at 
org.geotools.appschema.jdbc.JoiningJDBCFeatureSource.getJoiningReaderInternal(JoiningJDBCFeatureSource.java:1321)
   ... 122 more

The mapping

<AttributeMapping>
    <targetAttribute>er:form</targetAttribute>

    <jdbcMultipleValue>
        <sourceColumn>ENO</sourceColumn>
        <targetTable>OZMIN_ER_MINOCC_FORMS</targetTable>
        <targetColumn>ENO</targetColumn>
    </jdbcMultipleValue>
    <ClientProperty>
        <name>xlink:href</name>
        <value>FORM_HREF</value>
    </ClientProperty>
    <ClientProperty>
        <name>xlink:title</name>
        <value>FORM_TITLE</value>
    </ClientProperty>
</AttributeMapping>

I tested it by removing the mapping, which avoids the exception.

Thanks


Michael Sexton


Data Analyst  |  MEGIS
Minerals Energy Groundwater  |  GEOSCIENCE AUSTRALIA
____________________________________________________________
Phone:  +61 2 6249 9262    Fax:  +61 2 6249 9999
Email:  michael.sex...@ga.gov.au<mailto:michael.sex...@ga.gov.au>    Web:  
www.ga.gov.au<http://www.ga.gov.au/>
Cnr Jerrabomberra Avenue and Hindmarsh Drive Symonston ACT 2609
GPO Box 378 Canberra ACT 2601 Australia
Applying geoscience to Australia's most important challenges


Geoscience Australia Disclaimer: This e-mail (and files transmitted with it) is 
intended only for the person or entity to which it is addressed. If you are not 
the intended recipient, then you have received this e-mail by mistake and any 
use, dissemination, forwarding, printing or copying of this e-mail and its file 
attachments is prohibited. The security of emails transmitted cannot be 
guaranteed; by forwarding or replying to this email, you acknowledge and accept 
these risks.
_______________________________________________
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

Reply via email to