I have a folder containing shape files for a few dozen layers.
On my development server, I created a Directory of Spatial files store in my workspace, then published each one, one at a time, with the UI. Create the layer, select the store, click publish next to the next shapefile name, click calculate bounds, click calculate lat/long bounds, click Publish tab, set default style, Submit. Repeat for each layer.
Now I'm setting up a production environment. I've installed Geoserver, and would like to import all these layers. I've never used the REST API's, but am quickly coming up to speed. I've used CURL / REST to create my workspace. Now I'm trying to create my datastore. I haven't found an example to setup a "Directory of spatial files" datastore. I queried my existing store, so I can see the XML (or JSON) to post, but I get nothing as a response (I use -o option of CURL, but the output file is empty).
Here is the CURL command I use:
curl -u admin:geoserver -v -XPOST -H 'Content-type:text/xml' -T My_datastore.xml -o CreateMyDataStore.out http://localhost:8080/geoserver/rest/workspaces/MyWorkspace/datastores
The My_datastore.xml file looks like this:
<dataStore> <name>MyDatastore</name> <type>Directory of spatial files (shapefiles)</type> <connectionParameters> <entry key="charset">ISO-8859-1</entry> <entry key="filetype">shapefile</entry> <entry key="create spatial index">true</entry> <entry key="memory mapped buffer">false</entry> <entry key="timezone">America/New_York</entry> <entry key="enable spatial index">true</entry> <entry key="namespace">http://www.opengeospatial.net/cite</entry> <entry key="cache and reuse memory maps">true</entry> <entry key="url">file://C:\Geo Server\MyFolder</entry> <entry key="fstype">shape</entry> </connectionParameters> </dataStore>
The file directory "C:\Geo Server\MyFolder" is the same name used to create the datastore on the development machine...
The output I get at the command prompt when I run the CURL command is as follows:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) port 8080 (#0) * Server auth using Basic with user 'admin' > POST /geoserver/rest/workspaces/MyWorkspace/datastores HTTP/1.1 > Host: localhost:8080 > Authorization: Basic YWRtaW46Z2Vvc2VydmVy > User-Agent: curl/7.61.1 > Accept: */* > 'Content-type:application/xml' > Content-Length: 614 > Expect: 100-continue > < HTTP/1.1 100 } [614 bytes data] * We are completely uploaded and fine < HTTP/1.1 415 < X-Frame-Options: SAMEORIGIN < Access-Control-Allow-Origin: * < Accept: application/json, text/json, application/xml, text/xml < Content-Length: 0 < Date: Thu, 25 Oct 2018 03:25:30 GMT < Connection: close < 100 614 0 0 100 614 0 1710 --:--:-- --:--:-- --:--:-- 1710 * Closing connection 0
I see the Error 415, but it doesn't make sense. I've specified "text/xml" and it is one of the accepted content types.
Anybody see anything subtle or glaringly obvious that I missed? Can I not create this type of store through the REST API? I'd love to be able to automate this so I can fully automate the install/configuration of new production Geoservers (as they run locally at the customer site).