Skip to content

Commit

Permalink
fixing #270 and some code cleanup in ReferenceLookup
Browse files Browse the repository at this point in the history
  • Loading branch information
erosb committed Feb 12, 2019
1 parent c52f328 commit ea8c5ff
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -123,36 +123,25 @@ private Schema.Builder<?> performQueryEvaluation(String mapKey, JsonPointerEvalu
if (ls.pointerSchemas.containsKey(absolutePointer)) {
return ls.pointerSchemas.get(absolutePointer);
}
JsonValue rawInternalReferenced = pointerEvaluator.query().getQueryResult();
ReferenceSchema.Builder refBuilder = ReferenceSchema.builder()
.refValue(mapKey);
ls.pointerSchemas.put(absolutePointer, refBuilder);
Schema referredSchema = new SchemaLoader(rawInternalReferenced.ls).load().build();
refBuilder.build().setReferredSchema(referredSchema);
return refBuilder;
JsonValue referencedRawSchema = pointerEvaluator.query().getQueryResult();
return createReferenceSchema(mapKey, absolutePointer, referencedRawSchema);
}

/**
* Returns a schema builder instance after looking up the JSON pointer.
*/
Schema.Builder<?> lookup(String relPointerString, JsonObject ctx) {
if (isSameDocumentRef(relPointerString)) {
return performQueryEvaluation(relPointerString, JsonPointerEvaluator.forDocument(ls.rootSchemaJson(), relPointerString));
}
String absPointerString = ReferenceResolver.resolve(ls.id, relPointerString).toString();
if (ls.pointerSchemas.containsKey(absPointerString)) {
return ls.pointerSchemas.get(absPointerString);
}
JsonValue rawInternalReferenced = lookupObjById(ls.rootSchemaJson, absPointerString);
if (rawInternalReferenced != null) {
ReferenceSchema.Builder refBuilder = ReferenceSchema.builder()
.refValue(relPointerString);
ls.pointerSchemas.put(absPointerString, refBuilder);
Schema referredSchema = new SchemaLoader(rawInternalReferenced.ls).load().build();
refBuilder.build().setReferredSchema(referredSchema);
return refBuilder;
return createReferenceSchema(relPointerString, absPointerString, rawInternalReferenced);
}
if (isSameDocumentRef(relPointerString)) {
return performQueryEvaluation(relPointerString, JsonPointerEvaluator.forDocument(ls.rootSchemaJson(), relPointerString));
}

JsonPointerEvaluator pointer = createPointerEvaluator(absPointerString);
ReferenceSchema.Builder refBuilder = ReferenceSchema.builder()
.refValue(relPointerString);
Expand All @@ -172,6 +161,14 @@ Schema.Builder<?> lookup(String relPointerString, JsonObject ctx) {
return refBuilder;
}

private Schema.Builder<?> createReferenceSchema(String relPointerString, String absPointerString, JsonValue rawReferenced) {
ReferenceSchema.Builder refBuilder = ReferenceSchema.builder().refValue(relPointerString);
ls.pointerSchemas.put(absPointerString, refBuilder);
Schema referredSchema = new SchemaLoader(rawReferenced.ls).load().build();
refBuilder.build().setReferredSchema(referredSchema);
return refBuilder;
}

private JsonObject initJsonObjectById(URI id) {
JsonObject o = JsonValue.of(ls.config.schemasByURI.get(id)).requireObject();
new LoadingState(ls.config, ls.pointerSchemas, o, o, id, SchemaLocation.parseURI(id.toString()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,10 @@ public void schemaVersionChange() {
assertTrue(actual.isExclusiveMinimum());
}

@Test
public void idAsJsonPointerWorks() {
Schema actual = performLookup("#/properties/pointerToIdIsJsonPointer");
assertEquals("the ID can be a JSON pointer", actual.getDescription());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
},
"definitionInRemote": {
"$ref": "http://localhost/child-ref#/definitions/SubSchema"
},
"pointerToIdIsJsonPointer": {
"$ref": "#/definitions/pointer"
}
},
"definitions": {
Expand All @@ -30,6 +33,10 @@
"HasId": {
"$id": "has-id",
"description": "it has document-local identifier"
},
"IdIsJsonPointer": {
"$id": "#/definitions/pointer",
"description": "the ID can be a JSON pointer"
}
}
}

0 comments on commit ea8c5ff

Please sign in to comment.