Skip to content

Commit 941dad6

Browse files
committed
Updated JerseyRequest and ResourceService to avoid erquest encoding bug
1 parent 1ac0554 commit 941dad6

File tree

3 files changed

+31
-16
lines changed

3 files changed

+31
-16
lines changed

src/main/java/com/jaspersoft/jasperserver/jaxrs/client/apiadapters/resources/SingleResourceAdapter.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ private JerseyRequest<ClientResource> prepareCopyOrMoveRequest(String fromUri) {
197197
* Allows to upload resource with MultiPart request.
198198
*
199199
* @param multipartResource form
200-
* @param clazz entity class
201-
* @param <T> type of entity class
200+
* @param clazz entity class
201+
* @param <T> type of entity class
202202
* @return result instance
203203
*/
204204
public <T> OperationResult<T> uploadMultipartResource(FormDataMultiPart multipartResource, Class<T> clazz) {
@@ -207,7 +207,7 @@ public <T> OperationResult<T> uploadMultipartResource(FormDataMultiPart multipar
207207
return request.post(multipartResource);
208208
}
209209

210-
public <T> OperationResult<T> get(Class<T> clazz){
210+
public <T> OperationResult<T> get(Class<T> clazz) {
211211
JerseyRequest<T> request = buildRequest(clazz);
212212
if (isRootFolder(resourceUri)) {
213213
request.setAccept(ResourceMediaType.FOLDER_JSON);
@@ -227,10 +227,10 @@ public OperationResult<ClientFile> uploadFile(File fileContent,
227227
}
228228

229229
public <R> RequestExecution asyncUploadFile(final File fileContent,
230-
final ClientFile.FileType fileType,
231-
final String label,
232-
final String description,
233-
final Callback<OperationResult<ClientFile>, R> callback) {
230+
final ClientFile.FileType fileType,
231+
final String label,
232+
final String description,
233+
final Callback<OperationResult<ClientFile>, R> callback) {
234234
final FormDataMultiPart form = prepareUploadForm(fileContent, fileType, label, description);
235235
final JerseyRequest<ClientFile> request = prepareUploadFileRequest();
236236
RequestExecution task = new RequestExecution(new Runnable() {
@@ -321,9 +321,11 @@ private <ResourceType extends ClientResource> JerseyRequest<ResourceType> prepar
321321
return request;
322322
}
323323

324-
private <P> JerseyRequest<P> buildRequest(Class<P> clazz) {
324+
private <P> JerseyRequest<P> buildRequest(Class<P> clazz) {
325325
path.add(SERVICE_URI);
326-
path.addAll((resourceUri.equals(REGEX)) ? Arrays.asList(REGEX) : Arrays.asList(resourceUri.split(REGEX)));
326+
if (!resourceUri.equals(REGEX)) {
327+
path.addAll(Arrays.asList(resourceUri.split(REGEX)));
328+
}
327329
return JerseyRequest.buildRequest(sessionStorage,
328330
clazz,
329331
path.toArray(new String[path.size()]),

src/main/java/com/jaspersoft/jasperserver/jaxrs/client/core/JerseyRequest.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ protected JerseyRequest(SessionStorage sessionStorage, GenericType<ResponseType>
7979
restrictedHttpMethods = sessionStorage.getConfiguration().getRestrictedHttpMethods();
8080
init(sessionStorage);
8181
}
82+
8283
private void init(SessionStorage sessionStorage) {
8384
RestClientConfiguration configuration = sessionStorage.getConfiguration();
8485

@@ -104,11 +105,20 @@ public static <T> JerseyRequest<T> buildRequest(SessionStorage sessionStorage, G
104105
JerseyRequest<T> request = new JerseyRequest<T>(sessionStorage, genericType);
105106
return configRequest(request, path, errorHandler);
106107
}
107-
private static <T> JerseyRequest<T> configRequest(JerseyRequest<T> request, String[] path, ErrorHandler errorHandler){
108+
109+
private static <T> JerseyRequest<T> configRequest(JerseyRequest<T> request, String[] path, ErrorHandler errorHandler) {
108110
request.errorHandler = errorHandler != null ? errorHandler : new DefaultErrorHandler();
111+
boolean validatNnext = true;
109112
for (String pathElem : path) {
110-
if(!UriComponent.valid(pathElem, UriComponent.Type.PATH_SEGMENT)){
111-
pathElem = UriComponent.contextualEncode(pathElem, UriComponent.Type.PATH_SEGMENT);
113+
if (validatNnext) {
114+
if (!UriComponent.valid(pathElem, UriComponent.Type.PATH_SEGMENT)) {
115+
pathElem = UriComponent.contextualEncode(pathElem, UriComponent.Type.PATH_SEGMENT);
116+
}
117+
if (pathElem.equals("inputControls")) {
118+
validatNnext = false;
119+
}
120+
} else {
121+
validatNnext = true;
112122
}
113123
request.setPath(pathElem);
114124
}

src/test/java/com/jaspersoft/jasperserver/jaxrs/client/apiadapters/resources/SingleResourceAdapterTest.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ public void should_return_operation_result_with_client_resource_folder() {
300300

301301
mockStatic(JerseyRequest.class);
302302
when(buildRequest(eq(sessionStorageMock), eq(ClientResource.class),
303-
eq(new String[]{"resources", resourceUri}), any(DefaultErrorHandler.class))).thenReturn(jerseyRequestMock);
303+
eq(new String[]{"resources"}), any(DefaultErrorHandler.class))).thenReturn(jerseyRequestMock);
304304
doReturn(operationResultMock).when(jerseyRequestMock).get();
305305

306306
SingleResourceAdapter adapter = new SingleResourceAdapter(sessionStorageMock, resourceUri);
@@ -334,7 +334,7 @@ public void should_send_descriptor_into_server_asynchronously() throws Interrupt
334334

335335
mockStatic(JerseyRequest.class);
336336
when(buildRequest(eq(sessionStorageMock), eq(ClientAdhocDataView.class),
337-
eq(new String[]{"resources", resourceUri}),
337+
eq(new String[]{"resources"}),
338338
any(DefaultErrorHandler.class))).thenReturn(adhocDataViewJerseyRequestMock);
339339
doReturn(adhocDataViewOperationResultMock).when(adhocDataViewJerseyRequestMock).post(descriptorMock);
340340
doReturn(configurationMock).when(sessionStorageMock).getConfiguration();
@@ -391,7 +391,7 @@ public void should_send_descriptor_into_server() {
391391

392392
mockStatic(JerseyRequest.class);
393393
when(buildRequest(eq(sessionStorageMock), eq(ClientAdhocDataView.class),
394-
eq(new String[]{"resources", resourceUri}),
394+
eq(new String[]{"resources"}),
395395
any(DefaultErrorHandler.class))).thenReturn(adhocDataViewJerseyRequestMock);
396396
doReturn(adhocDataViewOperationResultMock).when(adhocDataViewJerseyRequestMock).post(descriptorMock);
397397
doReturn(configurationMock).when(sessionStorageMock).getConfiguration();
@@ -404,7 +404,10 @@ public void should_send_descriptor_into_server() {
404404

405405
/** Then **/
406406
verifyStatic();
407-
buildRequest(eq(sessionStorageMock), eq(ClientAdhocDataView.class), eq(new String[]{"resources", resourceUri}), any(DefaultErrorHandler.class));
407+
buildRequest(eq(sessionStorageMock),
408+
eq(ClientAdhocDataView.class),
409+
eq(new String[]{"resources"}),
410+
any(DefaultErrorHandler.class));
408411

409412
assertNotNull(retrieved);
410413
assertSame(retrieved, adhocDataViewOperationResultMock);

0 commit comments

Comments
 (0)