'memory leak issues using schematron 5.* libraries
I have a memory leak problem while using schematron libraries. here is the method
public int validateSchematron(File schemaFile1, File inputFile1, StringBuilder serviceReturnStatus) {
File schemaFile = schemaFile1;
File inputFile = inputFile1;
try {
IReadableResource schFile = new FileSystemResource(schemaFile);
ISchematronResource aResSCH = new SchematronResourceSCH(schFile);
if (!aResSCH.isValidSchematron ()) {
serviceReturnStatus.append("\nInvalid Schematron file:" + schemaFile.getName());
return STEP_STATUS_FAILRE_INT;
}
int count = 0;
Source xmlFile = new StreamSource(inputFile);
SchematronOutputType schematronOutputType = aResSCH.applySchematronValidationToSVRL (xmlFile);
List<Object> failedAsserts = schematronOutputType.getActivePatternAndFiredRuleAndFailedAssert();
if(failedAsserts != null) {
for (Object object : failedAsserts) {
if (object instanceof FailedAssert) {
if (!(count > 0)) {
serviceReturnStatus.append("\n\nSchematron (" + schemaFile.getName() + ") validation errors encountered:");
}
final FailedAssert failedAssert = (FailedAssert) object;
if ((failedAssert.getFlag().equalsIgnoreCase("warning"))) {
if (treatWarningAsError)
validationFailure = true;
serviceReturnStatus.append("\n" + failedAssert.getFlag().toUpperCase() + " : ");
serviceReturnStatus.append(failedAssert.getText());
serviceReturnStatus.append("\n\t" + "Location : " + failedAssert.getLocation());
}
if ((failedAssert.getFlag().equalsIgnoreCase("error"))) {
validationFailure = true;
serviceReturnStatus.append("\n" + failedAssert.getFlag().toUpperCase() + " : ");
serviceReturnStatus.append(failedAssert.getText());
serviceReturnStatus.append("\n\t" + "Location : " + failedAssert.getLocation());
}
if ((failedAssert.getFlag().equalsIgnoreCase("fatal"))) {
validationFailure = true;
serviceReturnStatus.append("\n" + failedAssert.getFlag().toUpperCase() + " : ");
serviceReturnStatus.append(failedAssert.getText());
serviceReturnStatus.append("\n\t" + "Location : " + failedAssert.getLocation());
}
count++;
}
}
}
}
catch(IllegalArgumentException ia) {
serviceReturnStatus.append("\n\nInvalid or malformed input file.\nPlease retry or correct the input file.\n\n" + ia.getLocalizedMessage());
validationFailure = true;
}
catch(Exception e){
serviceReturnStatus.append("\n\n" + e.getLocalizedMessage());
validationFailure = true;
return STEP_STATUS_FAILRE_INT;
}
return STEP_STATUS_SUCCESS_INT;
}
The problem appears to be when the schematron file is validated DOM objects are created that persist after the method returns. Any ideas or suggestions on why that would be?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
