Отключить кеширование в Javax xml transformer - PullRequest
0 голосов
/ 17 января 2019

В этой статье (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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...