Skip to content

Resolution scope doesn't use the entire URL #206

@vjrasane

Description

@vjrasane

Hello,

I'm using json-schema to validate incoming JSON data to a Spring application. Some of the schemas have relative references to other schemas served by the same Spring application. So for example the schema:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "properties": {
        "url": {
            "$ref": "/interface#/definitions/Operation"
        }
    }
}

References another schema called "interface". I've used the following code to set the resolution scope:

String schemaUrl = "http://localhost:8091/ServiceDesign/api/v1/validation/";
SchemaLoader loader = SchemaLoader.builder().schemaJson(schemaJson).resolutionScope(schemaUrl).build();
            return loader.load().build();

Unfortunately, it looks like only the host name and port are used in the query, as I get the following stacktrace:

java.io.UncheckedIOException: java.io.FileNotFoundException: http://localhost:8091/interface
	at org.everit.json.schema.loader.internal.DefaultSchemaClient.get(DefaultSchemaClient.java:35)
	at org.everit.json.schema.loader.internal.JSONPointer.executeWith(JSONPointer.java:81)
	at org.everit.json.schema.loader.internal.JSONPointer.lambda$forURL$1(JSONPointer.java:133)
	at org.everit.json.schema.loader.internal.JSONPointer.query(JSONPointer.java:152)
	at org.everit.json.schema.loader.ReferenceLookup.lookup(ReferenceLookup.java:99)
	at org.everit.json.schema.loader.SchemaLoader.buildSchemaWithoutExplicitType(SchemaLoader.java:253)
	at org.everit.json.schema.loader.SchemaLoader.lambda$load$0(SchemaLoader.java:290)
	at java.util.Optional.orElseGet(Optional.java:267)
	at org.everit.json.schema.loader.SchemaLoader.load(SchemaLoader.java:288)
	at org.everit.json.schema.loader.SchemaLoader.loadChild(SchemaLoader.java:346)
	at org.everit.json.schema.loader.ObjectSchemaLoader.lambda$addPropertySchemaDefinition$4(ObjectSchemaLoader.java:79)
	at org.everit.json.schema.loader.internal.TypeBasedMultiplexer$IdModifyingTypeConsumerImpl.lambda$then$0(TypeBasedMultiplexer.java:78)
	at org.everit.json.schema.loader.internal.TypeBasedMultiplexer.orElse(TypeBasedMultiplexer.java:233)
	at org.everit.json.schema.loader.internal.TypeBasedMultiplexer.requireAny(TypeBasedMultiplexer.java:243)
	at org.everit.json.schema.loader.ObjectSchemaLoader.addPropertySchemaDefinition(ObjectSchemaLoader.java:81)
	at org.everit.json.schema.loader.ObjectSchemaLoader.lambda$populatePropertySchemas$3(ObjectSchemaLoader.java:70)
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
	at org.everit.json.schema.loader.ObjectSchemaLoader.populatePropertySchemas(ObjectSchemaLoader.java:69)
	at org.everit.json.schema.loader.ObjectSchemaLoader.lambda$load$0(ObjectSchemaLoader.java:34)
	at org.everit.json.schema.loader.internal.TypeBasedMultiplexer$IdModifyingTypeConsumerImpl.lambda$then$0(TypeBasedMultiplexer.java:78)
	at org.everit.json.schema.loader.internal.TypeBasedMultiplexer.orElse(TypeBasedMultiplexer.java:233)
	at org.everit.json.schema.loader.internal.TypeBasedMultiplexer.requireAny(TypeBasedMultiplexer.java:243)
...

Is this by design? I tried to follow the instructions on the GitHub page, but perhaps I'm using the library wrong?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions