X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fapi%2FNetconfMessage.java;h=d8c80e56eb5be27e76eb523eed44654cdf4da47f;hb=0c95d90e91f5a6a07d744b97dcc226c70a22c366;hp=78586a3fec2bb926690771732769dc71ddaff99d;hpb=0418d143fbc882b24becaa52ab115a4a42d3328c;p=controller.git diff --git a/opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfMessage.java b/opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfMessage.java index 78586a3fec..d8c80e56eb 100644 --- a/opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfMessage.java +++ b/opendaylight/netconf/netconf-api/src/main/java/org/opendaylight/controller/netconf/api/NetconfMessage.java @@ -8,6 +8,15 @@ package org.opendaylight.controller.netconf.api; +import java.io.StringWriter; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; /** @@ -15,6 +24,21 @@ import org.w3c.dom.Document; * implementing ProtocolMessage interface. */ public class NetconfMessage { + private static final Transformer TRANSFORMER; + + static { + final Transformer t; + try { + t = TransformerFactory.newInstance().newTransformer(); + } catch (TransformerConfigurationException | TransformerFactoryConfigurationError e) { + throw new ExceptionInInitializerError(e); + } + t.setOutputProperty(OutputKeys.INDENT, "yes"); + t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + + TRANSFORMER = t; + } + private final Document doc; public NetconfMessage(final Document doc) { @@ -24,4 +48,21 @@ public class NetconfMessage { public Document getDocument() { return this.doc; } + + @Override + public String toString() { + final StreamResult result = new StreamResult(new StringWriter()); + final DOMSource source = new DOMSource(doc.getDocumentElement()); + + try { + // Slight critical section is a tradeoff. This should be reasonably fast. + synchronized (TRANSFORMER) { + TRANSFORMER.transform(source, result); + } + } catch (TransformerException e) { + throw new IllegalStateException("Failed to encode document", e); + } + + return result.getWriter().toString(); + } }