[Geoserver-devel] [JIRA] (GEOS-11054) Cannot invoke "org.geoserver.catalog.MetadataMap.get(String, java.lang.Class)" because the return value of "org.geoserver.catalog.FeatureTypeInfo.getMetadata()" is null when importing Layer via REST API

Andre Zielinski created an issue

GeoServer / BugGEOS-11054

Cannot invoke “org.geoserver.catalog.MetadataMap.get(String, java.lang.Class)” because the return value of “org.geoserver.catalog.FeatureTypeInfo.getMetadata()” is null when importing Layer via REST API

Issue Type:

BugBug

Affects Versions:

2.23.1

Assignee:

Unassigned

Attachments:

V_CHK_ALL_GS_DFS_4326.json

Components:

REST

Created:

05/Jul/23 3:49 PM

Environment:

Windows Server 2019, Apache Tomcat 9.0.75, GeoServer 2.23.1

Priority:

MediumMedium

Reporter:

Andre Zielinski

Dear ladies and gentleman,

When importing the attached layer over the REST API I receive the following error:

2023.07.05 15:43:32 TRACE [geoserver.platform] - Found System environment variable : ‘geoserver.xframe.policy’ to be unset
2023.07.05 15:43:32 DEBUG [geoserver.security] - Checking match of request : ‘Path: /rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes, QueryString: null’; against ‘/web/
2023.07.05 15:43:32 DEBUG [geoserver.security] - Checking match of request : ‘Path: /rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes, QueryString: null’; against '/gwc/rest/web/
2023.07.05 15:43:32 DEBUG [geoserver.security] - Checking match of request : ‘Path: /rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes, QueryString: null’; against ‘/’
2023.07.05 15:43:32 DEBUG [geoserver.security] - Checking match of request : ‘Path: /rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes, QueryString: null’; against ‘/j_spring_security_check’
2023.07.05 15:43:32 DEBUG [geoserver.security] - Checking match of request : ‘Path: /rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes, QueryString: null’; against ‘/j_spring_security_check/’
2023.07.05 15:43:32 DEBUG [geoserver.security] - Checking match of request : ‘Path: /rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com…8106…/featuretypes, QueryString: null’; against ‘/j_spring_security_logout’
2023.07.05 15:43:32 DEBUG [geoserver.security] - Checking match of request : ‘Path: /rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes, QueryString: null’; against ‘/j_spring_security_logout/’
2023.07.05 15:43:32 DEBUG [geoserver.security] - Checking match of request : ‘Path: /rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes, QueryString: null’; against '/rest/
2023.07.05 15:43:32 DEBUG [geoserver.security] - Matched Path: /rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes, QueryString: null with /rest/
2023.07.05 15:43:32 DEBUG [geoserver.security] - AuthenticationCache found an entry for basic, admin:ccb4ecf763a262ab2c211945767c4dfd
2023.07.05 15:43:32 DEBUG [geoserver.security] - Converted URL to lowercase, from: ‘/rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes’; to: ‘/rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes’ and httpMethod= POST
2023.07.05 15:43:32 DEBUG [geoserver.security] - ~~~~~~~~~~ antPath= /** methodList= [GET]
2023.07.05 15:43:32 DEBUG [geoserver.security] - Candidate is: ‘/rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes’; antPath is /; matchedPath=true; matchedMethods=false
2023.07.05 15:43:32 DEBUG [geoserver.security] - ~~~~~~~~~~ antPath= / methodList= [POST, DELETE, PUT]
2023.07.05 15:43:32 DEBUG [geoserver.security] - Candidate is: ‘/rest/workspaces/ws_aerodrome_adq/datastores/adqtemplate@anonymised.com/featuretypes’; antPath is /**; matchedPath=true; matchedMethods=true
2023.07.05 15:43:32 DEBUG [geoserver.security] - returning GROUP_ADMIN,ADMIN,Geoserver_Admin
2023.07.05 15:43:32 DEBUG [sqlserver.jtds] - Failed to find JTDS jar
2023.07.05 15:43:32 DEBUG [org.geoserver] - Thread 568 locking in mode WRITE
2023.07.05 15:43:32 DEBUG [org.geoserver] - Thread 568 got the lock in mode WRITE
2023.07.05 15:43:32 TRACE [geoserver.platform] - Found Property override: ‘GEOSERVER_XSTREAM_WHITELIST’ to be unset
2023.07.05 15:43:32 TRACE [geoserver.platform] - Found Java environment variable : ‘GEOSERVER_XSTREAM_WHITELIST’ to be unset
2023.07.05 15:43:32 TRACE [geoserver.platform] - Found Servlet context parameter : ‘GEOSERVER_XSTREAM_WHITELIST’ to be unset
2023.07.05 15:43:32 TRACE [geoserver.platform] - Found System environment variable : ‘GEOSERVER_XSTREAM_WHITELIST’ to be unset
2023.07.05 15:43:32 DEBUG [geotools.jdbc] - CREATE CONNECTION
2023.07.05 15:43:32 DEBUG [geotools.jdbc] - CLOSE CONNECTION
2023.07.05 15:43:32 ERROR [geoserver.rest] - Cannot invoke “org.geoserver.catalog.MetadataMap.get(String, java.lang.Class)” because the return value of “org.geoserver.catalog.FeatureTypeInfo.getMetadata()” is null
java.lang.NullPointerException: Cannot invoke “org.geoserver.catalog.MetadataMap.get(String, java.lang.Class)” because the return value of “org.geoserver.catalog.FeatureTypeInfo.getMetadata()” is null
at org.geoserver.catalog.impl.FeatureTypeValidator.validate(FeatureTypeValidator.java:40)
at org.geoserver.catalog.impl.CatalogImpl.validate(CatalogImpl.java:515)
at org.geoserver.security.SecureCatalogImpl.validate(SecureCatalogImpl.java:1320)
at org.geoserver.catalog.impl.AbstractFilteredCatalog.validate(AbstractFilteredCatalog.java:633)
at org.geoserver.catalog.impl.AbstractCatalogDecorator.validate(AbstractCatalogDecorator.java:274)
at org.geoserver.rest.catalog.FeatureTypeController.featureTypePost(FeatureTypeController.java:280)
at jdk.internal.reflect.GeneratedMethodAccessor1625.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:328)
at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:158)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:28)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:73)
at org.geoserver.ows.HTTPHeadersCollector.doFilter(HTTPHeadersCollector.java:48)
at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:70)
at org.geoserver.filters.HTTPMethodFilter.doFilter(HTTPMethodFilter.java:36)
at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:70)
at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:194)
at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:70)
at org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:43)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at org.geoserver.security.filter.GeoServerBasicAuthenticationFilter.doFilter(GeoServerBasicAuthenticationFilter.java:81)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1.doFilterInternal(GeoServerSecurityContextPersistenceFilter.java:72)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)
at org.geoserver.security.GeoServerSecurityFilterChainProxy.doFilter(GeoServerSecurityFilterChainProxy.java:142)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.geoserver.filters.XFrameOptionsFilter.doFilter(XFrameOptionsFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:54)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:673)
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:390)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Unknown Source)

I send the Request as POST to the following URL: [https://[HOSTNAME]:8443/geoserver/rest/workspaces/WS_AERODROME_ADQ/datastores/ADQTEMPLATE@anonymised.com/featuretypes|https://gondev.gon.local:8443/geoserver/rest/workspaces/WS_AERODROME_ADQ/datastores/ADQTEMPLATE@anonymised.com/featuretypes]

In version 2.21.4 the request went fine. In 2.23.1 the request fails.

I also tried to send a fresh copy of a layer configuration GeoServer 2.23.1 generated, but receiving the same error. When I try to manually add the layer, the layer is working fine. The resulting .json via REST API looks exactly like the attached one.

Add Comment

Add Comment

Get Jira notifications on your phone! Download the Jira Cloud app for Android or iOS


This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100229-sha1:634ba05)

Atlassian logo