I have searched on json schema with java bindings with inheritance and all searches led me to the usage of "allOf".
Using allOf would potentially solve my problem, but I am wondering if there is a construct in json schema that I can use which will generate my java code with real java inheritance "B extends A" - rather than inlining all properties from A inside B ?
I am wondering if this is even supported / doable or I am just dreaming. If not supported, I would be curious to know the reason.
Because there is no such thing as schema inheritance currently defined. When using allOf , you require that all schemas in allOf match; and if you are strict about what can exist in this or that JSON, you'll have added additionalProperties to false . As such, you cannot inherit.
JSON Schema is an IETF standard providing a format for what JSON data is required for a given application and how to interact with it. Applying such standards for a JSON document lets you enforce consistency and data validity across similar JSON data. .
By the definition of this keyword, it meant that the instance had to be valid against the current schema and all schemas specified in extends ; basically, draft v4's allOf is draft v3's extends .
Properties. The properties (key-value pairs) on an object are defined using the properties keyword. The value of properties is an object, where each key is the name of a property and each value is a schema used to validate that property.
OK, well, I am the author of both:
So I can answer your question, and the basic answer is no.
Why? Because there is no such thing as schema inheritance currently defined.
When using allOf
, you require that all schemas in allOf
match; and if you are strict about what can exist in this or that JSON, you'll have added additionalProperties
to false
. As such, you cannot inherit.
The real solution is a mechanism I proposed for draft v5: the $merge
and $patch
keywords. These would allow to patch schemas with either of RFC 7386 or RFC 6902 (see here for more info) and indeed implement schema inheritance.
In short:
additionalProperties
to false
, and your basic JSON is an object, you won't be able to define additional object members;If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With