@@ -4211,4 +4211,36 @@ public void testFeignHc5CustomTemplateDirIsPreserved() {
42114211 "feign-hc5 must preserve a user-provided templateDir and not overwrite it with 'feign'" );
42124212 }
42134213
4214+ @ Test (description = "Regression test for multipart/form-data list handling in restclient ApiClient to avoid IndexOutOfBoundsException on empty lists" )
4215+ public void testRestClientMultipartFormParamsGuardAgainstEmptyLists () {
4216+ final Path output = newTempFolder ();
4217+ final CodegenConfigurator configurator = new CodegenConfigurator ()
4218+ .setGeneratorName (JAVA_GENERATOR )
4219+ .setLibrary (JavaClientCodegen .RESTCLIENT )
4220+ .setAdditionalProperties (Map .of (CodegenConstants .API_PACKAGE , "xyz.abcdef.api" ))
4221+ .setInputSpec ("src/test/resources/3_0/form-multipart-binary-array.yaml" )
4222+ .setOutputDir (output .toString ().replace ("\\ " , "/" ));
4223+
4224+ List <File > files = new DefaultGenerator ().opts (configurator .toClientOptInput ()).generate ();
4225+
4226+ validateJavaSourceFiles (files );
4227+
4228+ assertFileContains (
4229+ output .resolve ("src/main/java/xyz/abcdef/ApiClient.java" ),
4230+ "if (v instanceof List<?> && !((List<?>) v).isEmpty()) {" ,
4231+ "List<Object> list = (List<Object>) v;" ,
4232+ "Object first = list.get(0);" ,
4233+ "if (first != null && first.getClass().isEnum()) {" ,
4234+ "for (int i = 0; i < list.size(); i++) {" ,
4235+ "Object item = list.get(i);" ,
4236+ "if (item != null) {" ,
4237+ "((List) list).set(i, item.toString());"
4238+ );
4239+
4240+ TestUtils .assertFileNotContains (
4241+ output .resolve ("src/main/java/xyz/abcdef/ApiClient.java" ),
4242+ "if (v instanceof java.util.ArrayList) {" ,
4243+ "o.getClass().getEnumConstants() != null"
4244+ );
4245+ }
42144246}
0 commit comments