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

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

Open
FuoriDiTesta opened this issue Apr 23, 2020 · 7 comments

Comments

@FuoriDiTesta
Copy link

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:

    • comment line 422 (importMapping.put("LocalDate", "org.joda.time.LocalDate");)
    • comment line 202-203
      } else if (MICROPROFILE.equals(getLibrary())) {
      dateLibrary = "legacy";
      to disable the forcing of JodaLibraries as api, and it works perfectly, for JAVA8. Not tested for other date approach
  2. XML package import always present:
    In modules\openapi-generator\src\main\resources\Java\libraries\microprofile\pojo.mustache i replaced
    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;

    with
    {{#withXml}}
    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;
    {{/withXml}}

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

Ravisankar-Challa commented Apr 27, 2020

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.
#6013
image

@FuoriDiTesta
Copy link
Author

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

Ravisankar-Challa commented Apr 27, 2020

@FuoriDiTesta
Here is the latest pull request #6064. It requires lot of changes more than what you suggested. So it would be really nice if you can verify them.

@wing328
Copy link
Member

wing328 commented Apr 29, 2020

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

Ravisankar-Challa commented Apr 29, 2020

@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: eclipse/microprofile-rest-client#261. Once the spec supports we can enable it.

CC @turkeylurkey

@oramattkosem
Copy link

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

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>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants