I have a definitions written in json schema like below:
// defs for an array of items which can contain either ipv4 address or domain name or mix
"listOfIpv4OrDomainNameAddressesDef": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"maxItems": 10,
"additionalProperties": false,
"items": {
"anyOf": [
{
"$ref" : "#/defs/domainNameDef"
},
{
"$ref": "#/defs/ipv4AddressDef"
}
]
}
},
// domainNameDef
"domainNameDef" : {
"type": "string",
"pattern": "(^((([a-zA-Z0-9_]([a-zA-Z0-9\\-_]){0,61})?[a-zA-Z0-9]\\.)*([a-zA-Z0-9_]([a-zA-Z0-9\\-_]){0,61})?[a-zA-Z0-9]\\.?$)|(^\\.$))",
"minLength": 1,
"maxLength": 253
}
// ipv4 address def
"ipv4AddressDef" : {
"type": "string",
"format": "ipv4"
}
But when i run the code to validate json against this schema i get exception as below:
com.networknt.schema.JsonSchemaException: anyOf/$ref: Reference #/$defs/domainNameDef cannot be resolved
at com.networknt.schema.RefValidator.(RefValidator.java:45) ~[json-schema-validator-1.0.57.jar:?]
at jdk.internal.reflect.GeneratedConstructorAccessor10.newInstance(Unknown Source) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[?:?]
at com.networknt.schema.ValidatorTypeCode.newValidator(ValidatorTypeCode.java:131) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonMetaSchema.newValidator(JsonMetaSchema.java:388) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.ValidationContext.newValidator(ValidationContext.java:57) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.read(JsonSchema.java:223) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.getValidators(JsonSchema.java:412) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.AnyOfValidator.validate(AnyOfValidator.java:65) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.ItemsValidator.doValidate(ItemsValidator.java:99) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.ItemsValidator.validate(ItemsValidator.java:86) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchemaRef.validate(JsonSchemaRef.java:38) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.RefValidator.validate(RefValidator.java:133) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:68) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchemaRef.validate(JsonSchemaRef.java:38) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.RefValidator.validate(RefValidator.java:133) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.OneOfValidator.validate(OneOfValidator.java:160) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchemaRef.validate(JsonSchemaRef.java:38) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.RefValidator.validate(RefValidator.java:133) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:68) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:68) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.ItemsValidator.doValidate(ItemsValidator.java:99) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.ItemsValidator.validate(ItemsValidator.java:86) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:68) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.PropertiesValidator.validate(PropertiesValidator.java:68) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.JsonSchema.validate(JsonSchema.java:247) ~[json-schema-validator-1.0.57.jar:?]
at com.networknt.schema.BaseJsonValidator.validate(BaseJsonValidator.java:104) ~[json-schema-validator-1.0.57.jar:?]
Everything works fine if i just move the definitions as is under the any of like below:
// defs for an array of items which can contain either ipv4 address or domain name or mix
"listOfIpv4OrDomainNameAddressesDef": {
"type": "array",
"uniqueItems": true,
"minItems": 1,
"maxItems": 10,
"additionalProperties": false,
"items": {
"anyOf": [
{
"type": "string",
"pattern": "(^((([a-zA-Z0-9_]([a-zA-Z0-9\\-_]){0,61})?[a-zA-Z0-9]\\.)*([a-zA-Z0-9_]([a-zA-Z0-9\\-_]){0,61})?[a-zA-Z0-9]\\.?$)|(^\\.$))",
"minLength": 1,
"maxLength": 253
},
{
"type": "string",
"format": "ipv4"
}
]
}
}
I am puzzled as to why $ref under anyOf doesn't work.. everything works if i just change anyOf to oneOf..
Is there any open issue for this?
Any help would be really appreciated..
I am using 2019-09 draft asbbelow:
"$schema": "http://json-schema.org/draft/2019-09/schema",
We are not aware of this issue, and it might be introduced recently with some changes. I am wondering if you could submit a b PR with your test case so that we can debug it. Thanks.
I found a similar issue. Will open a PR tomorrow.
This should be addressed with the latest version.