Skip to content

Commit 1060479

Browse files
authored
[Java RESTEasy client] added filename directive for Java RESTEasy file uploads (#17367) (#17435)
* added filename directive for Java RESTEasy file uploads (#17367) * regenerated samples
1 parent bf4c98a commit 1060479

212 files changed

Lines changed: 26114 additions & 2 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
generatorName: java
2+
outputDir: samples/client/petstore/java/resteasy-echo
3+
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore-echo.yaml
4+
templateDir: modules/openapi-generator/src/main/resources/Java
5+
additionalProperties:
6+
artifactId: petstore-resteasy-echo
7+
hideGenerationTimestamp: "true"
8+
library: resteasy

modules/openapi-generator/src/main/resources/Java/libraries/resteasy/ApiClient.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
498498
if (param.getValue() instanceof File) {
499499
File file = (File) param.getValue();
500500
try {
501-
multipart.addFormData(param.getKey(),new FileInputStream(file),MediaType.APPLICATION_OCTET_STREAM_TYPE);
501+
multipart.addFormData(param.getKey(),new FileInputStream(file),MediaType.APPLICATION_OCTET_STREAM_TYPE, file.getName());
502502
} catch (FileNotFoundException e) {
503503
throw new ApiException("Could not serialize multipart/form-data "+e.getMessage());
504504
}

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

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@
6464
import java.util.regex.Matcher;
6565
import java.util.regex.Pattern;
6666
import java.util.stream.Collectors;
67+
import java.util.stream.Stream;
6768

69+
import junit.framework.AssertionFailedError;
6870
import lombok.SneakyThrows;
6971
import org.openapitools.codegen.ClientOptInput;
7072
import org.openapitools.codegen.CodegenConstants;
@@ -764,6 +766,50 @@ public void testAuthorizationScopeValues_Issue6733() throws IOException {
764766
files.forEach(File::deleteOnExit);
765767
}
766768

769+
@Test
770+
public void testMultiPartSpecifiesFileName_Issue17367() throws IOException {
771+
File output = Files.createTempDirectory("test").toFile();
772+
output.deleteOnExit();
773+
774+
final CodegenConfigurator configurator = new CodegenConfigurator()
775+
.setGeneratorName("java")
776+
.setLibrary(JavaClientCodegen.RESTEASY)
777+
.setValidateSpec(false)
778+
.setInputSpec("src/test/resources/3_0/issue-17367.yaml")
779+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
780+
781+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
782+
783+
DefaultGenerator generator = new DefaultGenerator();
784+
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
785+
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
786+
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
787+
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true");
788+
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "true");
789+
generator.setGenerateMetadata(false);
790+
List<File> files = generator.opts(clientOptInput).generate();
791+
try {
792+
validateJavaSourceFiles(files);
793+
File apiClient = files.stream()
794+
.filter(f -> f.getName().equals("ApiClient.java"))
795+
.findFirst()
796+
.orElseThrow(() -> new AssertionFailedError(
797+
"ApiClient.java not found"));
798+
799+
Stream<String> contents = Arrays.stream(Files.readString(apiClient.toPath(),
800+
StandardCharsets.UTF_8).split("\n"));
801+
802+
// https://docs.jboss.org/resteasy/docs/6.2.5.Final/javadocs/org/jboss/resteasy/plugins/providers/multipart/MultipartFormDataOutput.html#addFormData(java.lang.String,java.lang.Object,jakarta.ws.rs.core.MediaType,java.lang.String)
803+
assertTrue(contents.anyMatch(l -> l.matches(
804+
".*multipart\\.addFormData\\(param.getKey\\(\\),\\s*" +
805+
"new\\s+FileInputStream\\(file\\),\\s*" +
806+
"MediaType\\.APPLICATION_OCTET_STREAM_TYPE,\\s*" +
807+
"file.getName\\(\\)\\);.*")));
808+
} finally {
809+
files.forEach(File::deleteOnExit);
810+
}
811+
}
812+
767813
@Test
768814
public void testAuthorizationsMethodsSizeWhenFiltered() {
769815
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue4584.yaml");
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
openapi: 3.0.0
2+
info:
3+
version: 1.0.0
4+
title: Foo API
5+
servers:
6+
- url: http://127.0.0.1:8080/{basePath}
7+
variables:
8+
basePath:
9+
default: v1
10+
paths:
11+
/foo:
12+
post:
13+
requestBody:
14+
content:
15+
multipart/form-data:
16+
schema:
17+
type: object
18+
properties:
19+
bar:
20+
type: string
21+
format: binary
22+
responses:
23+
'200':
24+
description: OK

0 commit comments

Comments
 (0)