В качестве дополнения к ответу Яна (работает как очарование, спасибо, Ян), вот фрагмент кода Java (который требует некоторой любви, констант и т. Д.):
private void removeLayerGroupFromCache() throws IOException {
URL url = new URL("http://localhost:8080/geoserver/gwc/rest/layers/layer group name.xml");
String rawLayer = getXMLContent(url);
String updatedLayer = formatXMLContent(rawLayer);
updateLayerInGIS(url, updatedLayer);
}
private String getXMLContent(URL url) throws IOException {
URLConnection urlConnection = setUsernamePassword(url);
InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder result = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
bufferedReader.close();
inputStreamReader.close();
return result.toString();
}
// TODO: This feels akward and should be improved. (Why extra spaces are being added with the urlConnection.getInputStream() call?)
private String formatXMLContent(String originalContent) {
originalContent = originalContent.replaceAll("\\s+", ""); // Removes undesired spaces.
originalContent = originalContent.replaceAll("layergroupname".replaceAll("\\s+", ""), "layer group name"); // Makes sure the name is matching if it contains white spaces.
originalContent = originalContent.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>".replaceAll("\\s+", ""), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); // Re-append required spaces to XML declaration.
originalContent = originalContent.replace("<enabled>true</enabled>", "<enabled>false</enabled>"); // Finally, disable the caching for the group.
return originalContent;
}
private URLConnection setUsernamePassword(URL url) throws IOException {
String authStringEncoded = new String(Base64.encodeBase64("username:userpassword".getBytes()));
URLConnection urlConnection = url.openConnection();
urlConnection.setRequestProperty("Authorization", "Basic " + authStringEncoded);
return urlConnection;
}
private void updateLayerInGIS(URL url, String updatedLayer) throws IOException {
Authentication auth = authenticationResolver.retrieve();
String encodedCredentials = java.util.Base64.getEncoder().encodeToString("username:userpassword".getBytes());
URL directUrl = new URL("http", url.getHost(), url.getPort(), url.getFile());
HttpURLConnection httpCon = (HttpURLConnection) directUrl.openConnection();
httpCon.setRequestProperty("Authorization", "Basic " + encodedCredentials);
httpCon.setDoOutput(true);
httpCon.setRequestMethod("POST");
OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream());
out.write(updatedLayer);
out.close();
int statusCode = httpCon.getResponseCode();
if(statusCode >= 200 && statusCode < 400) {
httpCon.getInputStream();
} else {
// Gets a more verbose message on why a non valid code has been returned.
String errorMessage = readStream(httpCon.getErrorStream());
throw new IOException(errorMessage);
}
}
private String readStream(InputStream stream) throws IOException {
StringBuilder builder = new StringBuilder();
try (BufferedReader in = new BufferedReader(new InputStreamReader(stream))) {
String line;
while ((line = in.readLine()) != null) {
builder.append(line);
}
}
return builder.toString();
}