From ae1cae2af87d71ae4acd0cf108d51a768db23c82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Erik=20St=C3=B8wer?= Date: Thu, 21 Apr 2022 19:28:29 +0200 Subject: [PATCH] Override default uri format validator Ref: https://github.com/everit-org/json-schema/issues/455 --- .../gbfs/validation/files/FileValidator.java | 9 +++++-- .../validation/files/URIFormatValidator.java | 27 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/entur/gbfs/validation/files/URIFormatValidator.java diff --git a/src/main/java/org/entur/gbfs/validation/files/FileValidator.java b/src/main/java/org/entur/gbfs/validation/files/FileValidator.java index 47adf22..a81954c 100644 --- a/src/main/java/org/entur/gbfs/validation/files/FileValidator.java +++ b/src/main/java/org/entur/gbfs/validation/files/FileValidator.java @@ -92,11 +92,16 @@ protected static Schema loadSchema(String version, String feedName) { try { InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("schema/v"+version+"/"+feedName+".json"); JSONObject rawSchema = new JSONObject(new JSONTokener(inputStream)); - return SchemaLoader.load(rawSchema); + SchemaLoader schemaLoader = SchemaLoader.builder() + .enableOverrideOfBuiltInFormatValidators() + .addFormatValidator(new URIFormatValidator()) + .schemaJson(rawSchema) + .build(); + + return schemaLoader.load().build(); } catch (Exception e) { System.out.println("Caught exception loading schema for " + feedName + " and version " + version); throw e; } - } } diff --git a/src/main/java/org/entur/gbfs/validation/files/URIFormatValidator.java b/src/main/java/org/entur/gbfs/validation/files/URIFormatValidator.java new file mode 100644 index 0000000..c951d20 --- /dev/null +++ b/src/main/java/org/entur/gbfs/validation/files/URIFormatValidator.java @@ -0,0 +1,27 @@ +package org.entur.gbfs.validation.files; + +import org.everit.json.schema.FormatValidator; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Optional; + +public class URIFormatValidator implements FormatValidator { + @Override + public Optional validate(String subject) { + try { + new URI(subject); + return Optional.empty(); + } catch (URISyntaxException e) { + if (e.getReason().equalsIgnoreCase("expected authority")) { + return Optional.empty(); + } + } + return Optional.of("Invalid URI"); + } + + @Override + public String formatName() { + return "uri"; + } +}