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

Examples for enums with fields are wrapped in double and single quotes #723

Open
sam0r040 opened this issue Apr 26, 2024 · 6 comments
Open

Comments

@sam0r040
Copy link
Collaborator

sam0r040 commented Apr 26, 2024

FYI, I think I have a better understanding of the cause regarding enums being between ' " ... " ' .

  1. 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

  1. If I add the annotation @Schema(enumAsRef = true) on the MessageStatusclass, 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

  1. 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 #534 (comment)

@pdalfarr
Copy link
Contributor

pdalfarr commented Nov 8, 2024

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

@sam0r040
Copy link
Collaborator Author

sam0r040 commented Nov 8, 2024

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.

@timonback
Copy link
Member

Good to hear from you @pdalfarr.
Do you mind giving some clearity to asyncapi/bindings#259 and how exchanges and queues are connected in amqp? (is it a n:m mapping?)

@pdalfarr
Copy link
Contributor

pdalfarr commented Nov 9, 2024

Hi @timonback

I just added a comment on the ticket as you asked.
I hope this will help :-)

timonback added a commit to timonback/springwolf-core that referenced this issue Nov 9, 2024
timonback added a commit to timonback/springwolf-core that referenced this issue Nov 9, 2024
timonback added a commit to timonback/springwolf-core that referenced this issue Nov 9, 2024
timonback added a commit to timonback/springwolf-core that referenced this issue Nov 18, 2024
removed example in annotation
@timonback
Copy link
Member

Hi @pdalfarr,
I reproduced the enum in quotes in #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.

@pdalfarr
Copy link
Contributor

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 ;-)

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

3 participants