Report ErrorType.APPLICATION from codecs 93/96693/1
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 25 Jun 2021 15:27:39 +0000 (17:27 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 28 Jun 2021 12:25:38 +0000 (14:25 +0200)
Codecs are cross-referencing an already-parsed value with YANG
constraints, which puts them squarely to Content layer of NETCONF
protocol -- and that implies ErrorType.APPLICATION.

JIRA: YANGTOOLS-1300
Change-Id: Icd6d2fbfbda554bc09978725d33f927d87d526ac
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit f590327d054f08b91cea58020c164b44afa9ee2a)

yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/AbstractIntegerStringCodec.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/BinaryStringCodec.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/CompiledPatternContext.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/StringStringCodec.java

index 28df15b1acb449916eba405ea76c4778b7a9b76a..ac69cab0cf8a15bcc09fc81418607eacce15af05 100644 (file)
@@ -99,7 +99,7 @@ public abstract class AbstractIntegerStringCodec<N extends Number & Comparable<N
         if (rangeConstraint != null) {
             final RangeSet<N> ranges = rangeConstraint.getAllowedRanges();
             if (!ranges.contains(deserialized)) {
-                throw new YangInvalidValueException(ErrorType.PROTOCOL, rangeConstraint,
+                throw new YangInvalidValueException(ErrorType.APPLICATION, rangeConstraint,
                     "Value '" + deserialized + "'  is not in required ranges " + ranges);
             }
         }
@@ -127,9 +127,7 @@ public abstract class AbstractIntegerStringCodec<N extends Number & Comparable<N
     }
 
     private static int provideBase(final String integer) {
-        if (integer.length() == 1 && integer.charAt(0) == '0') {
-            return 10;
-        } else if (INT_PATTERN.matcher(integer).matches()) {
+        if ((integer.length() == 1 && integer.charAt(0) == '0') || INT_PATTERN.matcher(integer).matches()) {
             return 10;
         } else if (HEX_PATTERN.matcher(integer).matches()) {
             return 16;
index 172d55d7f6534534a1e012b36435f2421c1482e1..920a19897e752f28575b76dfac756a4070fe868e 100644 (file)
@@ -36,7 +36,7 @@ public abstract class BinaryStringCodec extends TypeDefinitionAwareCodec<byte[],
         void validate(final byte[] value) {
             final RangeSet<Integer> ranges = lengthConstraint.getAllowedRanges();
             if (!ranges.contains(value.length)) {
-                throw new YangInvalidValueException(ErrorType.PROTOCOL, lengthConstraint,
+                throw new YangInvalidValueException(ErrorType.APPLICATION, lengthConstraint,
                         "Value length " + value.length + " is not in required ranges " + ranges);
             }
         }
index 4419712893cc4beec67794a5f7657820660f0598..c6fd32c15d6bcaf6f3d5ee8f4f4ebbf00e7777aa 100644 (file)
@@ -42,7 +42,7 @@ final class CompiledPatternContext {
 
     void validate(final String str) {
         if (pattern.matcher(str).matches() == invert) {
-            throw new YangInvalidValueException(ErrorType.PROTOCOL, constraint,
+            throw new YangInvalidValueException(ErrorType.APPLICATION, constraint,
                 "Value '" + str + "' " + (invert ? "matches" : "does not match") + " regular expression '"
                         + constraint.getRegularExpressionString() + "'");
         }
index cb34f1cc4a0fc64cb90eca742801da78e36d51a5..4d1bcedc3c145cdfc4486efb9f4e23ba77c7ed6d 100644 (file)
@@ -50,7 +50,7 @@ public class StringStringCodec extends TypeDefinitionAwareCodec<String, StringTy
         if (lengthConstraint != null) {
             final RangeSet<Integer> ranges = lengthConstraint.getAllowedRanges();
             if (!ranges.contains(str.codePointCount(0, str.length()))) {
-                throw new YangInvalidValueException(ErrorType.PROTOCOL, lengthConstraint,
+                throw new YangInvalidValueException(ErrorType.APPLICATION, lengthConstraint,
                     "String " + str + " does not match allowed lengths " + ranges);
             }
         }