OpenAPITools / openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
https://openapi-generator.tech
Apache License 2.0
21.75k stars 6.56k forks source link

[REQ] New Jakarta+Eclipse JAX-RS templates #6881

Open bmarwell opened 4 years ago

bmarwell commented 4 years ago

Is your feature request related to a problem? Please describe.

This feature requests is intended to get another, completely different implementation of the current jax-rs one. The current implementation depends on io.swagger imports, as well as jackson as Json provider.

However, with microprofile, new vendor-agnostic APIs have arrived.

Describe the solution you'd like

The new implementation is implementation- and vendor-agnostic. It is "just" a new set of templates which can easily be derived from the existing ones.

Benefits: Most applicaiton servers, like OpenLiberty, already ship those MicroProfile standards. When not using this generator, we could ship our applications without jackson and/or swagger dependencies.

The new dependencies are:

    <dependency>
      <groupId>jakarta.validation</groupId>
      <artifactId>jakarta.validation-api</artifactId>
      <version>2.0.2</version>
      <scope>provided</scope>
    </dependency>
    <!-- JSON-B API -->
    <dependency>
      <groupId>jakarta.json.bind</groupId>
      <artifactId>jakarta.json.bind-api</artifactId>
      <version>1.0.2</version>
      <scope>provided</scope>
    </dependency>
    <!-- JSON API -->
    <dependency>
      <groupId>jakarta.json</groupId>
      <artifactId>jakarta.json-api</artifactId>
      <version>1.1.6</version>
      <scope>provided</scope>
    </dependency>
    <!-- OpenAPI -->
    <dependency>
      <groupId>org.eclipse.microprofile.openapi</groupId>
      <artifactId>microprofile-openapi-api</artifactId>
      <version>1.1.2</version>
      <scope>provided</scope>
    </dependency>

Optional: Instead of javax, prefer the new jakarta namespace:

    <dependency>
      <groupId>jakarta.ws.rs</groupId>
      <artifactId>jakarta.ws.rs-api</artifactId>
      <version>2.1.6</version>
      <scope>provided</scope>
    </dependency>

Describe alternatives you've considered

Using the current "jax-rs" implementation which is in fact "non-jakarta jax-rs plus Jackson plus swagger". Bloats the war file due to shipping jackson and swagger

Additional context

bmarwell commented 4 years ago

Example for a value class using jsonb and OpenAPI annotations:


package impl;

import org.eclipse.microprofile.openapi.annotations.media.Schema;

import javax.json.bind.annotation.JsonbProperty;

@Schema(
    name = "TaskStatus",
    description = "Current status of the requested task."
)
public class JobStatus {
  @JsonbProperty("current_step")
  @Schema(required = true, name = "current_step", example = "received")
  private final String currentStep;

  // constructor

  // getter

  // toString method
}
yeekangc commented 4 years ago

@turkeylurkey

asterisk360-admin commented 3 years ago

there is any update of this enhancement?

bmarwell commented 3 years ago

I would still like to see this as well. Currently I am recreating my classes by hand

bmarwell commented 3 years ago

@yeekangc @turkeylurkey can you ping someone to look at this?

yeekangc commented 3 years ago

Taking a look, @bmarwell. Will see what can be done. Thanks.

asterisk360-admin commented 3 years ago

@bmarwell @yeekangc @turkeylurkey. It would be great to generate the client using the microprofile-rest-client api.

Emily-Jiang commented 2 years ago

Any progress made on this one @yeekangc @turkeylurkey ?

joschi commented 2 years ago

Given the combined expertise of the people commenting in this issue, maybe one of you would like to contribute a generator: https://openapi-generator.tech/docs/new-generator

bmarwell commented 2 years ago

it is even easier. You don't need a new generator, just a modified copy of some templates!

See: https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator/src/main/resources/JavaJaxRS

igbluz commented 2 years ago

Hi @bmarwell, @yeekangc @turkeylurkey I am also interested in using openapi-generator within the new OL 22.0.0.x Version with Microprofile 5. Actually there is missing the jakarta imports. Is there somebody doing some effort in adapting the templates? Shouldn't the community provide some templates compatible with JakartaEE? I am not an expert on openapi-generator enhancing, we just use it, but I'm willing to contribute. How can we assure that the right solution will be done?

Krabbee commented 2 years ago

Hi, is there any updates on Jakarta upgrade?

sans17 commented 2 years ago

I see another issue open: https://github.com/OpenAPITools/openapi-generator/issues/13124