45
45
import com .google .common .collect .Streams ;
46
46
import com .google .gson .JsonSyntaxException ;
47
47
import com .openblocks .sdk .exception .PluginException ;
48
+ import com .openblocks .sdk .exception .ServerException ;
48
49
import com .openblocks .sdk .models .Property ;
49
50
import com .openblocks .sdk .models .RestBodyFormFileData ;
50
51
import com .openblocks .sdk .util .ExceptionUtils ;
@@ -155,11 +156,8 @@ public String parseFormData(List<Property> bodyFormData, boolean encodeParamsTog
155
156
return ;
156
157
}
157
158
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
+
163
161
});
164
162
165
163
return BodyInserters .fromMultipartData (bodyBuilder .build ())
@@ -172,7 +170,12 @@ private void populateMultiformFileData(MultipartBodyBuilder bodyBuilder, Propert
172
170
.forEach (multipartFormData -> {
173
171
String name = multipartFormData .getName ();
174
172
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
+ }
176
179
bodyBuilder .part (property .getKey (), decodedValue )
177
180
.filename (name );
178
181
});
@@ -182,7 +185,7 @@ private List<MultipartFormData> parseMultipartFormDataList(Property property) {
182
185
if (property instanceof RestBodyFormFileData restBodyFormFileData ) {
183
186
return restBodyFormFileData .getFileData ();
184
187
}
185
- throw new PluginException ( DATASOURCE_ARGUMENT_ERROR , "CONTENT_PARSE_ERROR " );
188
+ throw new ServerException ( "invalid data type for MultipartForm " );
186
189
}
187
190
188
191
public static List <MultipartFormData > convertToMultiformFileValue (String fileValue , Map <String , Object > paramMap ) {
@@ -198,7 +201,8 @@ public static List<MultipartFormData> convertToMultiformFileValue(String fileVal
198
201
.map (DataUtils ::parseMultipartFormData )
199
202
.toList ();
200
203
}
201
- } catch (Throwable ignored ) {
204
+ } catch (Throwable e ) {
205
+ throw ExceptionUtils .wrapException (DATASOURCE_ARGUMENT_ERROR , "CONTENT_PARSE_ERROR" , e );
202
206
// ignore
203
207
}
204
208
throw new PluginException (DATASOURCE_ARGUMENT_ERROR , "CONTENT_PARSE_ERROR" );
@@ -207,8 +211,17 @@ public static List<MultipartFormData> convertToMultiformFileValue(String fileVal
207
211
@ Nonnull
208
212
private static MultipartFormData parseMultipartFormData (JsonNode jsonObject ) {
209
213
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 ());
212
225
return result ;
213
226
}
214
227
0 commit comments