diff --git a/remote-api/src/main/java/org/alfresco/rest/framework/core/exceptions/DefaultExceptionResolver.java b/remote-api/src/main/java/org/alfresco/rest/framework/core/exceptions/DefaultExceptionResolver.java index 9a7680dbaa..d5ac11cb9f 100644 --- a/remote-api/src/main/java/org/alfresco/rest/framework/core/exceptions/DefaultExceptionResolver.java +++ b/remote-api/src/main/java/org/alfresco/rest/framework/core/exceptions/DefaultExceptionResolver.java @@ -41,7 +41,11 @@ public class DefaultExceptionResolver implements ExceptionResolver @Override public ErrorResponse resolveException(Exception ex) { - return new ErrorResponse(DEFAULT_MESSAGE_ID, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex.getLocalizedMessage(), ex.getStackTrace(), null); + return new ErrorResponse(DEFAULT_MESSAGE_ID, + HttpServletResponse.SC_INTERNAL_SERVER_ERROR, + ex.getLocalizedMessage(), + ex.getStackTrace(), + null); } } diff --git a/remote-api/src/main/java/org/alfresco/rest/framework/core/exceptions/QueryParserExceptionResolver.java b/remote-api/src/main/java/org/alfresco/rest/framework/core/exceptions/QueryParserExceptionResolver.java new file mode 100644 index 0000000000..2e6a89bb7b --- /dev/null +++ b/remote-api/src/main/java/org/alfresco/rest/framework/core/exceptions/QueryParserExceptionResolver.java @@ -0,0 +1,48 @@ +/* + * #%L + * Alfresco Remote API + * %% + * Copyright (C) 2005 - 2021 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.rest.framework.core.exceptions; + +import org.alfresco.repo.search.QueryParserException; + +/** + * QueryParserException is related with search requests to Search Services. + */ +public class QueryParserExceptionResolver implements ExceptionResolver +{ + + @Override + public ErrorResponse resolveException(QueryParserException ex) + { + return new ErrorResponse( + DefaultExceptionResolver.DEFAULT_MESSAGE_ID, + // Mapping the original HTTP Status code returned by Search Services + ex.getHttpStatusCode(), + ex.getLocalizedMessage(), + ex.getStackTrace(), + null); + } + +} diff --git a/remote-api/src/main/java/org/alfresco/rest/framework/tools/ApiAssistant.java b/remote-api/src/main/java/org/alfresco/rest/framework/tools/ApiAssistant.java index 4d2b137113..30adda5961 100644 --- a/remote-api/src/main/java/org/alfresco/rest/framework/tools/ApiAssistant.java +++ b/remote-api/src/main/java/org/alfresco/rest/framework/tools/ApiAssistant.java @@ -26,10 +26,12 @@ package org.alfresco.rest.framework.tools; import org.alfresco.metrics.rest.RestMetricsReporter; +import org.alfresco.repo.search.QueryParserException; import org.alfresco.rest.framework.Api; import org.alfresco.rest.framework.core.exceptions.DefaultExceptionResolver; import org.alfresco.rest.framework.core.exceptions.ErrorResponse; import org.alfresco.rest.framework.core.exceptions.ExceptionResolver; +import org.alfresco.rest.framework.core.exceptions.QueryParserExceptionResolver; import org.alfresco.rest.framework.jacksonextensions.JacksonHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -48,6 +50,7 @@ public class ApiAssistant { private ExceptionResolver defaultResolver = new DefaultExceptionResolver(); private ExceptionResolver webScriptExceptionResolver; + private ExceptionResolver queryParserExceptionResolver; private ExceptionResolver resolver; private JacksonHelper jsonHelper; private RestMetricsReporter restMetricsReporter; @@ -77,6 +80,10 @@ public class ApiAssistant { { error = webScriptExceptionResolver.resolveException((WebScriptException) ex); } + else if (ex instanceof QueryParserException) + { + error = queryParserExceptionResolver.resolveException((QueryParserException) ex); + } else { error = resolver.resolveException(ex); @@ -100,6 +107,11 @@ public class ApiAssistant { this.webScriptExceptionResolver = webScriptExceptionResolver; } + public void setQueryParserExceptionResolver(ExceptionResolver queryParserExceptionResolver) + { + this.queryParserExceptionResolver = queryParserExceptionResolver; + } + public void setResolver(ExceptionResolver resolver) { this.resolver = resolver; } diff --git a/remote-api/src/main/resources/alfresco/public-rest-context.xml b/remote-api/src/main/resources/alfresco/public-rest-context.xml index 7d4e4fcfa8..8c965e2a36 100644 --- a/remote-api/src/main/resources/alfresco/public-rest-context.xml +++ b/remote-api/src/main/resources/alfresco/public-rest-context.xml @@ -134,6 +134,8 @@ + + @@ -182,6 +184,7 @@ +