Как преобразовать xml InputStream в мелкую печать, предназначенную? - PullRequest
0 голосов
/ 16 января 2020

У меня есть InputStream с содержанием XML. Что касается памяти и производительности: каков наилучший способ в java преобразовать поток в красивую (предназначенную) xml строку для ведения журнала?

apache-cxf с использованием Stax :

import org.apache.cxf.staxutils.PrettyPrintXMLStreamWriter;
import org.apache.cxf.staxutils.StaxUtils;

InputStream in; //assume given

StringWriter sw = new StringWriter();
XMLStreamWriter xwriter = StaxUtils.createXMLStreamWriter(sw);
xwriter = new PrettyPrintXMLStreamWriter(xwriter, 2);
StaxUtils.copy(new StreamSource(in), xwriter);
sw.toString();

java.xml.transform:

InputStream in; //assume given

StringWriter stringWriter = new StringWriter();
StreamResult xmlOutput = new StreamResult(stringWriter);

TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", 2);
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");

transformer.transform(new StreamSource(in), xmlOutput);
xmlOutput.getWriter().toString();

Возможно, есть и другие хорошие подходы. Вопрос в том, что касается высокой пропускной способности и потребления памяти, какой из них следует отдавать предпочтение?

Ведение журнала выглядит так:

private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(MyLogging.class);
LOGGER.info(xmlPrettyPrint);
...