diff --git a/src/main/java/com/networknt/schema/JsonSchema.java b/src/main/java/com/networknt/schema/JsonSchema.java index 03459746..61a453b0 100644 --- a/src/main/java/com/networknt/schema/JsonSchema.java +++ b/src/main/java/com/networknt/schema/JsonSchema.java @@ -369,7 +369,7 @@ public JsonSchema getSubSchema(JsonNodePath fragment) { Object segment = fragment.getElement(x); JsonNode subSchemaNode = getNode(parentNode, segment); if (subSchemaNode != null) { - if (segment instanceof Number) { + if (segment instanceof Number && parentNode.isArray()) { int index = ((Number) segment).intValue(); schemaLocation = schemaLocation.append(index); evaluationPath = evaluationPath.append(index); diff --git a/src/test/java/com/networknt/schema/oas/OpenApi30Test.java b/src/test/java/com/networknt/schema/oas/OpenApi30Test.java index e00abb49..91526ea0 100644 --- a/src/test/java/com/networknt/schema/oas/OpenApi30Test.java +++ b/src/test/java/com/networknt/schema/oas/OpenApi30Test.java @@ -28,7 +28,9 @@ import com.networknt.schema.InputFormat; import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaFactory; +import com.networknt.schema.PathType; import com.networknt.schema.SchemaLocation; +import com.networknt.schema.SchemaValidatorsConfig; import com.networknt.schema.SpecVersion.VersionFlag; import com.networknt.schema.ValidationMessage; @@ -74,7 +76,10 @@ void jsonPointerWithNumberInFragment() { JsonSchemaFactory factory = JsonSchemaFactory.getInstance(VersionFlag.V7, builder -> builder .metaSchema(OpenApi30.getInstance()).defaultMetaSchemaIri(OpenApi30.getInstance().getIri())); JsonSchema schema = factory.getSchema(SchemaLocation.of( - "classpath:schema/oas/3.0/petstore.yaml#/paths/~1pet/post/responses/200/content/application~1json/schema")); + "classpath:schema/oas/3.0/petstore.yaml#/paths/~1pet/post/responses/200/content/application~1json/schema"), + SchemaValidatorsConfig.builder().pathType(PathType.JSON_PATH).build()); assertNotNull(schema); + assertEquals("$.paths['/pet'].post.responses['200'].content['application/json'].schema", + schema.getEvaluationPath().toString()); } }