Open FuoriDiTesta opened 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
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.
@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.
@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?
@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
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.
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>
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 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