Hi,
applying a jsonschema check for arbitrary json objects may be used upfront
to ensure validity of those objects. One candidate could be the
'connect.json', so i thought i could give it a try. Please see below for an
example jsonschema, as a first attempt.
I would not want to create an jira issue for this, as it is really just an
experiment.
Example usage on empty json ( it's just '{}' ):
$ jsonschema -i empty.json qpid-proton-connect-schema.json || echo "Invalid
json"
(no output )
NOTE: empty json is valid to this schema, but it's not very useful.
Example usage on an incorrect json:
$ jsonschema -i broken2.json qpid-proton-connect-schema.json || echo
"Invalid json"
: '' is not of type 'integer'
Invalid json
NOTE: This check failed, as the file 'broken.json' has an empty string for
'heartbeat', according to the schema, that should be an integer.
NOTE2: Also, the scheme used is 'http', which is not reflected in the
schema, yet.
BR,
Thomas
## Appendix -1 file: qpid-proton-connect-schema.json
$ cat qpid-proton-connect-schema.json
{
"$schema": "http://json-schema/draft-07/schema#",
"$id": "qpid-proton_connect-schema",
"title": "qpid-proton connect schema",
"description": "Schema for the 'connect.json' config file used by
qpid-proton python binding.",
"type": "object",
"additionalProperties": true,
"required": [
],
"properties": {
"scheme": {
"type": "string",
"description": "The AMQP scheme to use. Can be 'amqp' or 'amqps'"
},
"host": {
"type": "string",
"description": "The hostname to connect to."
},
"heartbeat": {
"type": "integer",
"description": "Specify a heartbeat interval."
},
"sasl": {
"$ref": "#/definitions/sasl_properties"
},
"user": {
"type": "string",
"description": "Specify connecting username to AMQP service
endpoint."
},
"password": {
"type": "string",
"description": "Specify the connecting users password."
},
"tls": {
"type": "object",
"$ref": "#/definitions/tls_properties"
}
},
"definitions": {
"sasl_properties": {
"type": "object",
"required": [ "sasl_enabled", "mechanisms" ],
"properties": {
"sasl_enabled": {
"type": "boolean",
"description": "Indicates the usage of any SASL auth mechanism."
},
"mechanisms": {
"type": "string",
"description": "A space separated list of enabled SASL
mechanisms."
}
}
},
"tls_properties": {
"type": "object",
"required": [ "ca", "cert", "key", "verify" ],
"ca": {
"type": "string"
},
"cert": {
"type": "string"
},
"key": {
"type": "string"
},
"verify": {
"type": "boolean"
}
}
}
}
## Appendix -2 file: broken.json
{
"scheme": "http",
"host": "example.com",
"heartbeat": "",
"user": "foo",
"password": "bar"
}