swagger-api / swagger-api/swagger-parser
cannot deserialize from Object value (Grallvm native executable)
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 867
- Forks
- 560
- Avg merge
- 2d 21h
- Merged PRs (30d)
- 7
Description
Using plain java graalvm native executables cause multiple issues. The parser mostly returns empty OpenAPI objects without any error. Only on one file I can receive an error. I tried to initialise swagger models at run time, but this did not help --initialize-at-run-time=io.swagger.v3.oas.models
It would be really cool to know how to use the swagger parser on plain native java.
[ERROR] Failed to parse OpenAPI file [books.yaml]: Cannot construct instance of `io.swagger.v3.oas.models.media.ArraySchema`: cannot deserialize from Object value (no delegate- or property-based Creator): this appears to be a native image, in which case you may need to configure reflection for the class that is to be deserialized
at [Source: UNKNOWN; byte offset: #UNKNOWN]
java.lang.IllegalArgumentException: Cannot construct instance of `io.swagger.v3.oas.models.media.ArraySchema`: cannot deserialize from Object value (no delegate- or property-based Creator): this appears to be a native image, in which case you may need to configure reflection for the class that is to be deserialized
at [Source: UNKNOWN; byte offset: #UNKNOWN]
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4618)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4549)
at io.swagger.v3.parser.converter.SwaggerConverter.convert(SwaggerConverter.java:1188)
at io.swagger.v3.parser.converter.SwaggerConverter.convert(SwaggerConverter.java:865)
at io.swagger.v3.parser.converter.SwaggerConverter.convert(SwaggerConverter.java:635)
at io.swagger.v3.parser.converter.SwaggerConverter.convert(SwaggerConverter.java:531)
at io.swagger.v3.parser.converter.SwaggerConverter.convert(SwaggerConverter.java:250)
at io.swagger.v3.parser.converter.SwaggerConverter.readResult(SwaggerConverter.java:104)
at io.swagger.v3.parser.converter.SwaggerConverter.readLocation(SwaggerConverter.java:85)
at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
at java.base@22/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:212)
at java.base@22/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:194)
at java.base@22/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:194)
at java.base@22/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:194)
at java.base@22/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:194)
at java.base@22/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:212)
at java.base@22/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base@22/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939)
at java.base@22/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:556)
at java.base@22/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:546)
at java.base@22/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.base@22/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.base@22/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
at java.base@22/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:611)
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `io.swagger.v3.oas.models.media.ArraySchema`: cannot deserialize from Object value (no delegate- or property-based Creator): this appears to be a native image, in which case you may need to configure reflection for the class that is to be deserialized
at [Source: UNKNOWN; byte offset: #UNKNOWN]
at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1887)
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:414)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1370)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1505)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:348)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185)
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4613)
swagger: "2.0"
info:
version: "1.0.0"
title: "Books API"
description: "API to manage books, authors, and their relationships."
termsOfService: "https://api.books.example.com/terms"
contact:
name: "API Support"
url: "https://api.books.example.com/support"
email: "support@books.example.com"
license:
name: "MIT"
url: "https://opensource.org/licenses/MIT"
host: "api.books.example.com"
basePath: "/v1"
schemes:
- https
tags:
- name: "Books"
description: "Operations related to books"
- name: "Authors"
description: "Operations related to authors"
- name: "Management"
description: "Administrative operations"
paths:
/books:
get:
tags:
- "Books"
summary: "Retrieve all books"
description: "Returns a list of all books available in the system."
responses:
200:
description: "A list of books"
schema:
type: "array"
items:
$ref: "#/definitions/Book"
post:
tags:
- "Books"
summary: "Add a new book"
description: "Adds a new book to the library."
parameters:
- in: "body"
name: "body"
required: true
schema:
$ref: "#/definitions/Book"
responses:
201:
description: "Book created successfully"
/books/{id}:
get:
tags:
- "Books"
summary: "Retrieve a specific book"
description: "Fetch details of a book by its unique ID."
parameters:
- name: "id"
in: "path"
required: true
type: "string"
responses:
200:
description: "Book details retrieved"
schema:
$ref: "#/definitions/Book"
404:
description: "Book not found"
put:
tags:
- "Books"
summary: "Update a book"
description: "Updates information for a specific book."
parameters:
- name: "id"
in: "path"
required: true
type: "string"
- in: "body"
name: "body"
required: true
schema:
$ref: "#/definitions/Book"
responses:
200:
description: "Book updated successfully"
delete:
tags:
- "Books"
summary: "Delete a book"
description: "Deletes a specific book by its ID."
parameters:
- name: "id"
in: "path"
required: true
type: "string"
responses:
204:
description: "Book deleted successfully"
/authors:
get:
tags:
- "Authors"
summary: "Retrieve all authors"
description: "Fetch a list of all authors."
responses:
200:
description: "A list of authors"
schema:
type: "array"
items:
$ref: "#/definitions/Author"
post:
tags:
- "Authors"
summary: "Add a new author"
description: "Adds a new author to the system."
parameters:
- in: "body"
name: "body"
required: true
schema:
$ref: "#/definitions/Author"
responses:
201:
description: "Author added successfully"
definitions:
Book:
type: "object"
required:
- id
- title
properties:
id:
type: "string"
title:
type: "string"
author:
type: "string"
publishedDate:
type: "string"
format: "date"
genre:
type: "string"
description: "Genre of the book"
Author:
type: "object"
required:
- id
- name
properties:
id:
type: "string"
name:
type: "string"
biography:
type: "string"
description: "A brief biography of the author"
birthDate:
type: "string"
format: "date"
description: "Author's date of birth"
securityDefinitions:
api_key:
type: "apiKey"
name: "X-API-KEY"
in: "header"
externalDocs:
description: "Find more info here"
url: "https://api.books.example.com/docs"
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the native executable parsing books.yaml, then trace the failure from OpenAPIParser.readLocation through SwaggerConverter.convert to ArraySchema deserialization. Compare the native result with the regular Java parser and determine what is needed for the native parser to return populated OpenAPI objects without the reported exception.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- api
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100