mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 21:27:40 +00:00
Merge pull request #187 from glyptodon/resource-leak
GUAC-587: Ensure resource streams are always closed.
This commit is contained in:
@@ -145,6 +145,42 @@ public class LanguageResourceService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses the given language resource, returning the resulting JsonNode.
|
||||||
|
* If the resource cannot be read because it does not exist, null is
|
||||||
|
* returned.
|
||||||
|
*
|
||||||
|
* @param resource
|
||||||
|
* The language resource to parse. Language resources must have the
|
||||||
|
* mimetype "application/json".
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* A JsonNode representing the root of the parsed JSON tree, or null if
|
||||||
|
* the given resource does not exist.
|
||||||
|
*
|
||||||
|
* @throws IOException
|
||||||
|
* If an error occurs while parsing the resource as JSON.
|
||||||
|
*/
|
||||||
|
private JsonNode parseLanguageResource(Resource resource) throws IOException {
|
||||||
|
|
||||||
|
// Get resource stream
|
||||||
|
InputStream stream = resource.asStream();
|
||||||
|
if (stream == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Parse JSON tree
|
||||||
|
try {
|
||||||
|
JsonNode tree = mapper.readTree(stream);
|
||||||
|
return tree;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure stream is always closed
|
||||||
|
finally {
|
||||||
|
stream.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds or overlays the given language resource, which need not exist in
|
* Adds or overlays the given language resource, which need not exist in
|
||||||
* the ServletContext. If a language resource is already defined for the
|
* the ServletContext. If a language resource is already defined for the
|
||||||
@@ -169,17 +205,19 @@ public class LanguageResourceService {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
// Get resource stream
|
// Read the original language resource
|
||||||
InputStream existingStream = existing.asStream();
|
JsonNode existingTree = parseLanguageResource(existing);
|
||||||
InputStream resourceStream = resource.asStream();
|
if (existingTree == null) {
|
||||||
if (existingStream == null || resourceStream == null) {
|
logger.warn("Base language resource \"{}\" does not exist.", key);
|
||||||
logger.warn("Language resource \"{}\" does not exist.", key);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the original and new language resources
|
// Read new language resource
|
||||||
JsonNode existingTree = mapper.readTree(existingStream);
|
JsonNode resourceTree = parseLanguageResource(resource);
|
||||||
JsonNode resourceTree = mapper.readTree(resourceStream);
|
if (resourceTree == null) {
|
||||||
|
logger.warn("Overlay language resource \"{}\" does not exist.", key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Merge the language resources
|
// Merge the language resources
|
||||||
JsonNode mergedTree = mergeTranslations(existingTree, resourceTree);
|
JsonNode mergedTree = mergeTranslations(existingTree, resourceTree);
|
||||||
|
Reference in New Issue
Block a user