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.83k stars 6.58k forks source link

[BUG] [JAVA][MICROPROFILE] Error during client generation due to wrong import addition #6028

Open FuoriDiTesta opened 4 years ago

FuoriDiTesta commented 4 years ago
Description

Generating a client for language Java, library Microprofile, in a maven project, the compilation failed due to additional packages that are not included in microprofile dependencies. To be specific:

1) Date library are always JodaTime, even if something different is specified 2) javax.xml.bind are always imported, even if xml is set to false 3) package org.apache.cxf.jaxrs.ext.multipart is always declared as import

Point 2 and 3 are packages that are not used in the code.

It's possible to fix these behavior, to avoid to have to add not necessary dependencies to the project?

openapi-generator version

openapi-generator 4.3.0 used

OpenAPI declaration file content or url

To try to make it work at least locally, this is what i found in the code:

1) JodaTime: in modules\openapi-generator\src\main\java\org\openapitools\codegen\languages\JavaClientCodegen.java:

3) For cxf multipart: In modules\openapi-generator\src\main\resources\Java\libraries\microprofile\api.mustache removed {{^disableMultipart}} import org.apache.cxf.jaxrs.ext.multipart.*; {{/disableMultipart}}

In this case, to make it works i can only remove these three lines; also this disableMultiPart is not clear from where it came from.

Command line used for generation

Maven project, mvn compile generate the error

Steps to reproduce

Execute a mvn compile on the sample projects sample.zip

Related issues/PRs

I haven't found any related issues/PRs

Suggest a fix/enhancement

fix/enhancement described previously

Ravisankar-Challa commented 4 years ago

For issue 2. Getting rid of jaxb imports causes issues in microprofile rest client since it uses XmlEnum for Enum datatypes. The microprofile template is a common template for generating both xml and json model types. microprofile-rest client template supports two content-types application/json & application/xml. Bellow is the pull request that I have tried and failed. It follows the same approach you suggested. https://github.com/OpenAPITools/openapi-generator/pull/6013 image

FuoriDiTesta commented 4 years ago

Hi Ravisankar-Challa , sorry it's not completely clear your reply. If i have also applicaiton/xml i will set the xml configuration to true when i generate; actually, even if i have absolutely no necessity of these import, because i have only application/json, i must include them.

Or better, is not clear why, in file
modules\openapi-generator\src\main\resources\Java\libraries\microprofile\pojo.mustache i

the list

import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlEnum; import javax.xml.bind.annotation.XmlEnumValue;

has not been included in the {{#withXml}}{{/withXml}} block, so that they will be included in the class only when the with xml is active, and they are really necessary.

Ravisankar-Challa commented 4 years ago

@FuoriDiTesta Here is the latest pull request https://github.com/OpenAPITools/openapi-generator/pull/6064. It requires lot of changes more than what you suggested. So it would be really nice if you can verify them.

wing328 commented 4 years ago

@Ravisankar-Challa thanks for the PR, which only changes 2 lines: https://github.com/OpenAPITools/openapi-generator/pull/6062/files.

It requires lot of changes more than what you suggested

Do you actually mean it requires fewer changes?

Ravisankar-Challa commented 4 years ago

@wing328 There are 3 issues reported in this ticket. 1st Issue: https://github.com/OpenAPITools/openapi-generator/pull/6062/files. This PR requires changes in only 2 files. 2nd Issue: https://github.com/OpenAPITools/openapi-generator/pull/6064/files. This requires lot of changes more than what has been suggested in the ticket. 3rd Issue: https://github.com/OpenAPITools/openapi-generator/pull/6680/files. Most probably we might not want to support multipart file upload for now because the microprofile rest client spec doesn't provide any portable solution. Reference: https://github.com/eclipse/microprofile-rest-client/issues/261. Once the spec supports we can enable it.

CC @turkeylurkey

oramattkosem commented 1 year ago

Is there some way to suppress the cxf import? I've tried every way I can find to stuff disableMultipart into the generator, but none seem to remove that import.

kuriakopoulosgiorgos commented 10 months ago

Is there some way to suppress the cxf import? I've tried every way I can find to stuff disableMultipart into the generator, but none seem to remove that import.

I am using openapi-generator-maven-plugin, managed to remove the import by defining the following in the plugin configuration:

<additionalProperties>disableMultipart=true</additionalProperties>

below the plugin configuration in my pom.xml file

      <plugin>
        <groupId>org.openapitools</groupId>
        <artifactId>openapi-generator-maven-plugin</artifactId>
        <version>6.3.0</version>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <inputSpec>src/main/resources/clients/sample-open-api.json</inputSpec>
              <library>microprofile</library>
              <generatorName>java</generatorName>
              <configOptions>
                <sourceFolder>src/java/main</sourceFolder>
                <microprofileRestClientVersion>3.0</microprofileRestClientVersion>
                <serializationLibrary>jsonb</serializationLibrary>
                <intefacesOnly>true</intefacesOnly>
                <configKey>my-client</configKey>
              </configOptions>
              <additionalProperties>disableMultipart=true</additionalProperties>
              <generateApiTests>false</generateApiTests>
              <generateModelTests>false</generateModelTests>
            </configuration>
          </execution>
        </executions>
      </plugin>