From 8b3b750b9a2b88fbf888761ea6afe81c7012da9a Mon Sep 17 00:00:00 2001 From: Frederik Heremans Date: Tue, 9 Jul 2013 09:27:00 +0200 Subject: [PATCH] ACT-1740: Replacing newlines for status-name --- .../application/ActivitiStatusService.java | 19 +++-- .../rest/ActivitiStatusServiceTest.java | 69 +++++++++++++++++++ 2 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 modules/activiti-rest/src/test/java/org/activiti/rest/ActivitiStatusServiceTest.java diff --git a/modules/activiti-common-rest/src/main/java/org/activiti/rest/application/ActivitiStatusService.java b/modules/activiti-common-rest/src/main/java/org/activiti/rest/application/ActivitiStatusService.java index 7484a64afd..bfa1a866a8 100644 --- a/modules/activiti-common-rest/src/main/java/org/activiti/rest/application/ActivitiStatusService.java +++ b/modules/activiti-common-rest/src/main/java/org/activiti/rest/application/ActivitiStatusService.java @@ -37,6 +37,10 @@ import org.restlet.service.StatusService; */ public class ActivitiStatusService extends StatusService { + + protected static final String NEWLINE_REPLACE_REGEX = "\\r\\n|\\r|\\n"; + + /** * Overriding this method to return a JSON-object representing the error that occurred instead of * the default HTML body Restlet provides. @@ -73,22 +77,29 @@ public class ActivitiStatusService extends StatusService { if(throwable instanceof ActivitiObjectNotFoundException) { // 404 - Entity not found - status = new Status(Status.CLIENT_ERROR_NOT_FOUND.getCode(), throwable.getMessage(), null, null); + status = new Status(Status.CLIENT_ERROR_NOT_FOUND.getCode(), getSafeStatusName(throwable.getMessage()), null, null); } else if(throwable instanceof ActivitiIllegalArgumentException) { // 400 - Bad Request - status = new Status(Status.CLIENT_ERROR_BAD_REQUEST.getCode(), throwable.getMessage(), null, null); + status = new Status(Status.CLIENT_ERROR_BAD_REQUEST.getCode(), getSafeStatusName(throwable.getMessage()), null, null); } else if (throwable instanceof ActivitiOptimisticLockingException || throwable instanceof ActivitiTaskAlreadyClaimedException) { // 409 - Conflict - status = new Status(Status.CLIENT_ERROR_CONFLICT.getCode(), throwable.getMessage(), null, null); + status = new Status(Status.CLIENT_ERROR_CONFLICT.getCode(), getSafeStatusName(throwable.getMessage()), null, null); } else if (throwable instanceof ResourceException) { ResourceException re = (ResourceException) throwable; status = re.getStatus(); } else if(throwable instanceof ActivitiException) { - status = new Status(Status.SERVER_ERROR_INTERNAL.getCode(), throwable.getMessage(), null, null);; + status = new Status(Status.SERVER_ERROR_INTERNAL.getCode(), getSafeStatusName(throwable.getMessage()), null, null);; } else { status = null; } return status; } + + protected String getSafeStatusName(String name) { + if(name != null) { + return name.replaceAll(NEWLINE_REPLACE_REGEX, " "); + } + return null; + } } diff --git a/modules/activiti-rest/src/test/java/org/activiti/rest/ActivitiStatusServiceTest.java b/modules/activiti-rest/src/test/java/org/activiti/rest/ActivitiStatusServiceTest.java new file mode 100644 index 0000000000..86b3fa05cb --- /dev/null +++ b/modules/activiti-rest/src/test/java/org/activiti/rest/ActivitiStatusServiceTest.java @@ -0,0 +1,69 @@ +/* Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.activiti.rest; + +import junit.framework.TestCase; + +import org.activiti.engine.ActivitiException; +import org.activiti.engine.ActivitiIllegalArgumentException; +import org.activiti.engine.ActivitiObjectNotFoundException; +import org.activiti.engine.ActivitiOptimisticLockingException; +import org.activiti.engine.ActivitiTaskAlreadyClaimedException; +import org.activiti.rest.application.ActivitiStatusService; +import org.restlet.data.Status; +import org.restlet.service.StatusService; + + +/** + * @author Frederik Heremans + */ +public class ActivitiStatusServiceTest extends TestCase { + + private StatusService statusService; + + @Override + protected void setUp() throws Exception { + statusService = new ActivitiStatusService(); + } + + public void testNewlineInMessage() throws Exception { + Status status = statusService.getStatus(new ActivitiException("This is a\n newline"), null); + + assertNotNull(status); + assertEquals("This is a newline", status.getName()); + } + + public void test404WhenNotFound() throws Exception { + Status status = statusService.getStatus(new ActivitiObjectNotFoundException(String.class), null); + + assertNotNull(status); + assertEquals(Status.CLIENT_ERROR_NOT_FOUND, status); + } + + public void test400WhenIllegalArgument() throws Exception { + Status status = statusService.getStatus(new ActivitiIllegalArgumentException("testing"), null); + assertNotNull(status); + assertEquals(Status.CLIENT_ERROR_BAD_REQUEST, status); + } + + public void test409WhenConflict() throws Exception { + Status status = statusService.getStatus(new ActivitiTaskAlreadyClaimedException("id", "assignee"), null); + assertNotNull(status); + assertEquals(Status.CLIENT_ERROR_CONFLICT, status); + + status = statusService.getStatus(new ActivitiOptimisticLockingException("testing"), null); + assertNotNull(status); + assertEquals(Status.CLIENT_ERROR_CONFLICT, status); + } +} -- GitLab