Отчет статического анализа JTest показывает ошибку серьезности 1 для приведенного ниже кода в методе generateReport. Проблема возникает для строки os.write (b, 0, count) в цикле while.ОС в основном ServletOutputStream.Сообщение отчета JTest: «Утечка путей файловой системы (« b ») через веб-страницу».Как я могу решить эту проблему?
public void generateReport(final CommandContext<String, Object> input, final Collection<Object> dataList,
final Map<String, Object> paramMap, final String reportName, final String reportType, final String fileType,
final String connectType) throws CommandException {
String tempfilename = null;
try {
final HttpServletResponse response = ((ServletCommandContext<String, Object>) input).getResponse();
final Map<String, Object> dataMap = ipeReportService.generateReport(dataList, paramMap, reportType,
fileType, connectType);
final Long fileLength = (Long) dataMap.get("length");
response.setContentLength(fileLength.intValue());
try (InputStream fis = (InputStream) dataMap.get("InputStream");
OutputStream os = response.getOutputStream();) {
tempfilename = (String) dataMap.get("FileAbsolutePath");
final byte[] b = new byte[1024];
int count = fis.read(b);
while (count > -1) {
os.write(b, 0, count);
count = fis.read(b);
}
Arrays.fill(b, (byte) 0);
os.flush();
} catch (final IOException e) {
logger.error(e.getMessage(), e);
}
response.flushBuffer();
input.setForwardRequired(false);
} catch (final Exception e) {
logger.error(e.getMessage(), e);
throw new CommandException(e);
} finally {
// delete temp file
if (tempfilename != null) {
final File f = new File(tempfilename);
if (f.exists()) {
f.delete();
}
}
}
}