|
1 | 1 | (ns json-schema.core |
2 | 2 | (:require [cheshire.core :as json]) |
3 | | - (:import [org.json JSONObject JSONArray JSONTokener] |
4 | | - [org.everit.json.schema.loader SchemaLoader SchemaClient] |
| 3 | + (:import [java.io Reader StringReader] |
| 4 | + [org.json JSONObject JSONArray JSONTokener] |
| 5 | + [org.everit.json.schema.loader |
| 6 | + SchemaLoader SchemaClient SchemaLoader$SchemaLoaderBuilder] |
5 | 7 | [org.everit.json.schema Schema] |
6 | 8 | [org.everit.json.schema ValidationException])) |
7 | 9 |
|
8 | 10 | (defn- ^JSONTokener prepare-tokener |
9 | 11 | "Prepares a JSONTokener instance for further processing" |
10 | | - [input] |
11 | | - (JSONTokener. ^String (if (string? input) |
12 | | - input |
13 | | - (json/generate-string input)))) |
| 12 | + [input] |
| 13 | + (JSONTokener. |
| 14 | + ^Reader (StringReader. |
| 15 | + ^String (if (string? input) |
| 16 | + input |
| 17 | + (json/generate-string input))))) |
14 | 18 |
|
15 | 19 | (defn- prepare-json |
16 | 20 | "Prepares JSON instance based on input string, map or vector" |
17 | 21 | [input] |
18 | 22 | (if (or (associative? input) |
19 | 23 | (and (string? input) |
20 | 24 | (#{\{ \[} (first input)))) |
21 | | - (let [json-tokener (prepare-tokener input)] |
| 25 | + (let [json-tokener ^JSONTokener(prepare-tokener input)] |
22 | 26 | (if (or (vector? input) |
23 | 27 | (= \[ (first input))) |
24 | | - (JSONArray. ^JSONTokener json-tokener) |
25 | | - (JSONObject. ^JSONTokener json-tokener))) |
| 28 | + (JSONArray. json-tokener) |
| 29 | + (JSONObject. json-tokener))) |
26 | 30 | (throw (ex-info "Unsupported JSON input" {:input input})))) |
27 | 31 |
|
28 | 32 | (defn- assert-schema-input-valid! [input] |
|
52 | 56 | (if-not (:classpath-aware? params) |
53 | 57 | (prepare-schema* input) |
54 | 58 | (let [resolution-scope (:default-resolution-scope params) |
55 | | - set-resolution-scope (fn [client] (if resolution-scope |
56 | | - (.resolutionScope client resolution-scope) |
57 | | - client)) |
| 59 | + set-resolution-scope (fn [^SchemaLoader$SchemaLoaderBuilder builder] |
| 60 | + (if resolution-scope |
| 61 | + (.resolutionScope builder ^String resolution-scope) |
| 62 | + builder)) |
58 | 63 | schema-loader (-> (SchemaLoader/builder) |
59 | 64 | (.schemaClient (SchemaClient/classPathAwareClient)) |
60 | | - (set-resolution-scope) |
61 | | - (.schemaJson (JSONObject. (prepare-tokener input))) |
| 65 | + ^SchemaLoader$SchemaLoaderBuilder (set-resolution-scope) |
| 66 | + (.schemaJson |
| 67 | + ^JSONObject (JSONObject. (prepare-tokener input))) |
62 | 68 | (.build))] |
63 | 69 | (.build (.load schema-loader)))))) |
64 | 70 |
|
|
0 commit comments