openapi-generator-cli icon indicating copy to clipboard operation
openapi-generator-cli copied to clipboard

jaxrs-spec generator could not handle enumerations defined with anyOf

Open omerdogan opened this issue 2 years ago • 1 comments

openapi generate could not handle enumerations defined with anyOf, it will generate an empty enumeration class, i think the correct behavior is generating enumeration class with the values defined in yaml schema and Referencing class properties are defined as String

openapi-generator-cli-6.5.0.jar dont generate any AnyOf classes, openapi-generator-cli-6.4.0.jar generate AnyOf classes if "--global-property models" flag is not provided
both versions generate an empty NEvent enumeration class

Assume that the following schema part is given , openapi-generator-cli-6.4.0 generate NEvent.java and NEventAnyOf.java , but if --global-property-models is given as below, it will only generate Nevent.java openapi-generator-cli-6.5.0 never generate AnyOf classes

schema:
   Event:
     anyOf:
     - type: string
       enum:
         - SESSION_TERMINATION
         - LOSS_OF_BEARER 
         - RECOVERY_OF_BEARER
         - RELEASE_OF_BEARER
         - USAGE_REPORT
         - FAILED_RESOURCES_ALLOCATION
     - type: string

Sample command line ; java -Dresolve=true -Dlog.level=info -Dmodels -Duser.language=en -Dfile.encoding=UTF-8 -Xmx256M -jar 'D:\home\omerd\n5g\codegen\openapi-generator-cli-6.4.0.jar' generate --api-package mypackage --model-package mymodelpackage --invoker-package myinvokerpackage --group-id mygroup --artifact-id myartifact --model-name-prefix N --generator-name jaxrs-spec --skip-validate-spec --config config.yml --input-spec target.yaml --openapi-normalizer REF_AS_PARENT_IN_ALLOF=true --import-mappings=Date=java.util.Date,DateTime=java.util.Date --type-mappings=Date=Date,DateTime=DateTime --global-property models=Event:EnumModel2:model3:model4 --output output

Generated Event Class:

@JsonTypeName("Event")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen")
public class NEvent   {
 @Override
 public boolean equals(Object o) {
   if (this == o) {
     return true;
   }
   if (o == null || getClass() != o.getClass()) {
     return false;
   }
   return true;
 }

 @Override
 public int hashCode() {
   return Objects.hash();
 }

 @Override
 public String toString() {
   StringBuilder sb = new StringBuilder();
   sb.append("class NEvent {\n");
   
   sb.append("}");
   return sb.toString();
 }

 /**
  * Convert the given object to string with each line indented by 4 spaces
  * (except the first line).
  */
 private String toIndentedString(Object o) {
   if (o == null) {
     return "null";
   }
   return o.toString().replace("\n", "\n    ");
 }
}

Generated AnyOf Class:

public enum NEventAnyOf {
 
 SESSION_TERMINATION("SESSION_TERMINATION"),
 
 LOSS_OF_BEARER("LOSS_OF_BEARER"),
 
 RECOVERY_OF_BEARER("RECOVERY_OF_BEARER"),
 
 RELEASE_OF_BEARER("RELEASE_OF_BEARER"),
 
 USAGE_REPORT("USAGE_REPORT"),
 
 FAILED_RESOURCES_ALLOCATION("FAILED_RESOURCES_ALLOCATION");

 private String value;
....
}

omerdogan avatar Apr 08 '23 22:04 omerdogan

This is quite a serious one. I'm wondering how it has been fixed, or is it even fixed?

AienTech avatar May 28 '24 11:05 AienTech