기능)
XML파일을 첨부하면 파일이 업로드 된 후 유효성 검사가 수행된다.
업로드 파일은 삭제 후 재업로드 할 수 있다.
현상)
정상적인 유효성 검사가 완료되었다면 문제가 발생하지 않았다.
유효성에 문제가 발견되면 업로드 한 파일의 삭제나 재업로드가 불가해진다.
어딘가에서 XML 파일의 자원 해제가 되지 않는다.
아래 예제 코드의 "변경 후"라고 주석친 부분과 같이 수정후 문제를 해결할 수 있었다.
/**
* 유효성 테스트
*/
public String test(String xsdFileFolder, String xmlFileName) {
... 생략 ...
File xsdFile = new File(xsdFileName);
File xmlFile = new File(xmlFileName);
InputStream inputStream = null;
try {
Schema schema = factory.newSchema(xsdFile);
Validator validator = schema.newValidator();
//exception 발생시 자바가 여기서 xml 파일을 물고 있어서 해제되지 않음.
//파일 삭제 및 재 업로드도 안됨.
//서버 재구동 해야만 XML 파일이 해제되었음.
//Source source = new StreamSource(xmlFile); //변경 전
inputStream = new FileInputStream(xmlFile); //변경 후
Source source = new StreamSource(inputStream); //변경 후
try {
validator.validate(source);
LOGGER.debug(xmlFileName + " validates.");
}
catch (SAXException ex) {
//유효성 검사에 실패시
LOGGER.debug(xmlFileName + " fails to validate because: \n");
LOGGER.debug(ex.getMessage());
}
... 생략 ...
} catch (SAXException sch) {
... 생략 ...
} finally {
//변경 후(추가부분)
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return message;
}