Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No nested schema for composed property #57

Closed
giann opened this issue Mar 16, 2022 · 5 comments
Closed

No nested schema for composed property #57

giann opened this issue Mar 16, 2022 · 5 comments

Comments

@giann
Copy link

giann commented Mar 16, 2022

Describe the bug
With this schema I get this error I don't understand: No nested schema for composed property Address in file Adress.json found

Expected behavior
I don't see anything wrong with this schema so I'd expect it to generate the appropriate class.

Schema

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "oneOf": [
        { "type": "string" },
        {
            "type": "object",
            "properties": {
                "address": { "type": "string" },
                "specialDelivery": { "type": "string" },
                "zipCode": { "type": "string" },
                "city": { "type": "string" }
            },
            "additionalProperties": false
        }
    ]
}

No custom GeneratorConfiguration.

Version:
0.22.0

@giann
Copy link
Author

giann commented Mar 16, 2022

I think I understand what's the issue. The lib doesn't seem to expect multiple types inside a oneOf or allOf list. However I think this is a valid schema.

@wol-soft
Copy link
Owner

Hi @giann,
the lib is able to handle compositions like oneOf on the top level of a schema. The issue is located in the first branch of your composition which can be simplified into the following schema which makes the issue more obvious:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "string"
}

This schema can't be represented as a object. If this schema is passed to the generator it would be skipped. Due to the composition the generator starts to generate nested objects for each branch of the composition and fails on the first branch as the branch doesn't provide a nested schema which is representable as an object. I think the error message could be more meaningful.

Your schema is a valid JSON-schema but it can't be represented as a object.

@giann
Copy link
Author

giann commented Mar 16, 2022

Thanks for the quick answer @wol-soft
So i could get around this by using the oneOf in the schemas that reference this one so the oneOf is not at the top level but for, say, a property?

@wol-soft
Copy link
Owner

yes, if you wrap the composition into an object, let's say like in the following example, the generator will generate an object with the address property which is either a string or an instance of the nested object containing the properties from the second oneOf branch.

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "address": {
      "oneOf": [
        { "type": "string" },
        {
          "type": "object",
          "properties": {
            "address": { "type": "string" },
            "specialDelivery": { "type": "string" },
            "zipCode": { "type": "string" },
            "city": { "type": "string" }
          },
          "additionalProperties": false
        }
      ]
    }
  },
  "required": [ "address" ]
}

Also a reference to the schema from another schema (eg. customer) is possible. In this case just make sure you put the schema in let's say an include directory outside of the directory you have configured to generate the models from to make sure the generator doesn't try to generate a model from the address schema.

@giann
Copy link
Author

giann commented Mar 16, 2022

I see thanks a lot!

@giann giann closed this as completed Mar 16, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants