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

Generated Models for Java have Invalid code #253

Open
jrshaffe opened this issue Sep 26, 2023 · 9 comments
Open

Generated Models for Java have Invalid code #253

jrshaffe opened this issue Sep 26, 2023 · 9 comments

Comments

@jrshaffe
Copy link

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
Copy link
Contributor

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
Copy link
Author

jrshaffe commented Oct 2, 2023

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
Copy link
Contributor

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:
9701a7c

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

@jrshaffe
Copy link
Author

jrshaffe commented Oct 4, 2023

What version of the Kubernetes API are you using?

I was using 1.27

You might also try regenerating at this commit:
9701a7c

Thanks! Using that commit worked for us.

@abelsromero
Copy link
Contributor

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:

  • V1PodResourceClaim
  • V1beta3FlowSchemaStatus
  • V1alpha1IPAddressSpec
  • V1alpha1ParamRef

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

@dsyer
Copy link
Contributor

dsyer commented Feb 8, 2024

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
Copy link
Contributor

dsyer commented Feb 9, 2024

I was able to get something working just for my CRDs from master (84f2bc9) 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
Copy link

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

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

  • After 90d of inactivity, lifecycle/stale is applied
  • After 30d of inactivity since lifecycle/stale was applied, lifecycle/rotten is applied
  • After 30d of inactivity since lifecycle/rotten was applied, the issue is closed

You can:

  • Mark this issue as fresh with /remove-lifecycle stale
  • Close this issue with /close
  • Offer to help out with Issue Triage

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

/lifecycle stale

@k8s-ci-robot k8s-ci-robot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label May 9, 2024
@dsyer
Copy link
Contributor

dsyer commented May 9, 2024

/remove-lifecycle stale

@k8s-ci-robot k8s-ci-robot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label May 9, 2024
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

6 participants