Clean up XML interactions
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / nb / rfc8040 / streams / listeners / XMLNotificationFormatter.java
index 4b0d53ea4c328087d9c8f6422999bcf359f37716..7b453032b6a1966dfbcfd2c19b1a64c960c33426 100644 (file)
@@ -11,10 +11,8 @@ import java.io.IOException;
 import java.io.StringWriter;
 import java.time.Instant;
 import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
 import javax.xml.xpath.XPathExpressionException;
 import org.opendaylight.mdsal.dom.api.DOMNotification;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
 import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
@@ -44,36 +42,26 @@ final class XMLNotificationFormatter extends NotificationFormatter {
 
     @Override
     String createText(final EffectiveModelContext schemaContext, final DOMNotification input, final Instant now,
-                      final boolean leafNodesOnly, final boolean skipData)
-            throws IOException {
-        final StringWriter writer = new StringWriter();
-        try {
-            final XMLStreamWriter xmlStreamWriter = XML_OUTPUT_FACTORY.createXMLStreamWriter(writer);
-            xmlStreamWriter.setDefaultNamespace(NOTIFICATION_NAMESPACE);
-
-            xmlStreamWriter.writeStartElement(NOTIFICATION_NAMESPACE, NOTIFICATION_ELEMENT);
-            xmlStreamWriter.writeDefaultNamespace(NOTIFICATION_NAMESPACE);
-
-            xmlStreamWriter.writeStartElement("eventTime");
-            xmlStreamWriter.writeCharacters(toRFC3339(now));
-            xmlStreamWriter.writeEndElement();
-
-            final NormalizedNodeStreamWriter nnStreamWriter =
-                    XMLStreamNormalizedNodeStreamWriter.create(xmlStreamWriter, schemaContext, input.getType());
+                      final boolean leafNodesOnly, final boolean skipData) throws IOException {
+        final var writer = new StringWriter();
 
-            final NormalizedNodeWriter nnWriter = NormalizedNodeWriter.forStreamWriter(nnStreamWriter);
-            nnWriter.write(input.getBody());
-            nnWriter.flush();
-
-            xmlStreamWriter.writeEndElement();
-            xmlStreamWriter.writeEndDocument();
-            xmlStreamWriter.flush();
+        try {
+            final var xmlStreamWriter = NotificationFormatter.createStreamWriterWithNotification(writer, now);
+            final var nnStreamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlStreamWriter, schemaContext,
+                input.getType());
 
-            nnWriter.close();
+            try (var nnWriter = NormalizedNodeWriter.forStreamWriter(nnStreamWriter)) {
+                nnWriter.write(input.getBody());
+                nnWriter.flush();
 
-            return writer.toString();
+                xmlStreamWriter.writeEndElement();
+                xmlStreamWriter.writeEndDocument();
+                xmlStreamWriter.flush();
+            }
         } catch (XMLStreamException e) {
             throw new IOException("Failed to write notification content", e);
         }
+
+        return writer.toString();
     }
 }