From cea637c7abbb8d132d8df30bc739ce041e0add8b Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 26 Jul 2021 15:22:59 +0200 Subject: [PATCH] Remove DocumentedException.ErrorSeverity Use ErrorServerity from yang-common, eliminating some amount of duplication. This also allows us to take advantage of bidirectional mapping to (now legacy) RpcError.ErrorSeverity. Also modernize test suite to perform correct asserts. JIRA: NETCONF-793 Change-Id: Ie7e592233e6a948a9a991e4309315e1fb857b8d2 Signed-off-by: Robert Varga --- .../mdsal/connector/TransactionProvider.java | 2 +- .../ops/AbstractConfigOperation.java | 11 ++++--- .../mdsal/connector/ops/AbstractEdit.java | 7 ++-- .../mdsal/connector/ops/CopyConfig.java | 4 +-- .../mdsal/connector/ops/DiscardChanges.java | 3 +- .../mdsal/connector/ops/EditConfig.java | 7 ++-- .../netconf/mdsal/connector/ops/Lock.java | 3 +- .../mdsal/connector/ops/RuntimeRpc.java | 2 +- .../netconf/mdsal/connector/ops/Unlock.java | 6 ++-- .../netconf/mdsal/connector/ops/Validate.java | 7 ++-- .../mdsal/connector/ops/get/AbstractGet.java | 4 +-- .../ops/get/FilterContentValidator.java | 11 +++---- .../netconf/mdsal/connector/ops/get/Get.java | 2 +- .../mdsal/connector/ops/get/GetConfig.java | 2 +- .../mdsal/connector/ops/CopyConfigTest.java | 3 +- .../ops/NetconfMDSalMappingTest.java | 2 +- .../mdsal/connector/ops/RuntimeRpcTest.java | 2 +- .../mdsal/connector/ops/ValidateTest.java | 9 ++--- .../netconf/mdsal/monitoring/GetSchema.java | 5 ++- .../netconf/api/DocumentedException.java | 33 ++++--------------- .../api/NetconfDocumentedException.java | 1 + .../api/xml/MissingNameSpaceException.java | 1 + .../api/xml/UnexpectedElementException.java | 1 + .../api/xml/UnexpectedNamespaceException.java | 1 + .../netconf/api/xml/XmlElement.java | 28 ++++++++-------- .../api/NetconfDocumentedExceptionTest.java | 19 +++++------ .../impl/NetconfServerSessionListener.java | 7 ++-- .../operations/DefaultCloseSession.java | 6 ++-- .../mapping/operations/DefaultStartExi.java | 2 +- .../impl/osgi/NetconfOperationRouterImpl.java | 12 +++---- .../util/DeserializerExceptionHandler.java | 3 +- .../operations/DefaultCloseSessionTest.java | 20 +++++++---- .../impl/utils/NetconfTopologyUtils.java | 3 +- .../impl/netconf/ProxyNetconfServiceTest.java | 3 +- .../tx/ProxyReadWriteTransactionTest.java | 3 +- .../mapping/AbstractLastNetconfOperation.java | 3 +- .../netconf/sal/tx/AbstractWriteTx.java | 19 +++-------- .../util/NetconfMessageTransformUtil.java | 27 ++++----------- .../test/tool/customrpc/SettableRpc.java | 4 +-- .../netconf/test/tool/monitoring/Get.java | 9 ++--- .../test/tool/rpchandler/SettableRpc.java | 4 +-- .../NetconfRestconfTransaction.java | 15 +++------ .../utils/DeleteDataTransactionUtilTest.java | 3 +- .../utils/PatchDataTransactionUtilTest.java | 3 +- 44 files changed, 141 insertions(+), 181 deletions(-) diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/TransactionProvider.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/TransactionProvider.java index e41f019c9f..1a7c42d699 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/TransactionProvider.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/TransactionProvider.java @@ -18,9 +18,9 @@ import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractConfigOperation.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractConfigOperation.java index f6b827c252..5201ec112e 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractConfigOperation.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractConfigOperation.java @@ -23,6 +23,7 @@ import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.util.mapping.AbstractSingletonNetconfOperation; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -62,7 +63,7 @@ abstract class AbstractConfigOperation extends AbstractSingletonNetconfOperation throw new DocumentedException("Invalid RPC, neither not element is present", DocumentedException.ErrorType.PROTOCOL, DocumentedException.ErrorTag.MISSING_ELEMENT, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } final Document document = getDocumentFromUrl(urlElement.get().getTextContent()); @@ -86,17 +87,17 @@ abstract class AbstractConfigOperation extends AbstractSingletonNetconfOperation throw new DocumentedException(url + " URL is invalid or unsupported", e, DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.INVALID_VALUE, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } catch (IOException e) { - throw new DocumentedException("Could not open URL:" + url, e, + throw new DocumentedException("Could not open URL " + url, e, DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } catch (SAXException e) { throw new DocumentedException("Could not parse XML at" + url, e, DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } } diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractEdit.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractEdit.java index c3e888c165..f5126387b1 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractEdit.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/AbstractEdit.java @@ -11,17 +11,16 @@ import com.google.common.collect.ImmutableMap; import java.io.IOException; import java.net.URISyntaxException; import java.util.Iterator; -import java.util.Map; import java.util.Optional; import javax.xml.stream.XMLStreamException; import javax.xml.transform.dom.DOMSource; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.NetconfDocumentedException; import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; @@ -106,10 +105,8 @@ abstract class AbstractEdit extends AbstractConfigOperation { final NodeList elementsByTagName = getElementsByTagName(operationElement, TARGET_KEY); // Direct lookup instead of using XmlElement class due to performance if (elementsByTagName.getLength() == 0) { - final Map errorInfo = ImmutableMap.of("bad-attribute", TARGET_KEY, "bad-element", - operationName); throw new DocumentedException("Missing target element", ErrorType.PROTOCOL, ErrorTag.MISSING_ATTRIBUTE, - ErrorSeverity.ERROR, errorInfo); + ErrorSeverity.ERROR, ImmutableMap.of("bad-attribute", TARGET_KEY, "bad-element", operationName)); } else if (elementsByTagName.getLength() > 1) { throw new DocumentedException("Multiple target elements", ErrorType.RPC, ErrorTag.UNKNOWN_ATTRIBUTE, ErrorSeverity.ERROR); diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfig.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfig.java index 5d9c043c71..cebf3e5590 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfig.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfig.java @@ -26,7 +26,6 @@ import javax.xml.transform.dom.DOMResult; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.xml.XmlElement; @@ -34,6 +33,7 @@ import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.netconf.mdsal.connector.TransactionProvider; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -125,7 +125,7 @@ public final class CopyConfig extends AbstractEdit { throw new DocumentedException(" element is missing", DocumentedException.ErrorType.PROTOCOL, DocumentedException.ErrorTag.MISSING_ELEMENT, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } return sourceElement.get(); diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/DiscardChanges.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/DiscardChanges.java index 726a160683..ea9ad094fa 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/DiscardChanges.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/DiscardChanges.java @@ -10,13 +10,13 @@ package org.opendaylight.netconf.mdsal.connector.ops; import java.util.HashMap; import java.util.Map; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.mdsal.connector.TransactionProvider; import org.opendaylight.netconf.util.mapping.AbstractSingletonNetconfOperation; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -57,5 +57,4 @@ public class DiscardChanges extends AbstractSingletonNetconfOperation { protected String getOperationName() { return OPERATION_NAME; } - } diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/EditConfig.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/EditConfig.java index 9e85e5cccf..6b5f080499 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/EditConfig.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/EditConfig.java @@ -7,14 +7,14 @@ */ package org.opendaylight.netconf.mdsal.connector.ops; -import com.google.common.base.Preconditions; +import static com.google.common.base.Preconditions.checkState; + import java.util.List; import java.util.ListIterator; import java.util.concurrent.ExecutionException; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.ModifyAction; @@ -22,6 +22,7 @@ import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.netconf.mdsal.connector.TransactionProvider; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; @@ -146,7 +147,7 @@ public final class EditConfig extends AbstractEdit { .getDataSchemaNode(); // we should have the schema node that points to the parent list now, enforce it - Preconditions.checkState(schemaNode instanceof ListSchemaNode, "Schema node is not pointing to a list."); + checkState(schemaNode instanceof ListSchemaNode, "Schema node is not pointing to a list."); //merge empty ordered or unordered map if (((ListSchemaNode) schemaNode).isUserOrdered()) { diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Lock.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Lock.java index aac3f1e875..6518fa4d5d 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Lock.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Lock.java @@ -11,6 +11,7 @@ import org.opendaylight.netconf.api.DocumentedException; import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.util.mapping.AbstractSingletonNetconfOperation; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -42,7 +43,7 @@ public class Lock extends AbstractSingletonNetconfOperation { throw new DocumentedException("Unable to lock " + targetDatastore + " datastore", DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_NOT_SUPPORTED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } static Datastore extractTargetParameter(final XmlElement operationElement) throws DocumentedException { diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpc.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpc.java index b84098d93a..97f852ce94 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpc.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpc.java @@ -21,7 +21,6 @@ import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.dom.api.DOMRpcResult; import org.opendaylight.mdsal.dom.api.DOMRpcService; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.NetconfDocumentedException; @@ -32,6 +31,7 @@ import org.opendaylight.netconf.mapping.api.HandlingPriority; import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.netconf.util.mapping.AbstractSingletonNetconfOperation; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Unlock.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Unlock.java index 3690e1cc17..5145cc2bda 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Unlock.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Unlock.java @@ -11,6 +11,7 @@ import org.opendaylight.netconf.api.DocumentedException; import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.util.mapping.AbstractSingletonNetconfOperation; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -21,9 +22,7 @@ import org.w3c.dom.Element; operations/UnLock.java */ public class Unlock extends AbstractSingletonNetconfOperation { - private static final Logger LOG = LoggerFactory.getLogger(Unlock.class); - private static final String OPERATION_NAME = "unlock"; public Unlock(final String netconfSessionIdForReporting) { @@ -41,12 +40,11 @@ public class Unlock extends AbstractSingletonNetconfOperation { throw new DocumentedException("Unable to unlock " + targetDatastore + " datastore", DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_NOT_SUPPORTED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } @Override protected String getOperationName() { return OPERATION_NAME; } - } diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Validate.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Validate.java index 165e7eee94..a7f224832f 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Validate.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Validate.java @@ -8,14 +8,13 @@ package org.opendaylight.netconf.mdsal.connector.ops; import com.google.common.collect.ImmutableMap; -import java.util.Map; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.mdsal.connector.TransactionProvider; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -55,10 +54,8 @@ public final class Validate extends AbstractConfigOperation { final NodeList elementsByTagName = getElementsByTagName(operationElement, SOURCE_KEY); // Direct lookup instead of using XmlElement class due to performance if (elementsByTagName.getLength() == 0) { - final Map errorInfo = ImmutableMap.of("bad-attribute", SOURCE_KEY, "bad-element", - operationName); throw new DocumentedException("Missing source element", ErrorType.PROTOCOL, ErrorTag.MISSING_ELEMENT, - ErrorSeverity.ERROR, errorInfo); + ErrorSeverity.ERROR, ImmutableMap.of("bad-attribute", SOURCE_KEY, "bad-element", operationName)); } else if (elementsByTagName.getLength() > 1) { throw new DocumentedException("Multiple source elements", ErrorType.RPC, ErrorTag.UNKNOWN_ATTRIBUTE, ErrorSeverity.ERROR); diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java index 6264c624a2..94a7bfb247 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java @@ -16,7 +16,6 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import javax.xml.transform.dom.DOMResult; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.xml.XmlElement; @@ -24,6 +23,7 @@ import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.netconf.mdsal.connector.ops.Datastore; import org.opendaylight.netconf.util.mapping.AbstractSingletonNetconfOperation; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @@ -219,7 +219,5 @@ public abstract class AbstractGet extends AbstractSingletonNetconfOperation { public Optional getDatastore() { return datastore; } - } - } diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/FilterContentValidator.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/FilterContentValidator.java index c4ae3d9899..a86080cc0e 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/FilterContentValidator.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/FilterContentValidator.java @@ -13,7 +13,6 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.Deque; import java.util.HashMap; import java.util.List; @@ -25,6 +24,7 @@ import org.opendaylight.netconf.api.DocumentedException; import org.opendaylight.netconf.api.xml.MissingNameSpaceException; import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -85,7 +85,7 @@ public class FilterContentValidator { throw new DocumentedException("Validation failed. Cause: " + e.getMessage(), e, DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.UNKNOWN_NAMESPACE, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } } @@ -110,7 +110,7 @@ public class FilterContentValidator { + "in schema context: " + schemaContext.getCurrentContext().toString(), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.UNKNOWN_NAMESPACE, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } /** @@ -197,7 +197,7 @@ public class FilterContentValidator { final List childElements = current.getChildElements(pathElement); // if there are multiple list entries present in the filter, we can't use any keys and must read whole list if (childElements.size() != 1) { - return Collections.emptyMap(); + return Map.of(); } current = childElements.get(0); } @@ -207,7 +207,7 @@ public class FilterContentValidator { final Optional childElements = current.getOnlyChildElementOptionally(qualifiedName.getLocalName()); if (childElements.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } final Optional keyValue = childElements.get().getOnlyTextContentOptionally(); if (keyValue.isPresent()) { @@ -306,5 +306,4 @@ public class FilterContentValidator { super("Element " + child + " can't be child of " + parent); } } - } diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/Get.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/Get.java index ffdb56261f..54f7366b31 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/Get.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/Get.java @@ -12,7 +12,6 @@ import java.util.concurrent.ExecutionException; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.xml.XmlElement; @@ -20,6 +19,7 @@ import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.netconf.mdsal.connector.TransactionProvider; import org.opendaylight.netconf.mdsal.connector.ops.Datastore; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/GetConfig.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/GetConfig.java index 59006806e7..cc2ec31c0b 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/GetConfig.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/GetConfig.java @@ -13,7 +13,6 @@ import java.util.concurrent.ExecutionException; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.xml.XmlElement; @@ -21,6 +20,7 @@ import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.netconf.mdsal.connector.TransactionProvider; import org.opendaylight.netconf.mdsal.connector.ops.Datastore; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; diff --git a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfigTest.java b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfigTest.java index 0b336adc18..8d491b596d 100644 --- a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfigTest.java +++ b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/CopyConfigTest.java @@ -18,11 +18,11 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.util.test.XmlFileLoader; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.w3c.dom.Document; import org.xml.sax.SAXException; @@ -36,6 +36,7 @@ public class CopyConfigTest extends AbstractNetconfOperationTest { copyConfig("messages/mapping/copyConfigs/copyConfig_no_target.xml"); fail("Should have failed - element is missing"); } catch (final DocumentedException e) { + // FIXME: use assertThrows() and assertEquals() assertTrue(e.getErrorSeverity() == ErrorSeverity.ERROR); assertTrue(e.getErrorTag() == ErrorTag.MISSING_ATTRIBUTE); assertTrue(e.getErrorType() == ErrorType.PROTOCOL); diff --git a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/NetconfMDSalMappingTest.java b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/NetconfMDSalMappingTest.java index 9b97ab6273..1af28ba830 100644 --- a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/NetconfMDSalMappingTest.java +++ b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/NetconfMDSalMappingTest.java @@ -14,7 +14,6 @@ import static org.junit.Assert.assertTrue; import java.net.URI; import org.junit.Test; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.xml.XmlElement; @@ -23,6 +22,7 @@ import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.netconf.mdsal.connector.TransactionProvider; import org.opendaylight.netconf.mdsal.connector.ops.get.GetConfig; import org.opendaylight.netconf.util.test.XmlFileLoader; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.w3c.dom.Document; diff --git a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpcTest.java b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpcTest.java index 684e2e995a..2e858e5a5a 100644 --- a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpcTest.java +++ b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/RuntimeRpcTest.java @@ -41,7 +41,6 @@ import org.opendaylight.mdsal.dom.api.DOMRpcService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.netconf.api.DocumentedException; -import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity; import org.opendaylight.netconf.api.DocumentedException.ErrorTag; import org.opendaylight.netconf.api.DocumentedException.ErrorType; import org.opendaylight.netconf.api.xml.XmlUtil; @@ -51,6 +50,7 @@ import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.netconf.util.test.XmlFileLoader; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.NoOpListenerRegistration; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; diff --git a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/ValidateTest.java b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/ValidateTest.java index 49af75c0c8..80d1e4e7fa 100644 --- a/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/ValidateTest.java +++ b/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/ValidateTest.java @@ -32,6 +32,7 @@ import org.opendaylight.netconf.mdsal.connector.DOMDataTransactionValidator; import org.opendaylight.netconf.mdsal.connector.DOMDataTransactionValidator.ValidationFailedException; import org.opendaylight.netconf.mdsal.connector.TransactionProvider; import org.opendaylight.yangtools.util.concurrent.FluentFutures; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.w3c.dom.Document; @RunWith(MockitoJUnitRunner.StrictStubs.class) @@ -59,7 +60,7 @@ public class ValidateTest { whenValidatorIsNotDefined(); final DocumentedException e = assertThrows(DocumentedException.class, () -> validate("messages/mapping/validate/validate.xml")); - assertEquals(DocumentedException.ErrorSeverity.ERROR, e.getErrorSeverity()); + assertEquals(ErrorSeverity.ERROR, e.getErrorSeverity()); assertEquals(DocumentedException.ErrorTag.OPERATION_NOT_SUPPORTED, e.getErrorTag()); assertEquals(DocumentedException.ErrorType.PROTOCOL, e.getErrorType()); } @@ -69,7 +70,7 @@ public class ValidateTest { whenUsingValidator(noopValidator); final DocumentedException e = assertThrows(DocumentedException.class, () -> validate("messages/mapping/validate/validate_no_source.xml")); - assertEquals(DocumentedException.ErrorSeverity.ERROR, e.getErrorSeverity()); + assertEquals(ErrorSeverity.ERROR, e.getErrorSeverity()); assertEquals(DocumentedException.ErrorTag.MISSING_ELEMENT, e.getErrorTag()); assertEquals(DocumentedException.ErrorType.PROTOCOL, e.getErrorType()); } @@ -79,7 +80,7 @@ public class ValidateTest { whenUsingValidator(noopValidator); final DocumentedException e = assertThrows(DocumentedException.class, () -> validate("messages/mapping/validate/validate_running.xml")); - assertEquals(DocumentedException.ErrorSeverity.ERROR, e.getErrorSeverity()); + assertEquals(ErrorSeverity.ERROR, e.getErrorSeverity()); assertEquals(DocumentedException.ErrorTag.OPERATION_NOT_SUPPORTED, e.getErrorTag()); assertEquals(DocumentedException.ErrorType.PROTOCOL, e.getErrorType()); } @@ -105,7 +106,7 @@ public class ValidateTest { final TransactionProvider transactionProvider = initCandidateTransaction(); final DocumentedException e = assertThrows(DocumentedException.class, () -> validate("messages/mapping/validate/validate.xml", transactionProvider)); - assertEquals(DocumentedException.ErrorSeverity.ERROR, e.getErrorSeverity()); + assertEquals(ErrorSeverity.ERROR, e.getErrorSeverity()); assertEquals(DocumentedException.ErrorTag.OPERATION_FAILED, e.getErrorTag()); assertEquals(DocumentedException.ErrorType.APPLICATION, e.getErrorType()); } diff --git a/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/GetSchema.java b/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/GetSchema.java index 6f71559ede..63d228c416 100644 --- a/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/GetSchema.java +++ b/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/GetSchema.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.config.yang.netconf.mdsal.monitoring; import java.util.HashMap; @@ -17,6 +16,7 @@ import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.util.mapping.AbstractSingletonNetconfOperation; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -60,8 +60,7 @@ public final class GetSchema extends AbstractSingletonNetconfOperation { errorInfo.put(DocumentedException.ErrorTag.OPERATION_FAILED.toString(), e.getMessage()); LOG.warn("Rpc error: {}", DocumentedException.ErrorTag.OPERATION_FAILED, e); throw new DocumentedException(e.getMessage(), e, DocumentedException.ErrorType.APPLICATION, - DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR, errorInfo); + DocumentedException.ErrorTag.OPERATION_FAILED, ErrorSeverity.ERROR, errorInfo); } final Element getSchemaResult; diff --git a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/DocumentedException.java b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/DocumentedException.java index 18a1a2642c..07636246bb 100644 --- a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/DocumentedException.java +++ b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/DocumentedException.java @@ -16,6 +16,7 @@ import java.util.Map; import java.util.Map.Entry; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -126,30 +127,6 @@ public class DocumentedException extends Exception { } } - public enum ErrorSeverity { - ERROR("error"), WARNING("warning"); - - private final String severityValue; - - ErrorSeverity(final String severityValue) { - this.severityValue = requireNonNull(severityValue); - } - - public String getSeverityValue() { - return this.severityValue; - } - - public static ErrorSeverity from(final String text) { - for (ErrorSeverity e : values()) { - if (e.getSeverityValue().equalsIgnoreCase(text)) { - return e; - } - } - - return ERROR; - } - } - private final ErrorType errorType; private final ErrorTag errorTag; private final ErrorSeverity errorSeverity; @@ -222,12 +199,16 @@ public class DocumentedException extends Exception { NodeList rpcErrorChildren = replyChild.getChildNodes(); for (int j = 0; j < rpcErrorChildren.getLength(); j++) { Node rpcErrorChild = rpcErrorChildren.item(j); + + // FIXME: use a switch expression here if (ERROR_TYPE.equals(rpcErrorChild.getLocalName())) { errorType = ErrorType.from(rpcErrorChild.getTextContent()); } else if (ERROR_TAG.equals(rpcErrorChild.getLocalName())) { errorTag = ErrorTag.from(rpcErrorChild.getTextContent()); } else if (ERROR_SEVERITY.equals(rpcErrorChild.getLocalName())) { - errorSeverity = ErrorSeverity.from(rpcErrorChild.getTextContent()); + final ErrorSeverity sev = ErrorSeverity.forElementBody(rpcErrorChild.getTextContent()); + // FIXME: this should be a hard error + errorSeverity = sev != null ? sev : ErrorSeverity.ERROR; } else if (ERROR_MESSAGE.equals(rpcErrorChild.getLocalName())) { errorMessage = rpcErrorChild.getTextContent(); allErrorMessages = allErrorMessages + errorMessage; @@ -290,7 +271,7 @@ public class DocumentedException extends Exception { rpcError.appendChild(createTextNode(doc, ERROR_TYPE, getErrorType().getTypeValue())); rpcError.appendChild(createTextNode(doc, ERROR_TAG, getErrorTag().getTagValue())); - rpcError.appendChild(createTextNode(doc, ERROR_SEVERITY, getErrorSeverity().getSeverityValue())); + rpcError.appendChild(createTextNode(doc, ERROR_SEVERITY, getErrorSeverity().elementBody())); rpcError.appendChild(createTextNode(doc, ERROR_MESSAGE, getLocalizedMessage())); Map errorInfoMap = getErrorInfo(); diff --git a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/NetconfDocumentedException.java b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/NetconfDocumentedException.java index 87b2ac7298..6f7ccfef94 100644 --- a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/NetconfDocumentedException.java +++ b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/NetconfDocumentedException.java @@ -10,6 +10,7 @@ package org.opendaylight.netconf.api; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Map; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.w3c.dom.Document; /** diff --git a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/MissingNameSpaceException.java b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/MissingNameSpaceException.java index 6f4b34694d..9701428e42 100644 --- a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/MissingNameSpaceException.java +++ b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/MissingNameSpaceException.java @@ -9,6 +9,7 @@ package org.opendaylight.netconf.api.xml; import java.util.Map; import org.opendaylight.netconf.api.DocumentedException; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; public class MissingNameSpaceException extends DocumentedException { private static final long serialVersionUID = 1L; diff --git a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/UnexpectedElementException.java b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/UnexpectedElementException.java index ebc3a85ad3..ed5e9c8929 100644 --- a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/UnexpectedElementException.java +++ b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/UnexpectedElementException.java @@ -9,6 +9,7 @@ package org.opendaylight.netconf.api.xml; import java.util.Map; import org.opendaylight.netconf.api.DocumentedException; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; public class UnexpectedElementException extends DocumentedException { private static final long serialVersionUID = 1L; diff --git a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/UnexpectedNamespaceException.java b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/UnexpectedNamespaceException.java index 823fa30837..001107f7a7 100644 --- a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/UnexpectedNamespaceException.java +++ b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/UnexpectedNamespaceException.java @@ -9,6 +9,7 @@ package org.opendaylight.netconf.api.xml; import java.util.Map; import org.opendaylight.netconf.api.DocumentedException; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; public class UnexpectedNamespaceException extends DocumentedException { private static final long serialVersionUID = 1L; diff --git a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlElement.java b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlElement.java index a07a785f1d..d19ce378b8 100644 --- a/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlElement.java +++ b/netconf/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlElement.java @@ -20,6 +20,7 @@ import java.util.Map; import java.util.Optional; import javax.xml.XMLConstants; import org.opendaylight.netconf.api.DocumentedException; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Attr; @@ -87,7 +88,7 @@ public final class XmlElement { throw new DocumentedException("Attribute doesn't start with :", DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.INVALID_VALUE, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } prefix = attribKey.substring(XMLConstants.XMLNS_ATTRIBUTE.length() + 1); } @@ -112,7 +113,7 @@ public final class XmlElement { getName()), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } } @@ -124,7 +125,7 @@ public final class XmlElement { expectedNamespace), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } } @@ -136,7 +137,7 @@ public final class XmlElement { expectedNamespace), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } } @@ -211,10 +212,7 @@ public final class XmlElement { * @return List of child elements */ public List getChildElements(final String tagName) { - return getChildElementsInternal(e -> { - // localName returns pure localName without prefix - return e.getLocalName().equals(tagName); - }); + return getChildElementsInternal(e -> e.getLocalName().equals(tagName)); } public List getChildElementsWithinNamespace(final String childName, final String namespace) { @@ -302,7 +300,7 @@ public final class XmlElement { childName, toString(), children.size()), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.INVALID_VALUE, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } return children.get(0); @@ -314,7 +312,7 @@ public final class XmlElement { throw new DocumentedException("One element " + childName + " expected in " + toString(), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.INVALID_VALUE, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } return nameElements.get(0); } @@ -326,7 +324,7 @@ public final class XmlElement { children.size()), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.INVALID_VALUE, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } return children.get(0); } @@ -346,7 +344,7 @@ public final class XmlElement { throw new DocumentedException(getName() + " should contain text.", DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.INVALID_VALUE, - DocumentedException.ErrorSeverity.ERROR + ErrorSeverity.ERROR ); } @@ -368,7 +366,7 @@ public final class XmlElement { toString()), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } return attribute; } @@ -396,7 +394,7 @@ public final class XmlElement { throw new MissingNameSpaceException(String.format("No namespace defined for %s", this), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } return namespaceURI.get(); } @@ -465,7 +463,7 @@ public final class XmlElement { throw new DocumentedException(String.format("Unrecognised elements %s in %s", childElements, this), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.INVALID_VALUE, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } } diff --git a/netconf/netconf-api/src/test/java/org/opendaylight/netconf/api/NetconfDocumentedExceptionTest.java b/netconf/netconf-api/src/test/java/org/opendaylight/netconf/api/NetconfDocumentedExceptionTest.java index 1e79339cf6..b21ffbdb7f 100644 --- a/netconf/netconf-api/src/test/java/org/opendaylight/netconf/api/NetconfDocumentedExceptionTest.java +++ b/netconf/netconf-api/src/test/java/org/opendaylight/netconf/api/NetconfDocumentedExceptionTest.java @@ -5,15 +5,14 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.api; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import com.google.common.collect.ImmutableMap; -import java.util.Collections; +import com.google.common.collect.Iterators; import java.util.Iterator; +import java.util.Map; import javax.xml.namespace.NamespaceContext; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; @@ -22,6 +21,7 @@ import javax.xml.xpath.XPathFactory; import org.junit.Before; import org.junit.Test; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -42,7 +42,7 @@ public class NetconfDocumentedExceptionTest { xpath.setNamespaceContext(new NamespaceContext() { @Override public Iterator getPrefixes(final String namespaceURI) { - return Collections.singletonList("netconf").iterator(); + return Iterators.singletonIterator("netconf"); } @Override @@ -63,8 +63,8 @@ public class NetconfDocumentedExceptionTest { DocumentedException ex = new NetconfDocumentedException(errorMessage, null, DocumentedException.ErrorType.PROTOCOL, DocumentedException.ErrorTag.DATA_EXISTS, - DocumentedException.ErrorSeverity.WARNING, - ImmutableMap.of("foo", "bar")); + ErrorSeverity.WARNING, + Map.of("foo", "bar")); final Document doc = ex.toXMLDocument(); assertNotNull("Document is null", doc); @@ -89,8 +89,7 @@ public class NetconfDocumentedExceptionTest { final Node errorSeverityNode = getNode("netconf:error-severity", rpcErrorNode); assertNotNull("error-severity not found", errorSeverityNode); - assertEquals("error-severity", DocumentedException.ErrorSeverity.WARNING.getSeverityValue(), - errorSeverityNode.getTextContent()); + assertEquals("error-severity", ErrorSeverity.WARNING.elementBody(), errorSeverityNode.getTextContent()); final Node errorInfoNode = getNode("netconf:error-info/netconf:foo", rpcErrorNode); assertNotNull("foo not found", errorInfoNode); @@ -105,11 +104,11 @@ public class NetconfDocumentedExceptionTest { ex = DocumentedException.fromXMLDocument(doc); assertNotNull("NetconfDocumentedException is null", ex); - assertEquals("getErrorSeverity", DocumentedException.ErrorSeverity.WARNING, ex.getErrorSeverity()); + assertEquals("getErrorSeverity", ErrorSeverity.WARNING, ex.getErrorSeverity()); assertEquals("getErrorTag", DocumentedException.ErrorTag.DATA_EXISTS, ex.getErrorTag()); assertEquals("getErrorType", DocumentedException.ErrorType.PROTOCOL, ex.getErrorType()); assertEquals("getLocalizedMessage", errorMessage, ex.getLocalizedMessage()); - assertEquals("getErrorInfo", ImmutableMap.of("foo", "bar"), ex.getErrorInfo()); + assertEquals("getErrorInfo", Map.of("foo", "bar"), ex.getErrorInfo()); } @SuppressWarnings("unchecked") diff --git a/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSessionListener.java b/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSessionListener.java index 026a481ae0..cdf9ee3f05 100644 --- a/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSessionListener.java +++ b/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSessionListener.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.impl; import com.google.common.base.Preconditions; @@ -23,6 +22,7 @@ import org.opendaylight.netconf.impl.osgi.NetconfOperationRouter; import org.opendaylight.netconf.notifications.NetconfNotification; import org.opendaylight.netconf.util.messages.SendErrorExceptionUtil; import org.opendaylight.netconf.util.messages.SubtreeFilter; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -138,8 +138,7 @@ public class NetconfServerSessionListener implements NetconfSessionListener { - invocation.getArgument(0).run(); + invocation.getArgument(0, Runnable.class).run(); return null; }).when(eventLoop).execute(any(Runnable.class)); doReturn(true).when(eventLoop).inEventLoop(); @@ -83,12 +86,17 @@ public class DefaultCloseSessionTest { verify(listener).onSessionTerminated(any(NetconfServerSession.class), any(NetconfTerminationReason.class)); } - @Test(expected = DocumentedException.class) + @Test public void testDefaultCloseSession2() throws Exception { - AutoCloseable res = mock(AutoCloseable.class); - doThrow(NetconfDocumentedException.class).when(res).close(); - DefaultCloseSession session = new DefaultCloseSession("", res); + final NetconfDocumentedException expectedCause = new NetconfDocumentedException("testMessage"); + final AutoCloseable res = mock(AutoCloseable.class); + doThrow(expectedCause).when(res).close(); + final DefaultCloseSession session = new DefaultCloseSession("testSession", res); XmlElement elem = XmlElement.fromDomElement(XmlUtil.readXmlToElement("")); - session.handleWithNoSubsequentOperations(XmlUtil.newDocument(), elem); + + final DocumentedException ex = assertThrows(DocumentedException.class, + () -> session.handleWithNoSubsequentOperations(XmlUtil.newDocument(), elem)); + assertEquals("Unable to properly close session testSession", ex.getMessage()); + assertSame(expectedCause, ex.getCause()); } } diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/utils/NetconfTopologyUtils.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/utils/NetconfTopologyUtils.java index aa8ed9bd66..56884d3531 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/utils/NetconfTopologyUtils.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/utils/NetconfTopologyUtils.java @@ -23,6 +23,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. import org.opendaylight.yangtools.yang.binding.Identifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; public final class NetconfTopologyUtils { public static final long DEFAULT_REQUEST_TIMEOUT_MILLIS = 60000L; @@ -82,6 +83,6 @@ public final class NetconfTopologyUtils { public static DocumentedException createMasterIsDownException(final RemoteDeviceId id, final Exception cause) { return new DocumentedException(id + ":Master is down. Please try again.", cause, DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.WARNING); + ErrorSeverity.WARNING); } } diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfServiceTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfServiceTest.java index 688ff46266..aa3bc71964 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfServiceTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/netconf/ProxyNetconfServiceTest.java @@ -46,6 +46,7 @@ import org.opendaylight.netconf.topology.singleton.messages.netconf.ReplaceEditC import org.opendaylight.netconf.topology.singleton.messages.netconf.UnlockRequest; import org.opendaylight.netconf.topology.singleton.messages.rpc.InvokeRpcMessageReply; import org.opendaylight.netconf.topology.singleton.messages.transactions.EmptyReadResponse; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @@ -300,7 +301,7 @@ public class ProxyNetconfServiceTest { private static void verifyDocumentedException(final Throwable cause) { assertTrue("Unexpected cause " + cause, cause instanceof DocumentedException); final DocumentedException de = (DocumentedException) cause; - assertEquals(DocumentedException.ErrorSeverity.WARNING, de.getErrorSeverity()); + assertEquals(ErrorSeverity.WARNING, de.getErrorSeverity()); assertEquals(DocumentedException.ErrorTag.OPERATION_FAILED, de.getErrorTag()); assertEquals(DocumentedException.ErrorType.APPLICATION, de.getErrorType()); } diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransactionTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransactionTest.java index 8cbfb26268..3ec6f89116 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransactionTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransactionTest.java @@ -43,6 +43,7 @@ import org.opendaylight.netconf.topology.singleton.messages.transactions.MergeRe import org.opendaylight.netconf.topology.singleton.messages.transactions.PutRequest; import org.opendaylight.netconf.topology.singleton.messages.transactions.ReadRequest; import org.opendaylight.netconf.topology.singleton.messages.transactions.SubmitRequest; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @@ -400,7 +401,7 @@ public class ProxyReadWriteTransactionTest { private static void verifyDocumentedException(final Throwable cause) { assertTrue("Unexpected cause " + cause, cause instanceof DocumentedException); final DocumentedException de = (DocumentedException) cause; - assertEquals(DocumentedException.ErrorSeverity.WARNING, de.getErrorSeverity()); + assertEquals(ErrorSeverity.WARNING, de.getErrorSeverity()); assertEquals(DocumentedException.ErrorTag.OPERATION_FAILED, de.getErrorTag()); assertEquals(DocumentedException.ErrorType.APPLICATION, de.getErrorType()); } diff --git a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/mapping/AbstractLastNetconfOperation.java b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/mapping/AbstractLastNetconfOperation.java index ef78be50cc..b99f75d346 100644 --- a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/mapping/AbstractLastNetconfOperation.java +++ b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/mapping/AbstractLastNetconfOperation.java @@ -11,6 +11,7 @@ import org.opendaylight.netconf.api.DocumentedException; import org.opendaylight.netconf.api.xml.XmlElement; import org.opendaylight.netconf.mapping.api.HandlingPriority; import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -28,7 +29,7 @@ public abstract class AbstractLastNetconfOperation extends AbstractNetconfOperat "No netconf operation expected to be subsequent to %s, but is %s", this, subsequentOperation), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.MALFORMED_MESSAGE, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } return handleWithNoSubsequentOperations(document, operationElement); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java index 595f536593..98fb17d856 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/AbstractWriteTx.java @@ -32,6 +32,7 @@ import org.opendaylight.netconf.api.ModifyAction; import org.opendaylight.netconf.api.NetconfDocumentedException; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfBaseOps; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; @@ -231,7 +232,7 @@ public abstract class AbstractWriteTx implements DOMDataTreeWriteTransaction { new Exception(throwable), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); transformed.setException(exception); } }, MoreExecutors.directExecutor()); @@ -244,7 +245,7 @@ public abstract class AbstractWriteTx implements DOMDataTreeWriteTransaction { private void extractResult(final List domRpcResults, final SettableFuture> transformed) { DocumentedException.ErrorType errType = DocumentedException.ErrorType.APPLICATION; - DocumentedException.ErrorSeverity errSeverity = DocumentedException.ErrorSeverity.ERROR; + ErrorSeverity errSeverity = ErrorSeverity.ERROR; StringBuilder msgBuilder = new StringBuilder(); boolean errorsEncouneterd = false; String errorTag = "operation-failed"; @@ -271,18 +272,8 @@ public abstract class AbstractWriteTx implements DOMDataTreeWriteTransaction { errType = DocumentedException.ErrorType.APPLICATION; break; } - final RpcError.ErrorSeverity severity = error.getSeverity(); - switch (severity) { - case ERROR: - errSeverity = DocumentedException.ErrorSeverity.ERROR; - break; - case WARNING: - errSeverity = DocumentedException.ErrorSeverity.WARNING; - break; - default: - errSeverity = DocumentedException.ErrorSeverity.ERROR; - break; - } + + errSeverity = error.getSeverity().toNetconf(); msgBuilder.append(error.getMessage()); msgBuilder.append(error.getInfo()); errorTag = error.getTag(); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java index 1753029fb6..a3d53d268f 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java @@ -51,9 +51,9 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.not import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata; import org.opendaylight.yangtools.rfc7952.data.util.ImmutableNormalizedMetadata; import org.opendaylight.yangtools.rfc7952.data.util.ImmutableNormalizedMetadata.Builder; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcError; -import org.opendaylight.yangtools.yang.common.RpcError.ErrorSeverity; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.common.XMLNamespace; @@ -295,7 +295,7 @@ public final class NetconfMessageTransformUtil { throw new NetconfDocumentedException("Response message contained unknown \"message-id\"", null, NetconfDocumentedException.ErrorType.PROTOCOL, NetconfDocumentedException.ErrorTag.BAD_ATTRIBUTE, - NetconfDocumentedException.ErrorSeverity.ERROR, errorInfo); + ErrorSeverity.ERROR, errorInfo); } } @@ -316,8 +316,7 @@ public final class NetconfMessageTransformUtil { } } - final ErrorSeverity severity = toRpcErrorSeverity(ex.getErrorSeverity()); - return severity == ErrorSeverity.ERROR + return ex.getErrorSeverity() == ErrorSeverity.ERROR ? RpcResultBuilder.newError(toRpcErrorType(ex.getErrorType()), ex.getErrorTag().getTagValue(), ex.getLocalizedMessage(), null, infoBuilder.toString(), ex.getCause()) : RpcResultBuilder.newWarning( @@ -325,15 +324,6 @@ public final class NetconfMessageTransformUtil { ex.getLocalizedMessage(), null, infoBuilder.toString(), ex.getCause()); } - private static ErrorSeverity toRpcErrorSeverity(final NetconfDocumentedException.ErrorSeverity severity) { - switch (severity) { - case WARNING: - return RpcError.ErrorSeverity.WARNING; - default: - return RpcError.ErrorSeverity.ERROR; - } - } - private static RpcError.ErrorType toRpcErrorType(final NetconfDocumentedException.ErrorType type) { switch (type) { case PROTOCOL: @@ -570,13 +560,10 @@ public final class NetconfMessageTransformUtil { public static RpcResult toRpcResult(final FailedNetconfMessage message) { return RpcResultBuilder.failed() - .withRpcError( - toRpcError( - new NetconfDocumentedException( - message.getException().getMessage(), - DocumentedException.ErrorType.APPLICATION, - DocumentedException.ErrorTag.MALFORMED_MESSAGE, - DocumentedException.ErrorSeverity.ERROR))) + .withRpcError(toRpcError(new NetconfDocumentedException(message.getException().getMessage(), + DocumentedException.ErrorType.APPLICATION, + DocumentedException.ErrorTag.MALFORMED_MESSAGE, + ErrorSeverity.ERROR))) .build(); } } diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/customrpc/SettableRpc.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/customrpc/SettableRpc.java index ed43703e3e..b7c35e0fbd 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/customrpc/SettableRpc.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/customrpc/SettableRpc.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.test.tool.customrpc; import java.io.File; @@ -17,6 +16,7 @@ import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.mapping.api.HandlingPriority; import org.opendaylight.netconf.mapping.api.NetconfOperation; import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.w3c.dom.Document; /** @@ -52,7 +52,7 @@ class SettableRpc implements NetconfOperation { } else if (subsequentOperation.isExecutionTermination()) { throw new DocumentedException("Mapping not found " + XmlUtil.toString(requestMessage), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_NOT_SUPPORTED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } else { return subsequentOperation.execute(requestMessage); } diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/monitoring/Get.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/monitoring/Get.java index b8605d4324..a51f4712e1 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/monitoring/Get.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/monitoring/Get.java @@ -7,7 +7,7 @@ */ package org.opendaylight.netconf.test.tool.monitoring; -import java.util.Collections; +import java.util.Map; import org.opendaylight.netconf.api.DocumentedException; import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService; import org.opendaylight.netconf.api.xml.XmlElement; @@ -15,6 +15,7 @@ import org.opendaylight.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.netconf.mapping.api.HandlingPriority; import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution; import org.opendaylight.netconf.util.mapping.AbstractNetconfOperation; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -56,7 +57,7 @@ public class Get extends AbstractNetconfOperation { throw new DocumentedException(String.format("Subsequent netconf operation expected by %s", this), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } try { @@ -76,8 +77,8 @@ public class Get extends AbstractNetconfOperation { throw new DocumentedException(errorMessage, e, DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, - DocumentedException.ErrorSeverity.ERROR, - Collections.singletonMap(DocumentedException.ErrorSeverity.ERROR.toString(), e.getMessage())); + ErrorSeverity.ERROR, + Map.of(ErrorSeverity.ERROR.toString(), e.getMessage())); } } diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/rpchandler/SettableRpc.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/rpchandler/SettableRpc.java index a6e0f07773..75f1b71adb 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/rpchandler/SettableRpc.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/rpchandler/SettableRpc.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.test.tool.rpchandler; import java.util.Optional; @@ -16,6 +15,7 @@ import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.mapping.api.HandlingPriority; import org.opendaylight.netconf.mapping.api.NetconfOperation; import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.w3c.dom.Document; /** @@ -51,7 +51,7 @@ class SettableRpc implements NetconfOperation { } else if (subsequentOperation.isExecutionTermination()) { throw new DocumentedException("Mapping not found " + XmlUtil.toString(requestMessage), DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_NOT_SUPPORTED, - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); } else { return subsequentOperation.execute(requestMessage); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java index f5c48882d7..de7c9c02a9 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/transactions/NetconfRestconfTransaction.java @@ -34,6 +34,7 @@ import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.netconf.api.DocumentedException; import org.opendaylight.netconf.api.NetconfDocumentedException; import org.opendaylight.netconf.dom.api.NetconfDataTreeService; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; @@ -212,7 +213,7 @@ final class NetconfRestconfTransaction extends RestconfTransaction { } else { return Futures.immediateFailedFuture(new NetconfDocumentedException("Lock operation failed", DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.LOCK_DENIED, - DocumentedException.ErrorSeverity.ERROR)); + ErrorSeverity.ERROR)); } }, MoreExecutors.directExecutor()); @@ -249,7 +250,7 @@ final class NetconfRestconfTransaction extends RestconfTransaction { private static TransactionCommitFailedException toCommitFailedException( final Collection errors) { DocumentedException.ErrorType errType = DocumentedException.ErrorType.APPLICATION; - DocumentedException.ErrorSeverity errSeverity = DocumentedException.ErrorSeverity.ERROR; + ErrorSeverity errSeverity = ErrorSeverity.ERROR; StringJoiner msgBuilder = new StringJoiner(" "); String errorTag = "operation-failed"; for (final RpcError error : errors) { @@ -268,15 +269,7 @@ final class NetconfRestconfTransaction extends RestconfTransaction { errType = DocumentedException.ErrorType.APPLICATION; break; } - switch (error.getSeverity()) { - case WARNING: - errSeverity = DocumentedException.ErrorSeverity.WARNING; - break; - case ERROR: - default: - errSeverity = DocumentedException.ErrorSeverity.ERROR; - break; - } + errSeverity = error.getSeverity().toNetconf(); msgBuilder.add(error.getMessage()); msgBuilder.add(error.getInfo()); errorTag = error.getTag(); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtilTest.java index 4d6230bd17..35f4d18b4e 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtilTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtilTest.java @@ -39,6 +39,7 @@ import org.opendaylight.restconf.common.errors.RestconfError.ErrorType; import org.opendaylight.restconf.nb.rfc8040.rests.transactions.MdsalRestconfStrategy; import org.opendaylight.restconf.nb.rfc8040.rests.transactions.NetconfRestconfStrategy; import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfStrategy; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @RunWith(MockitoJUnitRunner.StrictStubs.class) @@ -88,7 +89,7 @@ public class DeleteDataTransactionUtilTest { .thenReturn(immediateFalseFluentFuture()); final NetconfDocumentedException exception = new NetconfDocumentedException("id", DocumentedException.ErrorType.RPC, DocumentedException.ErrorTag.from("data-missing"), - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); final SettableFuture ret = SettableFuture.create(); ret.setException(new TransactionCommitFailedException( String.format("Commit of transaction %s failed", this), exception)); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtilTest.java index 4129d7f87c..5af6b45e5f 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtilTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtilTest.java @@ -50,6 +50,7 @@ import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils; import org.opendaylight.restconf.nb.rfc8040.rests.transactions.MdsalRestconfStrategy; import org.opendaylight.restconf.nb.rfc8040.rests.transactions.NetconfRestconfStrategy; import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfStrategy; +import org.opendaylight.yangtools.yang.common.ErrorSeverity; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -233,7 +234,7 @@ public class PatchDataTransactionUtilTest { this.targetNodeForCreateAndDelete); final NetconfDocumentedException exception = new NetconfDocumentedException("id", DocumentedException.ErrorType.RPC, DocumentedException.ErrorTag.from("data-missing"), - DocumentedException.ErrorSeverity.ERROR); + ErrorSeverity.ERROR); final SettableFuture ret = SettableFuture.create(); ret.setException(new TransactionCommitFailedException( String.format("Commit of transaction %s failed", this), exception)); -- 2.36.6