У меня есть 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);