Skip to content

Commit 267877c

Browse files
committed
implement useAbstractionForFiles for webclient library
1 parent f2671fc commit 267877c

File tree

4 files changed

+48
-4
lines changed

4 files changed

+48
-4
lines changed

docs/generators/java.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
5858
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|
5959
|sourceFolder|source folder for generated code| |src/main/java|
6060
|supportJava6|Whether to support Java6 with the Jersey1 library. This option has been deprecated and will be removed in the 5.x release| |false|
61-
|useAbstractionForFiles|Use alternative types instead of java.io.File to allow passing bytes without a file on disk. Available on resttemplate library| |false|
61+
|useAbstractionForFiles|Use alternative types instead of java.io.File to allow passing bytes without a file on disk. Available on resttemplate and webclient library| |false|
6262
|useBeanValidation|Use BeanValidation API annotations| |false|
6363
|useGzipFeature|Send gzip-encoded requests| |false|
6464
|usePlayWS|Use Play! Async HTTP client (Play WS API)| |false|

modules/openapi-generator/src/main/resources/Java/libraries/webclient/api.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public class {{classname}} {
6262
* @see <a href="{{url}}">{{summary}} Documentation</a>
6363
{{/externalDocs}}
6464
*/
65-
public {{#returnType}}{{#isArray}}Flux<{{{returnBaseType}}}>{{/isArray}}{{^isArray}}Mono<{{{returnType}}}>{{/isArray}} {{/returnType}}{{^returnType}}Mono<Void> {{/returnType}}{{operationId}}({{#allParams}}{{{dataType}}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws WebClientResponseException {
65+
public {{#returnType}}{{#isArray}}Flux<{{{returnBaseType}}}>{{/isArray}}{{^isArray}}Mono<{{{returnType}}}>{{/isArray}} {{/returnType}}{{^returnType}}Mono<Void> {{/returnType}}{{operationId}}({{#allParams}}{{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection<org.springframework.core.io.AbstractResource>{{/collectionFormat}}{{^collectionFormat}}org.springframework.core.io.AbstractResource{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws WebClientResponseException {
6666
Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}};
6767
{{#allParams}}
6868
{{#required}}
@@ -109,7 +109,7 @@ public class {{classname}} {
109109

110110
{{#formParams}}
111111
if ({{paramName}} != null)
112-
formParams.add{{#collectionFormat}}All{{/collectionFormat}}("{{baseName}}", {{#isFile}}{{^collectionFormat}}new FileSystemResource({{paramName}}){{/collectionFormat}}{{/isFile}}{{#isFile}}{{#collectionFormat}}{{paramName}}.stream().map(FileSystemResource::new).collect(Collectors.toList()){{/collectionFormat}}{{/isFile}}{{^isFile}}{{paramName}}{{/isFile}});
112+
formParams.add{{#collectionFormat}}All{{/collectionFormat}}("{{baseName}}", {{#isFile}}{{^collectionFormat}}{{#useAbstractionForFiles}}{{paramName}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}new FileSystemResource({{paramName}}){{/useAbstractionForFiles}}{{/collectionFormat}}{{/isFile}}{{#isFile}}{{#collectionFormat}}{{paramName}}.stream(){{^useAbstractionForFiles}}.map(FileSystemResource::new){{/useAbstractionForFiles}}.collect(Collectors.toList()){{/collectionFormat}}{{/isFile}}{{^isFile}}{{paramName}}{{/isFile}});
113113
{{/formParams}}
114114
{{/hasFormParams}}
115115

modules/openapi-generator/src/main/resources/Java/libraries/webclient/api_test.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class {{classname}}Test {
3131
@Test
3232
public void {{operationId}}Test() {
3333
{{#allParams}}
34-
{{{dataType}}} {{paramName}} = null;
34+
{{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection<org.springframework.core.io.AbstractResource>{{/collectionFormat}}{{^collectionFormat}}org.springframework.core.io.AbstractResource{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}} = null;
3535
{{/allParams}}
3636
{{#returnType}}{{{returnType}}} response = {{/returnType}}api.{{operationId}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}){{#isArray}}.collectList().block(){{/isArray}}{{^isArray}}.block(){{/isArray}};
3737

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,4 +1088,48 @@ public void testCustomMethodParamsAreCamelizedWhenUsingFeign() throws IOExceptio
10881088

10891089
output.deleteOnExit();
10901090
}
1091+
1092+
/**
1093+
* See https://github.com/OpenAPITools/openapi-generator/issues/6715
1094+
*/
1095+
@Test
1096+
public void testWebClientWithUseAbstractionForFiles() throws IOException {
1097+
1098+
Map<String, Object> properties = new HashMap<>();
1099+
properties.put(JavaClientCodegen.JAVA8_MODE, true);
1100+
properties.put(CodegenConstants.API_PACKAGE, "xyz.abcdef.api");
1101+
properties.put(JavaClientCodegen.USE_ABSTRACTION_FOR_FILES, true);
1102+
1103+
1104+
File output = Files.createTempDirectory("test").toFile();
1105+
output.deleteOnExit();
1106+
1107+
final CodegenConfigurator configurator = new CodegenConfigurator()
1108+
.setGeneratorName("java")
1109+
.setLibrary(JavaClientCodegen.WEBCLIENT)
1110+
.setAdditionalProperties(properties)
1111+
.setInputSpec("src/test/resources/3_0/form-multipart-binary-array.yaml")
1112+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
1113+
1114+
1115+
DefaultGenerator generator = new DefaultGenerator();
1116+
List<File> files = generator.opts(configurator.toClientOptInput()).generate();
1117+
files.forEach(File::deleteOnExit);
1118+
1119+
1120+
Path defaultApi = Paths.get(output + "/src/main/java/xyz/abcdef/api/MultipartApi.java");
1121+
TestUtils.assertFileContains(defaultApi,
1122+
//multiple files
1123+
"multipartArray(java.util.Collection<org.springframework.core.io.AbstractResource> files)",
1124+
"formParams.addAll(\"files\", files.stream().collect(Collectors.toList()));",
1125+
1126+
//mixed
1127+
"multipartMixed(org.springframework.core.io.AbstractResource file, MultipartMixedMarker marker)",
1128+
"formParams.add(\"file\", file);",
1129+
1130+
//single file
1131+
"multipartSingle(org.springframework.core.io.AbstractResource file)",
1132+
"formParams.add(\"file\", file);"
1133+
);
1134+
}
10911135
}

0 commit comments

Comments
 (0)