Geoserver Rest API更新工作区名称

时间:2017-02-18 03:29:04

标签: php rest curl geoserver

我正在尝试使用put方法通过geoserver rest api更新工作区名称。

我得到"无法更改工作区的名称。"错误。

这是我的代码。

lang_key

2 个答案:

答案 0 :(得分:1)

这不是允许的操作(如manual中所述)。任何更改工作空间名称的PUT都会返回403错误。

您所能做的就是创建一个新工作区,复制旧工作区的内容然后将其删除。

答案 1 :(得分:0)

根据geoserver REST API文档(link),您只需放置一个在其正文中具有xml字符串数据的请求即可简单地编辑工作区名称(ws_name)。

在这里,我举了一个例子。由于使用Express作为我的应用服务器,因此我已经使用javascript实现了一个请求,但是可以将其更改为您喜欢的语法。

const options = {
  url: 'http://localhost:8080/geoserver/rest/workspaces/{current_ws_sname}',
  method: 'PUT',
  headers: { 'Content-type': 'text/xml' },
  body: '<workspace><name>{new_ws_name}</name></workspace>',
  auth: {
     user: {geoserver_username},
     pass: {geoserver_password}
  }

为了基于上述选项变量执行请求,我在Express中使用了请求功能:

request(options, (error, response, body) => {
  console.log('response status code:' , response.statusCode)
  console.log('response status message: ', response.statusMessage)
  const result = {}
  if (!error) {
     const statusCode = response.statusCode;
     const statusMessage = response.statusMessage;
     if (statusCode == 200) {
         result.err = false
         result.msg = `Modified`
     } else if (statusCode == 404) {
         result.err = true
         result.msg = 'Workspace not found!'
     } else if (statusCode == 405) {
         result.err = true
         result.msg = 'Forbidden to change the name of the workspace!'
                      //because of your username and/or password
     } else if (statusCode == 500) {
         result.err = true
         result.msg = 'Server internal error or duplicate names'
     }
  } else {
     result.err = true,
     result.msg = error;
  }
  res.send(result);
})

不要忘记替换 {current_ws_sname} {new_ws_sname} {geoserver_username} {geoserver_password}

上面已经提到了所有可能的情况(即200、404、405、500),并且在geoserver中没有诸如“ 无法更改工作空间的名称。”之类的错误消息。文档!

您会得到什么statusCode和statusMessage?您可以确认您的{new_ws_sname}是否重复吗?