Skip to content

[JavaSpring]openapi-generator-maven-plugin with <async>false</async> #1164

@raghuraman1

Description

@raghuraman1

Hi,
I am using the openapi-generator-maven-plugin with these versions: 3.3.1-SNAPSHOT (thats master ).
I came across this bug. Please see code snippet below of the pom.xml alongwith my suggestions for the fix.. Let me know if I should raise a PR.

I have also noted another smaller issue unrelated to this.
Thanks.
R
Please note value of asynch: false.

`

            <plugin>
                          <groupId>org.openapitools</groupId>
			<artifactId>openapi-generator-maven-plugin</artifactId>
			<version>${openapi.codegen.version}</version>
			<executions>
				<execution>
					<id>common</id>
					<goals>
						<goal>generate</goal>
					</goals>
					<configuration>
                                              <inputSpec>${project.basedir}/src/main/resources/api.yaml</inputSpec>
						<modelPackage>com.example.api.models</modelPackage>
						<apiPackage>com.example.api</apiPackage>
						<output>${project.basedir}</output>					
						<language>spring</language>
						<invokerPackage>com.example.api</invokerPackage>
						<basePackage>com.example.api</basePackage>
						<withXml>true</withXml>
						<configOptions>
						
							<artifactId>foo</artifactId>
							<artifactDescription>Test API</artifactDescription>
							<title>Test API</title>
							<artifactUrl>https://api.example.com</artifactUrl>
							<groupId>com.example.api</groupId>
							<artifactVersion>1</artifactVersion>								
							<sourceFolder>src/gen/java/main</sourceFolder>
							<serializableModel>true</serializableModel>
							<dateLibrary>java8</dateLibrary>
							<java8>true</java8>
							<async>false</async>
							<library>spring-boot</library>		
							<delegatePattern>true</delegatePattern>
							<useBeanValidation>true</useBeanValidation>
							<useOptional>true</useOptional>	
							<hideGenerationTimestamp>true</hideGenerationTimestamp>								
						</configOptions>							
					</configuration>
				</execution>
			</executions>
		</plugin>

`

For the above configuration in openapi-generator\modules\openapi-generator\src\main\resources\JavaSpring\methodBody.mustache an expression of
{{#async}}CompletableFuture.completedFuture({{/async}} should resolve to empty. Unfortunately : In openapi-generator\modules\openapi-generator\src\main\java\org\openapitools\codegen\DefaultGenerator.java the value of async in this.config.additionalProperties() is a string and not a boolean.

This causes wrong code generation.

I can think of a few solutions of which to my mind the most effective one is this:
In openapi-generator\modules\openapi-generator\src\main\java\org\openapitools\codegen\DefaultGenerator.java in method public Generator opts(ClientOptInput opts) right after this line
"this.config = opts.getConfig();"
invoke
'adjustToBoolean("async");'

//new method

`
public void adjustToBoolean(String propertyName)
{
Object object = this.config.additionalProperties().get(propertyName);
Boolean val=Boolean.FALSE;
if(object!=null)
{
if(object instanceof String)
{
String string=(String) object;
if(string.equalsIgnoreCase("true"))
{
val=true;
}
else
{
val=Boolean.FALSE;
}
}
else if(object instanceof Boolean)
{
val=(Boolean) object;
}
else
{
val=Boolean.TRUE;
}
}
else
{
val=Boolean.FALSE;
}
this.config.additionalProperties().put(propertyName, val);

} 

`
Note: In addition to the above problem and unrelated to this there is a generated code in the generated OpenAPI2SpringBoot.java

@bean
public WebMvcConfigurer webConfigurer() {
return new WebMvcConfigurer() {
/* @OverRide
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("")
.allowedMethods("
")
.allowedHeaders("Content-Type");
} */
};
}

This code is not fully implemented and seems mostly commented.
Maven based compilation causes compilation error here.
This can be fixed by changing in openapi-generator\modules\openapi-generator\src\main\resources\JavaSpring\libraries\spring-boot\openapi2SpringBoot.mustache
the following lines:

@bean
public Web{{^reactive}}Mvc{{/reactive}}{{#reactive}}Flux{{/reactive}}Configurer webConfigurer() {
return new Web{{^reactive}}Mvc{{/reactive}}
{{#reactive}}Flux{{/reactive}}Configurer{{^java8}}Adapter{{/java8}}() {
/* @OverRide
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("")
.allowedMethods("
")
.allowedHeaders("Content-Type");
} */
{{^useSpringfox}}

        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.14.2/");
        }
      {{/useSpringfox}}
    };
}

TO

/* @bean
public Web{{^reactive}}Mvc{{/reactive}}{{#reactive}}Flux{{/reactive}}Configurer webConfigurer() {
return new Web{{^reactive}}Mvc{{/reactive}}{{#reactive}}Flux{{/reactive}}Configurer{{^java8}}Adapter{{/java8}}() {
@OverRide
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("")
.allowedMethods("
")
.allowedHeaders("Content-Type");
}
{{^useSpringfox}}

        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.14.2/");
        }

{{/useSpringfox}}
};
}
*/

I can include this change also in the PR
Note: I have not yet learnt how to show the code blocks properly in this issue editor. I hope everything is clear in spite of that.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions