Hi,
I am running Geoserver 2.17.1 on Windows 10 with OpenJDK 11 and exploring the
REST API for the first time.
Following
https://docs.geoserver.org/stable/en/user/rest/stores.html#adding-an-existing-shapefile
I am trying to add a data store for files already on the server. A
GEOSERVER_DATA_DIR environment variable is defined, pointing to
d:\geoserver_data_dir.
This works
curl -v -u admin:geoserver -XPUT -d
"file:d:\geoserver_data_dir\data\russell\groundwater_divide.shp"
"http://localhost:8080/geoserver/rest/workspaces/russell/datastores/test/external.shp"
The below, and any variation on it that I can think of (file://, file:///,
backslashes in the path, running in bash) does not work.
curl -v -u admin:geoserver -XPUT -d "file:data/russell/groundwater_divide.shp"
"http://localhost:8080/geoserver/rest/workspaces/russell/datastores/bar/external.shp"
When I inspect shapefile stores in the UI the locations look like the example
"file:data/shapefiles/states.shp" or similar.
The Geoserver log shows
2020-07-30 09:04:11,705 ERROR [geoserver.rest] - Failed to locate the input
file file:data/russell/groundwater_divide.shp
org.geoserver.rest.RestException 400 BAD_REQUEST: Failed to locate the input
file file:data/russell/groundwater_divide.shp
I attach the curl output and also the logging with geoserver developer details.
Any advice is appreciated. I have the same problem with Tomcat, or the platform
independent binary.
Thanks,
Russell.
2020-07-30 09:06:20,905 DEBUG [org.geoserver.ows] - Could not find a layer
group named web
2020-07-30 09:06:20,905 DEBUG [org.geoserver.ows] - Could not find a layer
group named web
2020-07-30 09:06:20,905 DEBUG [org.geoserver.ows] - Could not find a layer
group named web
2020-07-30 09:06:20,905 DEBUG [org.geoserver.ows] - Could not find a layer
group named web
2020-07-30 09:06:20,920 DEBUG [org.geoserver.filters] - Compressing output for
mimetype: text/html;charset=UTF-8
2020-07-30 09:06:20,920 DEBUG
[org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1] -
SecurityContextHolder now cleared, as request processing completed
2020-07-30 09:06:25,762 TRACE [org.geoserver.platform.resource] - polling
contents of D:\geoserver_data_dir\gwc-layers
2020-07-30 09:06:25,762 TRACE [org.geoserver.platform.resource] - delta
computed in 1ms for D:\geoserver_data_dir\gwc-layers
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking
match of request : 'Path: /rest/workspaces/russell/datastores/bar/external.shp,
QueryString: null'; against '/web/**'
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking
match of request : 'Path: /rest/workspaces/russell/datastores/bar/external.shp,
QueryString: null'; against '/gwc/rest/web/**'
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking
match of request : 'Path: /rest/workspaces/russell/datastores/bar/external.shp,
QueryString: null'; against '/'
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking
match of request : 'Path: /rest/workspaces/russell/datastores/bar/external.shp,
QueryString: null'; against '/j_spring_security_check'
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking
match of request : 'Path: /rest/workspaces/russell/datastores/bar/external.shp,
QueryString: null'; against '/j_spring_security_check/'
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking
match of request : 'Path: /rest/workspaces/russell/datastores/bar/external.shp,
QueryString: null'; against '/j_spring_security_logout'
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking
match of request : 'Path: /rest/workspaces/russell/datastores/bar/external.shp,
QueryString: null'; against '/j_spring_security_logout/'
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking
match of request : 'Path: /rest/workspaces/russell/datastores/bar/external.shp,
QueryString: null'; against '/rest/**'
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Matched
Path: /rest/workspaces/russell/datastores/bar/external.shp, QueryString: null
with /rest/**
2020-07-30 09:06:27,716 DEBUG [org.geoserver.security] - AuthenticationCache
found an entry for basic, admin:bfa584f5598433a3c1fe16b00acc9c43
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.RESTfulPathBasedFilterInvocationDefinitionMap] -
Converted URL to lowercase, from:
'/rest/workspaces/russell/datastores/bar/external.shp'; to:
'/rest/workspaces/russell/datastores/bar/external.shp' and httpMethod= PUT
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.RESTfulPathBasedFilterInvocationDefinitionMap] -
~~~~~~~~~~ antPath= /** methodList= [GET]
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.RESTfulPathBasedFilterInvocationDefinitionMap] -
Candidate is: '/rest/workspaces/russell/datastores/bar/external.shp'; antPath
is /**; matchedPath=true; matchedMethods=false
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.RESTfulPathBasedFilterInvocationDefinitionMap] -
~~~~~~~~~~ antPath= /** methodList= [POST, DELETE, PUT]
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.RESTfulPathBasedFilterInvocationDefinitionMap] -
Candidate is: '/rest/workspaces/russell/datastores/bar/external.shp'; antPath
is /**; matchedPath=true; matchedMethods=true
2020-07-30 09:06:27,716 DEBUG
[org.geoserver.security.RESTfulPathBasedFilterInvocationDefinitionMap] -
returning ADMIN
2020-07-30 09:06:27,732 DEBUG [org.geoserver] - Thread 97 locking in mode WRITE
2020-07-30 09:06:27,732 DEBUG [org.geoserver] - Thread 97 got the lock in mode
WRITE
2020-07-30 09:06:27,732 ERROR [org.geoserver.rest] - Failed to locate the input
file file:data/russell/groundwater_divide.shp
org.geoserver.rest.RestException 400 BAD_REQUEST: Failed to locate the input
file file:data/russell/groundwater_divide.shp
at
org.geoserver.rest.util.RESTUtils.handleEXTERNALUpload(RESTUtils.java:207)
at
org.geoserver.rest.catalog.AbstractStoreUploadController.handleFileUpload(AbstractStoreUploadController.java:79)
at
org.geoserver.rest.catalog.DataStoreFileController.doFileUpload(DataStoreFileController.java:577)
at
org.geoserver.rest.catalog.DataStoreFileController.dataStorePut(DataStoreFileController.java:263)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
at
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:893)
at
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:798)
at
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
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.doPut(FrameworkServlet.java:920)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:663)
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:52)
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.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:215)
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.XFrameOptionsFilter.doFilter(XFrameOptionsFilter.java:77)
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: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.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.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:42)
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:364)
at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:170)
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.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615)
at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)
2020-07-30 09:06:27,732 DEBUG [org.geoserver] - Thread 97 locking in mode WRITE
2020-07-30 09:06:27,732 DEBUG [org.geoserver] - Thread 97 releasing the lock in
mode WRITE
2020-07-30 09:06:27,732 DEBUG
[org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1] -
SecurityContextHolder now cleared, as request processing completed
2020-07-30 09:06:30,765 TRACE [org.geoserver.platform.resource] - polling
contents of D:\geoserver_data_dir\gwc-layers
2020-07-30 09:06:30,765 TRACE [org.geoserver.platform.resource] - delta
computed in 1ms for D:\geoserver_data_dir\gwc-layers
2020-07-30 09:06:31,906 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking
match of request : 'Path:
/web/wicket/bookmarkable/org.geoserver.web.admin.logpage, QueryString:
filter=false'; against '/web/**'
2020-07-30 09:06:31,906 DEBUG
[org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Matched
Path: /web/wicket/bookmarkable/org.geoserver.web.admin.logpage, QueryString:
filter=false with /web/**
2020-07-30 09:06:31,921 DEBUG [org.geoserver.ows] - Could not find a layer
group named web
2020-07-30 09:06:31,921 DEBUG [org.geoserver.ows] - Could not find a layer
group named web
2020-07-30 09:06:31,921 DEBUG [org.geoserver.ows] - Could not find a layer
group named web
2020-07-30 09:06:31,921 DEBUG [org.geoserver.ows] - Could not find a layer
group named web
2020-07-30 09:06:31,921 DEBUG [org.geoserver] - Thread 99 locking in mode READ
2020-07-30 09:06:31,921 DEBUG [org.geoserver] - Thread 99 got the lock in mode
READ
* Trying ::1:8080...
* Connected to localhost (::1) port 8080 (#0)
* Server auth using Basic with user 'admin'
> PUT /geoserver/rest/workspaces/russell/datastores/bar/external.shp HTTP/1.1
> Host: localhost:8080
> Authorization: Basic YWRtaW46Z2Vvc2VydmVy
> User-Agent: curl/7.71.1
> Accept: */*
> Content-Length: 40
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 40 out of 40 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 400
< Access-Control-Allow-Origin: *
< X-Frame-Options: SAMEORIGIN
< Content-Type: text/html;charset=utf-8
< Content-Language: en
< Content-Length: 864
< Date: Wed, 29 Jul 2020 23:04:11 GMT
< Connection: close
<
<!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad
Request</title><style type="text/css">body
{font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b
{color:white;background-color:#525D76;} h1 {font-size:22px;} h2
{font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;}
.line
{height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP
Status 400 – Bad Request</h1><hr class="line" /><p><b>Type</b> Status
Report</p><p><b>Message</b> Failed to locate the input file
file:data/russell/groundwater_divide.shp</p><p><b>Description</b> The
server cannot or will not process the request due to something that is
perceived to be a client error (e.g., malformed request syntax, invalid request
message framing, or deceptive request routing).</p><hr class="line"
/><h3>Apache Tomcat/8.5.53</h3></body></html>* Closing connection 0
_______________________________________________
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