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

[BUG] [JAVA] enumOuterClass template is missing JSON-B serializer/deserializer #17526

Closed
aDifferentUser opened this issue Jan 3, 2024 · 0 comments · Fixed by #18951
Closed

Comments

@aDifferentUser
Copy link

Description

The mustache template enumOuterClass.mustache does not contain the necessary serializer and deserializer for JSON-B. These are present for inner enums (enumClass.mustache). In general there are some big differences between these two templates, but I only tested JSON-B code generation.

openapi-generator version

OpenAPI code generator (via gradle plugin): 7.1.0

OpenAPI declaration file content or url
gradle task
tasks.register(taskName, org.openapitools.generator.gradle.plugin.tasks.GenerateTask) {
  generatorName = 'java'
  library = 'microprofile'
  inputSpec = file("demo.yaml").toString()
  configOptions = [
      microprofileRestClientVersion: '3.0'
  ]
}
demo.yaml
openapi: 3.0.3
info:
  title: Demo Webservice
  version: 1.0.0
servers:
  - url: https://test.com/api/demo
paths:
  /demo:
    get:
      operationId: getDemo
      responses:
        '200':
          description: Demo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DemoResponse'
components:
  schemas:
    DemoResponse:
      properties:
        demo:
          $ref: '#/components/schemas/DemoEnum'
    DemoEnum:
      type: string
      enum:
        - yes
        - no
        - maybe
actual output
/**
 * Gets or Sets DemoEnum
 */
public enum DemoEnum {
  TRUE("true"),
  FALSE("false"),
  MAYBE("maybe");

  private String value;

  DemoEnum(String value) {
    this.value = value;
  }

  @Override
  public String toString() {
    return String.valueOf(value);
  }

  public static DemoEnum fromValue(String text) {
    for (DemoEnum b : DemoEnum.values()) {
      if (String.valueOf(b.value).equals(text)) {
        return b;
      }
    }
    throw new IllegalArgumentException("Unexpected value '" + text + "'");
  }
}
expected output
@JsonbTypeSerializer(DemoEnum.Serializer.class)
@JsonbTypeDeserializer(DemoEnum.Deserializer.class)
public enum DemoEnum {

  TRUE(String.valueOf("true")), FALSE(String.valueOf("false")), MAYBE(String.valueOf("maybe"));


  String value;

  DemoEnum (String v) {
      value = v;
  }

  public String value() {
      return value;
  }

  @Override
  public String toString() {
      return String.valueOf(value);
  }

  public static final class Deserializer implements JsonbDeserializer<DemoEnum> {
      @Override
      public DemoEnum deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
          for (DemoEnum b : DemoEnum.values()) {
              if (String.valueOf(b.value).equals(parser.getString())) {
                  return b;
              }
          }
          throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");
      }
  }

  public static final class Serializer implements JsonbSerializer<DemoEnum> {
      @Override
      public void serialize(DemoEnum obj, JsonGenerator generator, SerializationContext ctx) {
          generator.write(obj.value);
      }
  }
}
Suggested fix

Add the missing parts in the enumOuterClass.mustache template.

DielN added a commit to DielN/openapi-generator that referenced this issue Jun 17, 2024
DielN added a commit to DielN/openapi-generator that referenced this issue Jun 17, 2024
DielN added a commit to DielN/openapi-generator that referenced this issue Jul 6, 2024
@wing328 wing328 closed this as completed in a3912b7 Jul 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
1 participant