webhdfs使用kerberos rest模板创建HttpServerErrorException:500 Internal Server Error

时间:2018-10-11 13:46:28

标签: java spring rest kerberos webhdfs

我正在尝试使用webhdfs在hdfs中创建文件。 Kerberos用于群集上的安全性,因此我使用std::byte*

在我的控制器中,我有2种方法

KerberosRestTemplate

在我的服务班里,我有

  @RequestMapping("/showFileContent")
  public ResponseEntity<String> showContent() throws URISyntaxException {
    return new ResponseEntity<>(taxonService.getTaxonJSON(), HttpStatus.OK);
  }

  @RequestMapping("/createFile")
  public ResponseEntity<URI> createFile() throws URISyntaxException {
    return new ResponseEntity<>(taxonService.createFile(), HttpStatus.OK);
  }

使用 public String getTaxonJSON() throws URISyntaxException { URI uri = new URI(path + "?op=OPEN"); String json = restTemplate.getForObject(uri, String.class); return json; } public URI createFile() throws URISyntaxException { URI uri = new URI(path + "?op=CREATE"); return restTemplate.postForLocation(uri, String.class); } 可以很好地查看文件内容,但是每次尝试/showFileContent时,都会得到/createFile。我在调用创建之前删除了文件。

错误原因是什么?

1 个答案:

答案 0 :(得分:0)

我设法写入一个文件,而不是创建一个。这足以满足我的需求,并且可能会对其他人有所帮助,所以我将其发布在这里。

public boolean writeFile(File file) throws URISyntaxException {
    URI uri = new URI(path + "?op=CREATE" + "&overwrite=true&data=true");
    ResponseEntity e =kerberosRestTemplate.exchange(uri, HttpMethod.PUT, new HttpEntity<Resource>(new FileSystemResource(file)), Map.class);
    return e.getStatusCodeValue() == 201;
  }