kubernetes-client / gen

Common generator scripts for all client libraries
Apache License 2.0
150 stars 147 forks source link

Generated Models for Java have Invalid code #253

Open jrshaffe opened 9 months ago

jrshaffe commented 9 months ago

When I run the generation for java I am getting code that doesn't compile. The errors all say

Non-static method 'getGson()' cannot be referenced from a static context

It looks like the following methods are being added to my all my models and

 /**
  * Create an instance of V1MyObject given an JSON string
  *
  * @param jsonString JSON string
  * @return An instance of V1MyObject
  * @throws IOException if the JSON string is invalid with respect to V1MyObject
  */
  public static V1MyObject fromJson(String jsonString) throws IOException {
    return JSON.getGson().fromJson(jsonString, V1MyObject.class);
  }

 /**
  * Convert an instance of V1MyObject to an JSON string
  *
  * @return JSON string
  */
  public String toJson() {
    return JSON.getGson().toJson(this);
  }

JSON is referring toio.kubernetes.client.openapi.JSON

and that method is defined as follows:

  public JSON setGson(Gson gson) {
    this.gson = gson;
    return this;
  }

https://github.com/kubernetes-client/java/blob/master/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java#L120-L122.

I noticed that the JSON.java file looks like it wasn't updated at the same time as the other files in there. All the other ones say there were Automated from openapi generation release 1.27. Not sure if that helps at all.

image
brendandburns commented 9 months ago

Ah, this is due to https://github.com/kubernetes-client/java/blob/master/kubernetes/.openapi-generator-ignore#L10

I believe that hold is no longer necessary. Can you try removing that line?

jrshaffe commented 9 months ago

Ah, this is due to https://github.com/kubernetes-client/java/blob/master/kubernetes/.openapi-generator-ignore#L10

I believe that hold is no longer necessary. Can you try removing that line?

So that did fix my compilation issue. I commented out the line you mentioned and ran the generation as described here. I then did a mvn install on the java project and used the generated SNAPSHOT jar for client-java-extended in my project. I had to then add some additional dependencies but it did end up compiling.

Alot of the the other subprojects in java project are failing though. I attempted to fix the compilation issues and skip some of the test but then I got to a point where util subproject is complaining about missing classes and I wasn't sure what to do there.

If anyone wants to look at my fork it's here: https://github.com/jrshaffe/java/tree/jrshaffe/fixOpenAPIGeneration

brendandburns commented 9 months ago

What version of the Kubernetes API are you using? The existing codebase is pointed at release-1.27 The Kubernetes release changes may cause missing class files.

I'm in the process of regenerating the common Java client, so I will probably run into these problems and debug.

You might also try regenerating at this commit: https://github.com/kubernetes-client/gen/commit/9701a7c9ae41c489c1839a10069e6b0c79803d72

Which is before we rev'd the openapi code generator from 4.x to 6.x

jrshaffe commented 9 months ago

What version of the Kubernetes API are you using?

I was using 1.27

You might also try regenerating at this commit: https://github.com/kubernetes-client/gen/commit/9701a7c9ae41c489c1839a10069e6b0c79803d72

Thanks! Using that commit worked for us.

abelsromero commented 7 months ago

Hi 👋 I see the was a 19.0.0 release that updated .openapi-generator-ignore but the code for JSON class was not updated. I run https://github.com/kubernetes-client/java/wiki/4.-Development-and-Contributing to update them and fix most of the compilation errors (now the JSON class is correct). The fluent API modules failed because it expects some classes that are not generated, for example:

If anyone knows how to update the fluent modules, I can create a PR with the updated client.

dsyer commented 5 months ago

Ping @brendandburns back on this. There seems to be no way to use the generator right now until everything moves up a step and this JSON thing gets fixed.

dsyer commented 5 months ago

I was able to get something working just for my CRDs from master (84f2bc9e34129f92606a00fccb8c5c62204012b9) by discarding the io.kubernetes.client generated code and using the published API in version 20.0.0 from https://github.com/kubernetes-client/java. I also bumped the generator version by setting OPENAPI_GENERATOR_COMMIT=v7.3.0, but not sure if that was essential or not.

The issue still remains though in the published containers and docs, and probably the fluent modules issue that @abelsromero mentioned.

k8s-triage-robot commented 2 months ago

The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale

dsyer commented 2 months ago

/remove-lifecycle stale