X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fapi%2FNetconfMessage.java;h=d8c80e56eb5be27e76eb523eed44654cdf4da47f;hp=7877843ccb99c7ad91230467720b7bbf17f72e25;hb=0c95d90e91f5a6a07d744b97dcc226c70a22c366;hpb=59edff19362f894f68b598f989716070c57abe1c 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 7877843ccb..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,36 +8,61 @@ 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; -import com.google.common.base.Optional; - /** * NetconfMessage represents a wrapper around org.w3c.dom.Document. Needed for * implementing ProtocolMessage interface. */ -public final class NetconfMessage { +public class NetconfMessage { + private static final Transformer TRANSFORMER; - private static final long serialVersionUID = 462175939836367285L; + 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"); - private final Document doc; + TRANSFORMER = t; + } - private String additionalHeader; + private final Document doc; public NetconfMessage(final Document doc) { - this(doc, null); - } - - public NetconfMessage(Document doc, String additionalHeader) { this.doc = doc; - this.additionalHeader = additionalHeader; } public Document getDocument() { return this.doc; } - public Optional getAdditionalHeader() { - return additionalHeader== null ? Optional.absent() : Optional.of(additionalHeader); + @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(); } }