From f1a5425f627de1a6f601193c87af3737e08f528a Mon Sep 17 00:00:00 2001 From: Angel Borroy <48685308+aborroy@users.noreply.github.com> Date: Fri, 11 Jun 2021 17:03:55 +0200 Subject: [PATCH] =?UTF-8?q?SEARCH-2909=20Return=20Http=20Status=20Code=205?= =?UTF-8?q?01=20(Not=20Implemented)=20in=20REST=20API=E2=80=A6=20(#519)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * SEARCH-2909 Return Http Status Code 501 (Not Implemented) in REST API for invocations to Search Services that are not supported. * SEARCH-2909 Refactor exception mapping to simplify QueryParserException. * SEARCH-2909 Add unit tests for postQuery. This includes a test for the status code replacement with unsupported operations. * SEARCH-2909 Add new unit test file to test suite. Also add copyright header to test class. Co-authored-by: Tom Page --- .../exceptions/DefaultExceptionResolver.java | 6 +- .../QueryParserExceptionResolver.java | 48 ++++++ .../rest/framework/tools/ApiAssistant.java | 12 ++ .../alfresco/public-rest-context.xml | 3 + .../tests/core/ExceptionResolverTests.java | 148 +++++++++-------- .../src/test/resources/test-rest-context.xml | 2 + .../repo/search/QueryParserException.java | 30 +++- .../solr/AbstractSolrQueryHTTPClient.java | 49 +++++- .../java/org/alfresco/AllUnitTestsSuite.java | 5 +- .../solr/AbstractSolrQueryHTTPClientTest.java | 155 ++++++++++++++++++ 10 files changed, 371 insertions(+), 87 deletions(-) create mode 100644 remote-api/src/main/java/org/alfresco/rest/framework/core/exceptions/QueryParserExceptionResolver.java create mode 100644 repository/src/test/java/org/alfresco/repo/search/impl/solr/AbstractSolrQueryHTTPClientTest.java 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 @@ +