Examples for enums with fields are wrapped in double and single quotes
FYI, I think I have a better understanding of the cause regarding enums being between ' " ... " ' .
- Let's consider this enum:
@Getter
@RequiredArgsConstructor
public enum MessageStatus {
OK(200, "OK"),
BAD_REQUEST(400, "Bad Request"),
UNAUTHORIZED(401, "Unauthorized"),
NOT_FOUND(404, "Not Found"),
INTERNAL_SERVER_ERROR(500, "Internal Server Error");
private final int value;
private final String reasonPhrase;
}
generated yaml is:
my.package.infra.remote_service_1.message.reply.MessageReply:
type: object
properties:
errorMessage:
type: string
messageStatus:
type: string
enum:
- OK
- BAD_REQUEST
- UNAUTHORIZED
- NOT_FOUND
- INTERNAL_SERVER_ERROR
payload:
$ref: '#/components/schemas/my.package.infra.remote_service_1.message.reply.Message'
examples:
- errorMessage: string
messageStatus: OK
payload:
No problem here: messageStatus: OK is correct, i.e., OK is NOT surrounded by single and double quote
- If I add the annotation
@Schema(enumAsRef = true)on theMessageStatusclass, then the generated yaml is:
my.package.infra.remote_service_1.message.reply.MessageReply:
type: object
properties:
errorMessage:
type: string
messageStatus:
$ref: '#/components/schemas/my.package.infra.remote_service_1.message.reply.MessageStatus'
payload:
$ref: '#/components/schemas/my.package.infra.remote_service_1.message.reply.Message'
examples:
- errorMessage: string
messageStatus: '"OK"'
payload:
So, having enum being Component, seems to 'trigger' the bug (I guess this is a bug...?), i.e., turn
messageStatus: OK
into
messageStatus: '"OK"'
Which is NOT correct
- now, If I change
@Schema(enumAsRef = true)to@Schema(enumAsRef = true, example = "OK")the generated yaml is now:
my.package.infra.remote_service_1.message.reply.MessageReply:
type: object
properties:
errorMessage:
type: string
messageStatus:
$ref: '#/components/schemas/my.package.infra.remote_service_1.message.reply.MessageStatus'
payload:
$ref: '#/components/schemas/my.package.infra.remote_service_1.message.reply.Message'
examples:
- errorMessage: string
messageStatus: OK
payload:
So, exactly the same as before EXCEPT FOR messageStatus: OK which does not have the ' " ... " ' around the enum anymore.
I could not find this bug being reported in https://github.com/asyncapi/parser-js/issues?q=is%3Aissue+is%3Aopen+enum I am not sure where / how to report this bug.
Can I kindly ask you to help me reporting this bug / initiate an inquiry ? I am not sure where I should send this info? Feel free to copy pate / reference this comment where needed.
Thanks.
Pascal
Originally posted by @pdalfarr in https://github.com/springwolf/springwolf-core/issues/534#issuecomment-2069271107
Hi @sam0r040 ,
I just bumped to Spring Wolf 1.8.0 and I see many improvements: Thanks a lot!
But I alos noticed that the "generated yaml section" for the enum mentionned in this ticket changed from this:
be.opw.controlestarter.infra.integration.util.MessageStatus:
type: string
enum:
- OK
- BAD_REQUEST
- UNAUTHORIZED
- NOT_FOUND
- INTERNAL_SERVER_ERROR
To this:
be.opw.controlestarter.infra.integration.util.MessageStatus:
title: MessageStatus
type: string
enum:
- "MessageStatus.OK(value=200, reasonPhrase=OK)"
- "MessageStatus.BAD_REQUEST(value=400, reasonPhrase=Bad Request)"
- "MessageStatus.UNAUTHORIZED(value=401, reasonPhrase=Unauthorized)"
- "MessageStatus.NOT_FOUND(value=404, reasonPhrase=Not Found)"
- "MessageStatus.INTERNAL_SERVER_ERROR(value=500, reasonPhrase=Internal Server\
\ Error)"
I think it's related to the fact that this line
https://github.com/springwolf/springwolf-core/blob/release/1.8.x/springwolf-add-ons/springwolf-json-schema/src/main/java/io/github/springwolf/addons/json_schema/JsonSchemaGenerator.java#L69
is invoking .toString() on the enum AND that my enum has the Lombok @ToString anotation
@Schema(enumAsRef = true, example = "OK")
@Getter
@RequiredArgsConstructor
@ToString
public enum MessageStatus {
OK(200, "OK"),
BAD_REQUEST(400, "Bad Request"),
UNAUTHORIZED(401, "Unauthorized"),
NOT_FOUND(404, "Not Found"),
INTERNAL_SERVER_ERROR(500, "Internal Server Error"),
;
private final int value;
private final String reasonPhrase;
/**
* @return true if messageStatus's value indicates an error (value >= 400)
*/
public boolean isError() {
return value >= 400;
}
}
Would it be possible to invoke .name() on the enum instead of .toString() ?
Does this make sense?
Thanks
Hi @pdalfarr, thanks a lot for your input. I think you found a bug here. We will try to fix it for the next release.
Good to hear from you @pdalfarr. Do you mind giving some clearity to https://github.com/asyncapi/bindings/pull/259 and how exchanges and queues are connected in amqp? (is it a n:m mapping?)
Hi @timonback
I just added a comment on the ticket as you asked. I hope this will help :-)
Hi @pdalfarr, I reproduced the enum in quotes in https://github.com/springwolf/springwolf-core/pull/1065.
The code piece you mentioned is related to the x-json-schema, while should not affect the AsyncAPI schema definition.
I was not able to reproduce the toString issue that you mentioned (MessageStatus.OK(value=200, reasonPhrase=OK)), do you have a code example to reproduce it?
The easies way for us to debug it, is when you fork this repo, modify one of the examples and open a (reproduce) PR.
Hi,
I don't have enough time at the moment to provide sample code, sorry. I'll try to come back later on this with some code, but I am really overwhelmed at the moment 🌊
Kind Regards ;-)