From 9c06901f26a8429c18a6ca1967dc293a685ffa98 Mon Sep 17 00:00:00 2001 From: Oleksandr Zharov Date: Wed, 3 Apr 2024 17:34:03 +0200 Subject: [PATCH] Fix 500 server error in PUT request Fixed error response for PUT create device request. One of the catch cases didn't throw errors in the correct way causing a 500 server error response instead of a proper message. JIRA: NETCONF-1268 Change-Id: Iaf94814c5f5b1f4ad3bb12c8408ffa72acf0d25c Signed-off-by: Oleksandr Zharov --- .../restconf/server/api/ResourceBody.java | 3 ++- .../nb/rfc8040/databind/JsonResourceBodyTest.java | 13 +++++++++++++ .../src/test/resources/modules/netconf1268.yang | 10 ++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 restconf/restconf-nb/src/test/resources/modules/netconf1268.yang diff --git a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/ResourceBody.java b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/ResourceBody.java index b6f75f24e1..da143d4a2f 100644 --- a/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/ResourceBody.java +++ b/restconf/restconf-nb/src/main/java/org/opendaylight/restconf/server/api/ResourceBody.java @@ -57,7 +57,8 @@ public abstract sealed class ResourceBody extends RequestBody permits JsonResour throw e; } catch (RuntimeException e) { throwIfYangError(e); - throw e; + throw new RestconfDocumentedException("Error parsing input: " + e.getMessage(), ErrorType.PROTOCOL, + ErrorTag.MALFORMED_MESSAGE, e); } final var parsedData = holder.getResult().data(); diff --git a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/databind/JsonResourceBodyTest.java b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/databind/JsonResourceBodyTest.java index b9a810b910..41c3ec6767 100644 --- a/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/databind/JsonResourceBodyTest.java +++ b/restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/databind/JsonResourceBodyTest.java @@ -138,4 +138,17 @@ class JsonResourceBodyTest extends AbstractResourceBodyTest { } }""")); } + + @Test + void testBinaryTypeError() { + final var error = assertError(() -> parse("netconf1268:foo", """ + { + "netconf1268:foo": { + "bar": "a" + } + }""")); + assertEquals("Error parsing input: Last unit does not have enough valid bits", error.getErrorMessage()); + assertEquals(ErrorType.PROTOCOL, error.getErrorType()); + assertEquals(ErrorTag.MALFORMED_MESSAGE, error.getErrorTag()); + } } diff --git a/restconf/restconf-nb/src/test/resources/modules/netconf1268.yang b/restconf/restconf-nb/src/test/resources/modules/netconf1268.yang new file mode 100644 index 0000000000..6f1ff77ed6 --- /dev/null +++ b/restconf/restconf-nb/src/test/resources/modules/netconf1268.yang @@ -0,0 +1,10 @@ +module netconf1268 { + namespace "netconf:1268"; + prefix "netconf1268"; + + container foo { + leaf bar { + type binary; + } + } +} -- 2.36.6