api-platform / schema-generator

PHP Model Scaffolding from Schema.org and other RDF vocabularies
https://api-platform.com/docs/schema-generator/
MIT License
453 stars 108 forks source link

[OpenApi] PropertyGenerator::getType(): Argument #1 ($type) must be of type string, null given #398

Open feamsr00 opened 1 year ago

feamsr00 commented 1 year ago

schema-gen version(s) affected: 5.1.1

Description

Received an exception when processing a json API schema.

How to reproduce
Config

# api/config/schema.yaml
openApi:
    file: './swagger.json'

>schema gen sgen\src schema.yml schema file is attached swagger.zip

Additional Context

image


PHP Fatal error:  Uncaught TypeError: ApiPlatform\SchemaGenerator\OpenApi\PropertyGenerator\PropertyGenerator::getType(): Argument #1 ($type) must be of type string, null given, called in phar://C:/dev/tools/schema.phar/src/OpenApi/PropertyGenerator/PropertyGenerator.php on line 54 and defined in phar://C:/dev/tools/schema.phar/src/OpenApi/PropertyGenerator/PropertyGenerator.php:73
Stack trace:
#0 phar://C:/dev/tools/schema.phar/src/OpenApi/PropertyGenerator/PropertyGenerator.php(54): ApiPlatform\SchemaGenerator\OpenApi\PropertyGenerator\PropertyGenerator->getType()
#1 phar://C:/dev/tools/schema.phar/src/OpenApi/ClassGenerator.php(232): ApiPlatform\SchemaGenerator\OpenApi\PropertyGenerator\PropertyGenerator->__invoke()
#2 phar://C:/dev/tools/schema.phar/src/OpenApi/ClassGenerator.php(105): ApiPlatform\SchemaGenerator\OpenApi\ClassGenerator->buildClassFromSchema()
#3 phar://C:/dev/tools/schema.phar/src/OpenApi/Generator.php(54): ApiPlatform\SchemaGenerator\OpenApi\ClassGenerator->generate()
#4 phar://C:/dev/tools/schema.phar/src/Command/GenerateCommand.php(139): ApiPlatform\SchemaGenerator\OpenApi\Generator->generate()
#5 phar://C:/dev/tools/schema.phar/vendor/symfony/console/Command/Command.php(308): ApiPlatform\SchemaGenerator\Command\GenerateCommand->execute()
#6 phar://C:/dev/tools/schema.phar/vendor/symfony/console/Application.php(1002): Symfony\Component\Console\Command\Command->run()
#7 phar://C:/dev/tools/schema.phar/vendor/symfony/console/Application.php(299): Symfony\Component\Console\Application->doRunCommand()
#8 phar://C:/dev/tools/schema.phar/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun()
#9 phar://C:/dev/tools/schema.phar/bin/schema(26): Symfony\Component\Console\Application->run()
#10 C:\dev\tools\schema.phar(17): require('...')
#11 {main}
  thrown in phar://C:/dev/tools/schema.phar/src/OpenApi/PropertyGenerator/PropertyGenerator.php on line 73
beatgeb commented 8 months ago

I have a similar issue with the PropertyGenerator. When I define a properties type as Array in spotlight.io, the generation fails with Fatal error: Uncaught TypeError: ApiPlatform\SchemaGenerator\OpenApi\Model\Type\PrimitiveType::__construct(): Argument #1 ($name) must be of type string, array given, called in ../vendor/api-platform/schema-generator/src/OpenApi/PropertyGenerator/PropertyGenerator.php on line 116.

It is caused by a type definition in the schema json like:

 "propertyName": {
    "type": [
      "boolean",
      "null"
    ],
    ...
overgapo commented 8 months ago

i've got same problem

Looks like the we have to fix openapi, because (in my case), i want to describe nullable field as.

"releasedAt": {
      "type": [
          "string",
          "null"
      ],
      "format": "date-time"
  },

Openapi docs say this way is incorrect: image

I generated openapi with ApiPlatform's bin/console api:openapi:export --spec-version=3, so the root problem is in openapi generation