Skip to content

Commit ef3380d

Browse files
committed
started to clean up ReferenceLookup#lookup().
Also changing RelativeURITest to stop jetty even if the test fails..
1 parent 20d89d8 commit ef3380d

File tree

2 files changed

+31
-29
lines changed

2 files changed

+31
-29
lines changed

core/src/main/java/org/everit/json/schema/loader/ReferenceLookup.java

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -114,28 +114,25 @@ private JsonObject lookupObjById(JsonValue val, String idAttrVal) {
114114
return null;
115115
}
116116

117+
private Schema.Builder<?> performQueryEvaluation(String mapKey, JsonPointerEvaluator pointerEvaluator) {
118+
if (ls.pointerSchemas.containsKey(mapKey)) {
119+
return ls.pointerSchemas.get(mapKey);
120+
}
121+
JsonValue rawInternalReferenced = pointerEvaluator.query().getQueryResult();
122+
ReferenceSchema.Builder refBuilder = ReferenceSchema.builder()
123+
.refValue(mapKey);
124+
ls.pointerSchemas.put(mapKey, refBuilder);
125+
Schema referredSchema = new SchemaLoader(rawInternalReferenced.ls).load().build();
126+
refBuilder.build().setReferredSchema(referredSchema);
127+
return refBuilder;
128+
}
129+
117130
/**
118131
* Returns a schema builder instance after looking up the JSON pointer.
119132
*/
120133
Schema.Builder<?> lookup(String relPointerString, JsonObject ctx) {
121134
if (isSameDocumentRef(relPointerString)) {
122-
if (ls.pointerSchemas.containsKey(relPointerString)) {
123-
return ls.pointerSchemas.get(relPointerString);
124-
}
125-
JsonValue rawInternalReferenced = JsonPointerEvaluator.forDocument(ls.rootSchemaJson(), relPointerString).query()
126-
.getQueryResult();
127-
Object resultObject;
128-
if (rawInternalReferenced instanceof JsonObject) {
129-
resultObject = doExtend(withoutRef(ctx), ((JsonObject) rawInternalReferenced).toMap());
130-
} else {
131-
resultObject = rawInternalReferenced;
132-
}
133-
ReferenceSchema.Builder refBuilder = ReferenceSchema.builder()
134-
.refValue(relPointerString);
135-
ls.pointerSchemas.put(relPointerString, refBuilder);
136-
Schema referredSchema = new SchemaLoader(rawInternalReferenced.ls).load().build();
137-
refBuilder.build().setReferredSchema(referredSchema);
138-
return refBuilder;
135+
return performQueryEvaluation(relPointerString, JsonPointerEvaluator.forDocument(ls.rootSchemaJson(), relPointerString));
139136
}
140137
String absPointerString = ReferenceResolver.resolve(ls.id, relPointerString).toString();
141138
if (ls.pointerSchemas.containsKey(absPointerString)) {
@@ -151,10 +148,10 @@ Schema.Builder<?> lookup(String relPointerString, JsonObject ctx) {
151148
return refBuilder;
152149
}
153150

154-
boolean isExternal = !absPointerString.startsWith("#");
155-
JsonPointerEvaluator pointer = isExternal
156-
? JsonPointerEvaluator.forURL(httpClient, absPointerString, ls)
157-
: JsonPointerEvaluator.forDocument(ls.rootSchemaJson(), absPointerString);
151+
boolean isInternal = isSameDocumentRef(absPointerString);
152+
JsonPointerEvaluator pointer = isInternal
153+
? JsonPointerEvaluator.forDocument(ls.rootSchemaJson(), absPointerString)
154+
: JsonPointerEvaluator.forURL(httpClient, absPointerString, ls);
158155
ReferenceSchema.Builder refBuilder = ReferenceSchema.builder()
159156
.refValue(relPointerString);
160157
ls.pointerSchemas.put(absPointerString, refBuilder);
@@ -167,12 +164,14 @@ Schema.Builder<?> lookup(String relPointerString, JsonObject ctx) {
167164
}
168165
// JsonValue resultObject = extend(withoutRef(ctx), result.getQueryResult());
169166
SchemaLoader childLoader = ls.initChildLoader()
170-
.resolutionScope(isExternal ? withoutFragment(absPointerString) : ls.id)
167+
.resolutionScope(!isInternal ? withoutFragment(absPointerString) : ls.id)
171168
.schemaJson(resultObject)
172169
.rootSchemaJson(result.getContainingDocument()).build();
173170
Schema referredSchema = childLoader.load().build();
174171
refBuilder.build().setReferredSchema(referredSchema);
175172
return refBuilder;
173+
174+
// return performQueryEvaluation(absPointerString, pointer);
176175
}
177176

178177
private boolean isSameDocumentRef(String ref) {

tests/src/test/java/org/everit/json/schema/RelativeURITest.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@ public class RelativeURITest {
1111
public void test() throws Exception {
1212
JettyWrapper jetty = new JettyWrapper("/org/everit/json/schema/relative-uri/");
1313
jetty.start();
14-
SchemaLoader.builder()
15-
.resolutionScope("http://localhost:1234/schema/")
16-
.schemaJson(
17-
new JSONObject(new JSONTokener(getClass().getResourceAsStream(
18-
"/org/everit/json/schema/relative-uri/schema/main.json"))))
19-
.build().load().build();
20-
jetty.stop();
14+
try {
15+
SchemaLoader.builder()
16+
.resolutionScope("http://localhost:1234/schema/")
17+
.schemaJson(
18+
new JSONObject(new JSONTokener(getClass().getResourceAsStream(
19+
"/org/everit/json/schema/relative-uri/schema/main.json"))))
20+
.build().load().build();
21+
} finally {
22+
jetty.stop();
23+
}
2124
}
2225

2326
}

0 commit comments

Comments
 (0)