Bug 451 - Fix netconf exception handling
[controller.git] / opendaylight / netconf / netconf-util / src / main / java / org / opendaylight / controller / netconf / util / messages / NetconfMessageUtil.java
index e4d97cf65af4ef805b6ecf9cff3133a65cf964ab..49395d53d21225a20b6d47491db0e05fd03626eb 100644 (file)
@@ -10,9 +10,12 @@ package org.opendaylight.controller.netconf.util.messages;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Collections2;
+import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
 import org.opendaylight.controller.netconf.util.xml.XmlElement;
 import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 
 import javax.annotation.Nullable;
@@ -21,39 +24,41 @@ import java.util.List;
 
 public final class NetconfMessageUtil {
 
+    private static final Logger logger = LoggerFactory.getLogger(NetconfMessageUtil.class);
+
     private NetconfMessageUtil() {}
 
-    public static boolean isOKMessage(NetconfMessage message) {
+    public static boolean isOKMessage(NetconfMessage message) throws NetconfDocumentedException {
         return isOKMessage(message.getDocument());
     }
 
-    public static boolean isOKMessage(Document document) {
+    public static boolean isOKMessage(Document document) throws NetconfDocumentedException {
         return isOKMessage(XmlElement.fromDomDocument(document));
     }
 
-    public static boolean isOKMessage(XmlElement xmlElement) {
+    public static boolean isOKMessage(XmlElement xmlElement) throws NetconfDocumentedException {
         if(xmlElement.getChildElements().size() != 1) {
             return false;
         }
         return xmlElement.getOnlyChildElement().getName().equals(XmlNetconfConstants.OK);
     }
 
-    public static boolean isErrorMessage(NetconfMessage message) {
+    public static boolean isErrorMessage(NetconfMessage message) throws NetconfDocumentedException {
         return isErrorMessage(message.getDocument());
     }
 
-    public static boolean isErrorMessage(Document document) {
+    public static boolean isErrorMessage(Document document) throws NetconfDocumentedException {
         return isErrorMessage(XmlElement.fromDomDocument(document));
     }
 
-    public static boolean isErrorMessage(XmlElement xmlElement) {
+    public static boolean isErrorMessage(XmlElement xmlElement) throws NetconfDocumentedException {
         if(xmlElement.getChildElements().size() != 1) {
             return false;
         }
         return xmlElement.getOnlyChildElement().getName().equals(XmlNetconfConstants.RPC_ERROR);
     }
 
-    public static Collection<String> extractCapabilitiesFromHello(Document doc) {
+    public static Collection<String> extractCapabilitiesFromHello(Document doc) throws NetconfDocumentedException {
         XmlElement responseElement = XmlElement.fromDomDocument(doc);
         XmlElement capabilitiesElement = responseElement
                 .getOnlyChildElementWithSameNamespace(XmlNetconfConstants.CAPABILITIES);
@@ -64,7 +69,12 @@ public final class NetconfMessageUtil {
             @Override
             public String apply(@Nullable XmlElement input) {
                 // Trim possible leading/tailing whitespace
-                return input.getTextContent().trim();
+                try {
+                    return input.getTextContent().trim();
+                } catch (NetconfDocumentedException e) {
+                    logger.trace("Error fetching inpit text content becauese {}",e);
+                    return null;
+                }
             }
         });