From 4f62548b33946e01f18cba999e73af639a722361 Mon Sep 17 00:00:00 2001 From: leadpony Date: Sun, 8 Dec 2019 21:22:40 +0900 Subject: [PATCH] Add a fallback for JsonValidationProvider#provider() See Issue #40 --- .../justify/spi/JsonValidationProvider.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/justify/src/main/java/org/leadpony/justify/spi/JsonValidationProvider.java b/justify/src/main/java/org/leadpony/justify/spi/JsonValidationProvider.java index 0bf0b629..050d90b1 100644 --- a/justify/src/main/java/org/leadpony/justify/spi/JsonValidationProvider.java +++ b/justify/src/main/java/org/leadpony/justify/spi/JsonValidationProvider.java @@ -42,13 +42,14 @@ public abstract class JsonValidationProvider { * @throws JsonException if there is no provider found. */ public static JsonValidationProvider provider() { - ServiceLoader loader = ServiceLoader.load(JsonValidationProvider.class); - Iterator it = loader.iterator(); - if (it.hasNext()) { - return it.next(); - } else { - throw new JsonException("JSON validation provider was not found."); + JsonValidationProvider provider = loadProvider(Thread.currentThread().getContextClassLoader()); + if (provider == null) { + provider = loadProvider(JsonValidationProvider.class.getClassLoader()); + if (provider == null) { + throw new JsonException("JSON validation provider was not found."); + } } + return provider; } /** @@ -64,4 +65,13 @@ protected JsonValidationProvider() { * @throws JsonException if an error is encountered while creating the instance. */ public abstract JsonValidationService createService(); + + private static JsonValidationProvider loadProvider(ClassLoader classLoader) { + ServiceLoader loader = ServiceLoader.load(JsonValidationProvider.class, classLoader); + Iterator it = loader.iterator(); + if (it.hasNext()) { + return it.next(); + } + return null; + } }