4545import com .google .common .collect .Streams ;
4646import com .google .gson .JsonSyntaxException ;
4747import com .openblocks .sdk .exception .PluginException ;
48+ import com .openblocks .sdk .exception .ServerException ;
4849import com .openblocks .sdk .models .Property ;
4950import com .openblocks .sdk .models .RestBodyFormFileData ;
5051import com .openblocks .sdk .util .ExceptionUtils ;
@@ -155,11 +156,8 @@ public String parseFormData(List<Property> bodyFormData, boolean encodeParamsTog
155156 return ;
156157 }
157158
158- try {
159- populateMultiformFileData (bodyBuilder , property );
160- } catch (Exception e ) {
161- throw ExceptionUtils .wrapException (DATASOURCE_ARGUMENT_ERROR , "CONTENT_PARSE_ERROR" , e );
162- }
159+ populateMultiformFileData (bodyBuilder , property );
160+
163161 });
164162
165163 return BodyInserters .fromMultipartData (bodyBuilder .build ())
@@ -172,7 +170,12 @@ private void populateMultiformFileData(MultipartBodyBuilder bodyBuilder, Propert
172170 .forEach (multipartFormData -> {
173171 String name = multipartFormData .getName ();
174172 String data = multipartFormData .getData ();
175- byte [] decodedValue = Base64 .getDecoder ().decode (data );
173+ byte [] decodedValue ;
174+ try {
175+ decodedValue = Base64 .getDecoder ().decode (data );
176+ } catch (Exception e ) {
177+ throw ExceptionUtils .wrapException (DATASOURCE_ARGUMENT_ERROR , "FAIL_TO_PARSE_BASE64_STRING" , e );
178+ }
176179 bodyBuilder .part (property .getKey (), decodedValue )
177180 .filename (name );
178181 });
@@ -182,7 +185,7 @@ private List<MultipartFormData> parseMultipartFormDataList(Property property) {
182185 if (property instanceof RestBodyFormFileData restBodyFormFileData ) {
183186 return restBodyFormFileData .getFileData ();
184187 }
185- throw new PluginException ( DATASOURCE_ARGUMENT_ERROR , "CONTENT_PARSE_ERROR " );
188+ throw new ServerException ( "invalid data type for MultipartForm " );
186189 }
187190
188191 public static List <MultipartFormData > convertToMultiformFileValue (String fileValue , Map <String , Object > paramMap ) {
@@ -198,7 +201,8 @@ public static List<MultipartFormData> convertToMultiformFileValue(String fileVal
198201 .map (DataUtils ::parseMultipartFormData )
199202 .toList ();
200203 }
201- } catch (Throwable ignored ) {
204+ } catch (Throwable e ) {
205+ throw ExceptionUtils .wrapException (DATASOURCE_ARGUMENT_ERROR , "CONTENT_PARSE_ERROR" , e );
202206 // ignore
203207 }
204208 throw new PluginException (DATASOURCE_ARGUMENT_ERROR , "CONTENT_PARSE_ERROR" );
@@ -207,8 +211,17 @@ public static List<MultipartFormData> convertToMultiformFileValue(String fileVal
207211 @ Nonnull
208212 private static MultipartFormData parseMultipartFormData (JsonNode jsonObject ) {
209213 MultipartFormData result = new MultipartFormData ();
210- result .setData (jsonObject .get ("data" ).asText ());
211- result .setName (jsonObject .get ("name" ).asText ());
214+ JsonNode data = jsonObject .get ("data" );
215+ if (!data .isTextual ()) {
216+ throw new PluginException (DATASOURCE_ARGUMENT_ERROR , "MULTIFORM_DATA_IS_NOT_STRING" );
217+ }
218+ result .setData (data .asText ());
219+
220+ JsonNode name = jsonObject .get ("name" );
221+ if (!name .isTextual ()) {
222+ throw new PluginException (DATASOURCE_ARGUMENT_ERROR , "MULTIFORM_NAME_IS_NOT_STRING" );
223+ }
224+ result .setName (name .asText ());
212225 return result ;
213226 }
214227
0 commit comments