Timestamp ISO8601 format issue
In an OpenAPI specification an attribute timestamp with format "date-time" and as an example value "example": "1937-01-01T12: 00: 27.87 + 00: 20" is entered. I deliberately chose the value for the example from the specification https://datatracker.ietf.org/doc/html/rfc3339 . When creating the object "OpenApiInteractionValidator" using the specification, I get an exception.
Stacktrace:
java.lang.IllegalArgumentException: Java 8 date/time type java.time.OffsetDateTime not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: java.util.LinkedHashMap["Pet"]
->io.swagger.v3.oas.models.media.ObjectSchema["properties"]
->java.util.LinkedHashMap["timestamp"]
->io.swagger.v3.oas.models.media.DateTimeSchema["example"])
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4314)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4245)
at com.atlassian.oai.validator.schema.SchemaValidator.lambda$new$0(SchemaValidator.java:92)
at java.base/java.util.Optional.map(Optional.java:265)
at com.atlassian.oai.validator.schema.SchemaValidator.<init>(SchemaValidator.java:92)
at com.atlassian.oai.validator.OpenApiInteractionValidator.<init>(OpenApiInteractionValidator.java:149)
at com.atlassian.oai.validator.OpenApiInteractionValidator.<init>(OpenApiInteractionValidator.java:46)
at com.atlassian.oai.validator.OpenApiInteractionValidator$Builder.build(OpenApiInteractionValidator.java:543)
at org.example.App.main(App.java:88)
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type java.time.OffsetDateTime not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: java.util.LinkedHashMap["Pet"]->io.swagger.v3.oas.models.media.ObjectSchema["properties"]->java.util.LinkedHashMap["timestamp"]->io.swagger.v3.oas.models.media.DateTimeSchema["example"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1276)
at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:35)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeOptionalFields(MapSerializer.java:869)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:760)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4292) ... 8 more
As an attachment I have a modified Petstore specification added to which the failure occurs.
I am currently using Release 2.15.1 and have also tested with the newer versions with the same result.
Best regards Peter
Comments (8)
-
-
Thanks @Pete Cornish could you elaborate a bit more on the solution please? I tried invoking it with you code snippit but I get the error:
Invalid method declaration; return type required
I suspect I’m adding the code snippit in the wrong place?
-
Account Deactivated -
The ‘issue’ seems to be in SchemaValidator.java.
It still uses the io.swagger.util.Json class instead of the io.swagger.v3.core.util.Json class. (The v3 version already adds the JavaTimeModule)
I also had to manually register the JavaTimeModule to fix my tests.
Although I don’t know the impact of using the newer Json class, I would suggest that this is the desired situation.
-
- edited description
-
Issue
#341was marked as a duplicate of this issue. -
- changed status to open
-
- changed status to resolved
Available in 2.19.4
- Log in to comment
I was able to fix this by adding the following dependency:
and invoking this before using the validator:
This works because
swagger-request-validator-core
usesswagger-core
.