From f55532fe910fb6a1d8e4b849c69573c7c5b7470f Mon Sep 17 00:00:00 2001 From: Patrick Boos Date: Thu, 10 Jul 2025 05:57:45 +0200 Subject: [PATCH] Exclude library internal exception `unhandled token type NOT_AVAILABLE` --- .../InternalViolationExclusions.java | 9 ++++++++- .../InternalViolationExclusionsTest.java | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/exclusions/InternalViolationExclusions.java b/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/exclusions/InternalViolationExclusions.java index ee29649a..beb81d20 100644 --- a/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/exclusions/InternalViolationExclusions.java +++ b/openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/exclusions/InternalViolationExclusions.java @@ -18,7 +18,8 @@ public boolean isExcluded(OpenApiViolation violation) { || falsePositiveRequestWith4xxResponse(violation) || customViolationExclusions.isExcluded(violation) || oneOfMatchesMoreThanOneSchema(violation) - || isConcurrentModificationExceptionInLibrary(violation); + || isConcurrentModificationExceptionInLibrary(violation) + || isUnhandledUncheckedExecutionExceptionInLibrary(violation); } private static boolean oneOfMatchesMoreThanOneSchema(OpenApiViolation violation) { @@ -61,4 +62,10 @@ private boolean isConcurrentModificationExceptionInLibrary(OpenApiViolation viol return violation.getRule() != null && violation.getRule().endsWith(".body.schema.unknownError") && violation.getMessage().contains("java.util.ConcurrentModificationException"); } + + private boolean isUnhandledUncheckedExecutionExceptionInLibrary(OpenApiViolation violation) { + return violation.getRule() != null && violation.getRule().endsWith(".body.schema.unknownError") + && violation.getMessage().contains("UncheckedExecutionException") + && violation.getMessage().contains("unhandled token type NOT_AVAILABLE"); + } } diff --git a/openapi-validation-core/src/test/java/com/getyourguide/openapi/validation/core/exclusions/InternalViolationExclusionsTest.java b/openapi-validation-core/src/test/java/com/getyourguide/openapi/validation/core/exclusions/InternalViolationExclusionsTest.java index 30dd66ce..34f39a7d 100644 --- a/openapi-validation-core/src/test/java/com/getyourguide/openapi/validation/core/exclusions/InternalViolationExclusionsTest.java +++ b/openapi-validation-core/src/test/java/com/getyourguide/openapi/validation/core/exclusions/InternalViolationExclusionsTest.java @@ -179,6 +179,26 @@ public void whenUnknownErrorWithConcurrentModificationExceptionThenViolationExcl .build()); } + @Test + public void whenUnknownErrorWithNotAvailableTokenThenViolationExcluded() { + when(customViolationExclusions.isExcluded(any())).thenReturn(false); + String message = + "An error occurred during schema validation - com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException: unhandled token type NOT_AVAILABLE."; + + checkViolationExcluded(OpenApiViolation.builder() + .direction(Direction.RESPONSE) + .rule("validation.request.body.schema.unknownError") + .responseStatus(200) + .message(message) + .build()); + checkViolationExcluded(OpenApiViolation.builder() + .direction(Direction.RESPONSE) + .rule("validation.response.body.schema.unknownError") + .responseStatus(200) + .message(message) + .build()); + } + private void checkViolationNotExcluded(OpenApiViolation violation) { var isExcluded = violationExclusions.isExcluded(violation);