Do not attempt to parse empty RPC/action reply
[netconf.git] / netconf / sal-netconf-connector / src / main / java / org / opendaylight / netconf / sal / connect / netconf / schema / mapping / NetconfMessageTransformer.java
index 0406b95db74b3c8bd45110fd5bc728e107a09a59..5974875ef7551708cc9a13f7ebad038e0f813b11 100644 (file)
@@ -29,6 +29,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
@@ -311,13 +312,19 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
 
     private NormalizedNode<?, ?> parseResult(final NetconfMessage message,
             final OperationDefinition operationDefinition) {
+        final Optional<XmlElement> okResponseElement = XmlElement.fromDomDocument(message.getDocument())
+                .getOnlyChildElementWithSameNamespaceOptionally("ok");
         if (operationDefinition.getOutput().getChildNodes().isEmpty()) {
-            Preconditions.checkArgument(XmlElement.fromDomDocument(
-                message.getDocument()).getOnlyChildElementWithSameNamespaceOptionally("ok").isPresent(),
+            Preconditions.checkArgument(okResponseElement.isPresent(),
                 "Unexpected content in response of rpc: %s, %s", operationDefinition.getQName(), message);
             return null;
         } else {
-            final Element element = message.getDocument().getDocumentElement();
+            if (okResponseElement.isPresent()) {
+                LOG.debug("Received response <ok/> for RPC with defined Output");
+                return null;
+            }
+
+            Element element = message.getDocument().getDocumentElement();
             try {
                 final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
                 final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);