Skip to content

[JAVA] Incompatible types when enum values are hardcoded #6338

Closed
@yasensim

Description

@yasensim
Description

Improper type casting when values are hardcoded inside enum.

Swagger-codegen version

2.2.3

Swagger declaration file content or url
    "swagger": "2.0",
       "X509Certificate": {
            "type": "object",
            "properties": {

                "public_key_length": {
                    "readOnly": true,
                    "enum": [
                        2048,
                        3072
                    ],
                    "type": "integer",
                    "description": "size measured in bits of the public/private keys used in a cryptographic algorithm",
                    "format": "int64"
                }   
		}
	}
Command line used for generation

on MAC OS:
swagger-codegen generate -i test.json -l java

Also with different swagger versions with maven

Result (Generated code)
  /**
   * size measured in bits of the public/private keys used in a cryptographic algorithm
   */
  @JsonAdapter(PublicKeyLengthEnum.Adapter.class)
  public enum PublicKeyLengthEnum {
    NUMBER_2048(2048),
    
    NUMBER_3072(3072);  // these are the problematic lines

    private Long value;

    PublicKeyLengthEnum(Long value) {
      this.value = value;
    }

    public Long getValue() {
      return value;
    }

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

    public static PublicKeyLengthEnum fromValue(String text) {
      for (PublicKeyLengthEnum b : PublicKeyLengthEnum.values()) {
        if (String.valueOf(b.value).equals(text)) {
          return b;
        }
      }
      return null;
    }

    public static class Adapter extends TypeAdapter<PublicKeyLengthEnum> {
      @Override
      public void write(final JsonWriter jsonWriter, final PublicKeyLengthEnum enumeration) throws IOException {
        jsonWriter.value(enumeration.getValue());
      }

      @Override
      public PublicKeyLengthEnum read(final JsonReader jsonReader) throws IOException {
        Long value = jsonReader.nextLong();
        return PublicKeyLengthEnum.fromValue(String.valueOf(value));
      }
    }
  }

  @SerializedName("public_key_length")
  private PublicKeyLengthEnum publicKeyLength = null;

  @SerializedName("not_before")
  private Long notBefore = null;

  @SerializedName("subject")
  private String subject = null;
Compilation failure
[ERROR] /Users/ysimeonov/Documents/workspace/test/target/generated-sources/src/xxx/xxx/xxx/client/model/X509Certificate.java:[134,17] incompatible types: int cannot be converted to java.lang.Long
[ERROR] /Users/ysimeonov/Documents/workspace/test/target/generated-sources/src/xxx/xxx/xxx/client/model/X509Certificate.java:[136,17] incompatible types: int cannot be converted to java.lang.Long
[ERROR] -> [Help 1]
Workaround

I manually modified the following:

    NUMBER_2048(new Long(2048)),
    
    NUMBER_3072(new Long(3072)); 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions