I receive an HTTP 500 internal server error when attempting to PUT a shapefile using REST API. I can manually import the file, publish and preview it. So the file is fine.
GeoServer log:
2016-05-24 12:20:25,921 INFO [catalog.rest] - PUT file, mimetype: application/zip
2016-05-24 12:20:27,140 INFO [catalog.rest] - Auto-configuring datastore: testshapes
2016-05-24 12:20:27,140 ERROR [geoserver.rest] -
java.lang.NullPointerException
at org.geoserver.catalog.rest.DataStoreFileResource.updateParameters(DataStoreFileResource.java:515)
at org.geoserver.catalog.rest.DataStoreFileResource.handlePut(DataStoreFileResource.java:271)
at org.restlet.Finder.handle(Finder.java:298)
at org.geoserver.rest.BeanDelegatingRestlet.handle(BeanDelegatingRestlet.java:38)
at org.restlet.Filter.doHandle(Filter.java:105)
at org.restlet.Filter.handle(Filter.java:134)
at org.restlet.Router.handle(Router.java:444)
Fiddler RAW view of request and response:
PUT http://localhost:8080/geoserver/rest/workspaces/test/datastores/testshapes/file.shp HTTP/1.1
Content-Type: application/zip
Authorization: Basic YWRtaW46Z2Vvc2VydmVy
Host: localhost:8080
Content-Length: 205898
Expect: 100-continue
Connection: Keep-Alive
HTTP/1.1 500 Internal Server Error
Transfer-Encoding: chunked
Server: Jetty(6.1.8)
0
C# code:
public bool UploadShapeFile(string workspace, string newStoreName, byte[] fileContents)
{
byte[] localShapeFile = fileContents;
String sUrl = GEOSERVER_HOST + "workspaces/" + workspace + "/datastores/" + newStoreName + "/file.shp";
WebRequest request = WebRequest.Create(sUrl);
request.ContentType = "application/zip";
request.Method = "PUT";
request.Credentials = new NetworkCredential(GEOSERVER_USER, GEOSERVER_PASSWD);
request.Headers.Add("Authorization", "Basic " +
Convert.ToBase64String(Encoding.ASCII.GetBytes(GEOSERVER_USER + ":" + GEOSERVER_PASSWD)));
Stream requestStream = request.GetRequestStream();
requestStream.Write(localShapeFile, 0, localShapeFile.Length);
requestStream.Close();
WebResponse response = request.GetResponse();
return false;
}
Usage:
var c = new GeoServerClient.Endpoint();
var f =
System.IO.File.ReadAllBytes(@"C:\path\to\file\1-2-2015-34-municipal-shp.zip");
c.UploadShapeFile("test", "testshapes", f);
Answer
I had the same issue, and it was resolved after setting the "Activate HTTP method matching", and checking PUT method.
Access your geoserver web interface ( http://localhost:8070/geoserver/web ), ans then: Authentication --> Filter Chains --> rest --> Check HTTP Method (check), PUT (check) --> hit 'close' and then 'save'
No comments:
Post a Comment