В этой статье (https://www.ahoi -it.de / ahoi / news / java-xslt-memory-leak / 4830 ) объясняется, что преобразователь Javax xml кэширует содержимое XML во внутреннюю HashMap для позднее использовать.
Это моя проблема: я читаю сообщения XML из activemq и, если что-то не получается, я пытаюсь снова преобразовать их с помощью преобразователя XML Javax и отправить их на определенную конечную точку. Проблема в том, что в конечном итоге мой Docker-контейнер перезапускается, потому что ему не хватает памяти.
Что я хотел бы сделать, так это отключить кэширование, к сожалению, после 3 часов исследований я все еще не знаю, как это сделать.
У меня есть класс utils со статическими методами, и вот как выглядит мой Javax XML Transformer:
public static String getTransformedXml(Object input, String transformerFileName)
throws IOException, TransformerException {
ClassPathResource classPathResource = new ClassPathResource(transformerFileName);
InputStream xsltStream = classPathResource.getInputStream();
TransformerFactory factory = TransformerFactory.newInstance();
Source xslt = new StreamSource(xsltStream);
Transformer transformer = factory.newTransformer(xslt);
transformer.setErrorListener(new XsltTransformerErrorListener(transformerFileName));
Source text = new StreamSource(new StringReader(XmlUtils.encode(input, input.getClass())));
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(text, result);
return result.getWriter().toString();
}