From 580131a659fe6b571e6cf8bc3b3a685338ae0463 Mon Sep 17 00:00:00 2001 From: Ivan Bodrov Date: Tue, 7 Nov 2023 13:27:08 -0500 Subject: [PATCH] project: drop siesta-server dependency Migrate to the internal Resteasy integration. --- .../concord/common/ObjectMapperProvider.java | 2 +- .../concord/it/server/JsonStoreIT.java | 2 +- server/impl/pom.xml | 24 +-- .../server/ApiEntityValidationException.java | 2 +- .../concord/server/ApiServerModule.java | 23 +-- .../concord/server/ConcordServerModule.java | 4 + .../server/ObjectMapperInitializer.java | 4 +- .../concord/server/ServerResource.java | 13 +- .../com/walmartlabs/concord/server/Utils.java | 2 +- .../concord/server/agent/AgentResource.java | 2 +- .../server/audit/AuditLogResource.java | 2 +- .../concord/server/boot/RestModule.java | 35 ----- .../boot/resteasy/ExceptionMapperSupport.java | 87 +++++++++++ .../resteasy/ObjectMapperContextResolver.java | 45 ++++++ .../boot/resteasy/ResteasyListener.java | 58 ++++++++ .../server/boot/resteasy/ResteasyModule.java | 48 ++++++ .../ResteasyServletHolder.java} | 20 +-- .../resteasy/UnexpectedExceptionMapper.java | 55 +++++++ .../boot/resteasy/WebappExceptionMapper.java | 48 ++++++ .../ConstraintViolationExceptionMapper.java | 99 +++++++++++++ .../boot/validation/ValidationErrorXO.java | 140 ++++++++++++++++++ .../validation/ValidationErrorsException.java | 97 ++++++++++++ .../ValidationErrorsExceptionMapper.java | 47 ++++++ .../ValidationExceptionMapperSupport.java | 31 ++-- .../boot/validation/ValidationModule.java | 20 ++- .../server/org/OrganizationManager.java | 2 +- .../server/org/OrganizationModule.java | 4 +- .../server/org/OrganizationResource.java | 2 +- .../server/org/ProjectProcessResource.java | 4 +- .../org/inventory/InventoryDataResource.java | 2 +- .../org/jsonstore/JsonStoreDataManager.java | 2 +- .../org/jsonstore/JsonStoreManager.java | 2 +- .../org/jsonstore/JsonStoreQueryExecDao.java | 2 +- .../org/jsonstore/JsonStoreQueryManager.java | 2 +- .../org/jsonstore/JsonStoreQueryResource.java | 2 +- .../org/policy/PolicyCheckResource.java | 2 +- .../concord/server/org/project/KvManager.java | 2 +- .../org/project/ProjectAccessManager.java | 2 +- .../server/org/project/ProjectManager.java | 2 +- .../org/project/ProjectRepositoryManager.java | 2 +- .../server/org/project/ProjectResource.java | 2 +- .../server/org/project/ProjectValidator.java | 2 +- .../RepositoryValidationExceptionMapper.java | 4 +- .../org/secret/SecretExceptionMapper.java | 6 +- .../server/org/secret/SecretManager.java | 2 +- .../server/org/secret/SecretResource.java | 7 +- .../org/secret/SecretResourceUtils.java | 5 +- .../server/org/secret/SecretResourceV2.java | 2 +- .../concord/server/org/team/TeamManager.java | 2 +- .../concord/server/org/team/TeamResource.java | 2 +- .../org/triggers/CronTriggerProcessor.java | 2 +- .../server/org/triggers/TriggerResource.java | 2 +- .../org/triggers/TriggerV2Resource.java | 2 +- .../concord/server/policy/PolicyManager.java | 2 +- .../server/process/PayloadBuilder.java | 2 +- .../server/process/PayloadManager.java | 2 +- .../process/ProcessExceptionMapper.java | 10 +- .../server/process/ProcessLogResourceV2.java | 2 +- .../server/process/ProcessResource.java | 2 +- .../server/process/ProcessResourceV2.java | 2 +- .../checkpoint/ProcessCheckpointResource.java | 2 +- .../process/state/ProcessCheckpointDao.java | 2 +- .../repository/RepositoryRefresher.java | 2 +- .../listeners/TriggerRefreshListener.java | 2 +- .../concord/server/role/RoleResource.java | 2 +- .../server/security/SecurityModule.java | 4 + .../UnauthenticatedExceptionMapper.java | 10 +- .../security/UnauthorizedExceptionMapper.java | 11 +- .../security/apikey/ApiKeyResource.java | 2 +- .../concord/server/user/UserResource.java | 2 +- .../concord/server/user/UserResourceV2.java | 2 +- .../concord/server/TestObjectMapper.java | 6 +- server/plugins/noderoster/impl/pom.xml | 18 --- targetplatform/pom.xml | 35 ----- 74 files changed, 873 insertions(+), 233 deletions(-) delete mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/RestModule.java create mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ExceptionMapperSupport.java create mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ObjectMapperContextResolver.java create mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyListener.java create mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyModule.java rename server/impl/src/main/java/com/walmartlabs/concord/server/boot/{servlets/SiestaServletHolder.java => resteasy/ResteasyServletHolder.java} (60%) create mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/UnexpectedExceptionMapper.java create mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/WebappExceptionMapper.java create mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ConstraintViolationExceptionMapper.java create mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorXO.java create mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorsException.java create mode 100644 server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorsExceptionMapper.java diff --git a/common/src/main/java/com/walmartlabs/concord/common/ObjectMapperProvider.java b/common/src/main/java/com/walmartlabs/concord/common/ObjectMapperProvider.java index 7be85aca83..8475fa90c0 100644 --- a/common/src/main/java/com/walmartlabs/concord/common/ObjectMapperProvider.java +++ b/common/src/main/java/com/walmartlabs/concord/common/ObjectMapperProvider.java @@ -38,7 +38,7 @@ public class ObjectMapperProvider implements Provider { @Override public ObjectMapper get() { - log.info("Using concord-common's ObjectMapper..."); + log.debug("Using concord-common's ObjectMapper..."); ObjectMapper mapper = new ObjectMapper() .registerModule(new Jdk8Module()) diff --git a/it/server/src/test/java/com/walmartlabs/concord/it/server/JsonStoreIT.java b/it/server/src/test/java/com/walmartlabs/concord/it/server/JsonStoreIT.java index 8f5bfb7909..12e6d9a517 100644 --- a/it/server/src/test/java/com/walmartlabs/concord/it/server/JsonStoreIT.java +++ b/it/server/src/test/java/com/walmartlabs/concord/it/server/JsonStoreIT.java @@ -43,7 +43,7 @@ public void testValidationJsonStoreRequest() throws Exception { fail("exception expected"); } catch (ApiException e) { assertEquals(400, e.getCode()); - assertEquals("[{\"id\":\"PARAMETER createOrUpdate.arg1.name\",\"message\":\"must match \\\"^[0-9a-zA-Z][0-9a-zA-Z_@.\\\\-~]{2,128}$\\\"\"}]", e.getResponseBody()); + assertEquals("[{\"id\":\"ImmutableJsonStoreRequest.createOrUpdate.arg1.name\",\"message\":\"must match \\\"^[0-9a-zA-Z][0-9a-zA-Z_@.\\\\-~]{2,128}$\\\"\"}]", e.getResponseBody()); } } diff --git a/server/impl/pom.xml b/server/impl/pom.xml index 28f44423fd..08fdacda69 100644 --- a/server/impl/pom.xml +++ b/server/impl/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 @@ -101,22 +102,8 @@ siesta-api - io.takari.siesta - siesta-server - - - javax.validation - validation-api - - - org.hibernate - hibernate-validator - - - - - io.takari.siesta - siesta-jackson2 + org.jboss.resteasy + resteasy-guice org.jboss.resteasy @@ -395,7 +382,8 @@ com.walmartlabs.concord.server - ${project.build.directory}/classes/openapi-server-config.yaml + ${project.build.directory}/classes/openapi-server-config.yaml + diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/ApiEntityValidationException.java b/server/impl/src/main/java/com/walmartlabs/concord/server/ApiEntityValidationException.java index 2f4d57fe5e..997efccf75 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/ApiEntityValidationException.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/ApiEntityValidationException.java @@ -20,7 +20,7 @@ * ===== */ -import org.sonatype.siesta.ValidationErrorsException; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; public class ApiEntityValidationException extends ValidationErrorsException { diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/ApiServerModule.java b/server/impl/src/main/java/com/walmartlabs/concord/server/ApiServerModule.java index 27566614eb..9574e8b572 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/ApiServerModule.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/ApiServerModule.java @@ -27,23 +27,21 @@ import com.walmartlabs.concord.common.ObjectMapperProvider; import com.walmartlabs.concord.server.boot.*; import com.walmartlabs.concord.server.boot.filters.*; +import com.walmartlabs.concord.server.boot.resteasy.ResteasyModule; import com.walmartlabs.concord.server.boot.servlets.FormServletHolder; -import com.walmartlabs.concord.server.boot.servlets.SiestaServletHolder; import com.walmartlabs.concord.server.boot.statics.StaticResourcesConfigurator; +import com.walmartlabs.concord.server.boot.validation.ValidationModule; import com.walmartlabs.concord.server.websocket.ConcordWebSocketServlet; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.web.mgt.WebSecurityManager; import org.eclipse.jetty.servlet.FilterHolder; -import org.sonatype.siesta.Component; -import org.sonatype.siesta.jackson2.ObjectMapperResolver; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpServlet; import static com.google.inject.Scopes.SINGLETON; import static com.google.inject.multibindings.Multibinder.newSetBinder; -import static com.walmartlabs.concord.server.Utils.bindServletFilter; -import static com.walmartlabs.concord.server.Utils.bindServletHolder; +import static com.walmartlabs.concord.server.Utils.*; public class ApiServerModule implements Module { @@ -53,7 +51,6 @@ public void configure(Binder binder) { binder.bind(ObjectMapper.class).toProvider(ObjectMapperProvider.class).in(SINGLETON); binder.bind(ObjectMapper.class).annotatedWith(Names.named("siesta")).toProvider(ObjectMapperProvider.class).in(SINGLETON); - newSetBinder(binder, Component.class).addBinding().to(ObjectMapperResolver.class); // Jetty @@ -79,7 +76,6 @@ public void configure(Binder binder) { // ServletHolder bindServletHolder(binder, FormServletHolder.class); - bindServletHolder(binder, SiestaServletHolder.class); // RequestErrorHandler @@ -89,7 +85,7 @@ public void configure(Binder binder) { newSetBinder(binder, ContextHandlerConfigurator.class).addBinding().to(StaticResourcesConfigurator.class); - // shiro + // Shiro newSetBinder(binder, ServletContextListener.class).addBinding().to(ShiroListener.class).in(SINGLETON); newSetBinder(binder, FilterChainConfigurator.class).addBinding().to(ConcordFilterChainConfigurator.class).in(SINGLETON); @@ -99,7 +95,14 @@ public void configure(Binder binder) { binder.bind(SecurityManager.class).to(ConcordSecurityManager.class); binder.bind(WebSecurityManager.class).to(ConcordSecurityManager.class); - // TODO get rid of RestModule, add all internal modules directly here - binder.install(new RestModule()); + binder.install(new ValidationModule()); + + // Resteasy + + binder.install(new ResteasyModule()); + + // JAX-RS resources + + bindJaxRsResource(binder, ServerResource.class); } } diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/ConcordServerModule.java b/server/impl/src/main/java/com/walmartlabs/concord/server/ConcordServerModule.java index 844561d0c5..5b5b0ae150 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/ConcordServerModule.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/ConcordServerModule.java @@ -20,9 +20,11 @@ * ===== */ +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.Binder; import com.google.inject.Module; import com.typesafe.config.Config; +import com.walmartlabs.concord.common.ObjectMapperProvider; import com.walmartlabs.concord.db.DatabaseModule; import com.walmartlabs.concord.dependencymanager.DependencyManagerConfiguration; import com.walmartlabs.concord.server.agent.AgentModule; @@ -69,6 +71,8 @@ public ConcordServerModule(Config config) { @Override public void configure(Binder binder) { + binder.bind(ObjectMapper.class).toProvider(ObjectMapperProvider.class); + binder.install(new ConfigurationModule(config)); binder.install(new MetricModule()); diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/ObjectMapperInitializer.java b/server/impl/src/main/java/com/walmartlabs/concord/server/ObjectMapperInitializer.java index f10ae1341f..ff51d30117 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/ObjectMapperInitializer.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/ObjectMapperInitializer.java @@ -9,9 +9,9 @@ * 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. diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/ServerResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/ServerResource.java index eef09f58c4..19599a7076 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/ServerResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/ServerResource.java @@ -30,14 +30,13 @@ import javax.inject.Inject; import javax.inject.Named; -import javax.inject.Singleton; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import java.time.OffsetDateTime; -@Singleton @Path("/api/v1/server") public class ServerResource implements Resource { @@ -83,6 +82,13 @@ public void maintenanceMode() { taskScheduler.stop(); } + @GET + @Path("/test") + @Produces(MediaType.APPLICATION_JSON) + public TestBean test() { + return new TestBean(OffsetDateTime.now()); + } + @Named public static class PingDao extends AbstractDao { @@ -95,4 +101,7 @@ public void ping() { dsl().selectOne().execute(); } } + + public record TestBean(OffsetDateTime now) { + } } diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/Utils.java b/server/impl/src/main/java/com/walmartlabs/concord/server/Utils.java index af056a7a52..59a1dd7609 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/Utils.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/Utils.java @@ -21,11 +21,11 @@ */ import com.google.inject.Binder; +import com.walmartlabs.concord.server.boot.resteasy.ExceptionMapperSupport; import com.walmartlabs.concord.server.sdk.BackgroundTask; import com.walmartlabs.concord.server.sdk.ScheduledTask; import org.eclipse.jetty.servlet.ServletHolder; import org.sonatype.siesta.Component; -import org.sonatype.siesta.ExceptionMapperSupport; import org.sonatype.siesta.Resource; import javax.servlet.Filter; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/agent/AgentResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/agent/AgentResource.java index c8808e0b3b..c79349aa74 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/agent/AgentResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/agent/AgentResource.java @@ -21,11 +21,11 @@ */ import com.walmartlabs.concord.server.AgentWorkerUtils; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.sdk.metrics.WithTimer; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.sonatype.siesta.Resource; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.ws.rs.GET; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/audit/AuditLogResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/audit/AuditLogResource.java index 9a9322fb20..8bd9cfa0c1 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/audit/AuditLogResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/audit/AuditLogResource.java @@ -21,6 +21,7 @@ */ import com.walmartlabs.concord.server.OffsetDateTimeParam; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.cfg.AuditConfiguration; import com.walmartlabs.concord.server.org.OrganizationEntry; import com.walmartlabs.concord.server.org.OrganizationManager; @@ -40,7 +41,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.apache.shiro.authz.UnauthorizedException; import org.sonatype.siesta.Resource; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.ws.rs.*; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/RestModule.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/RestModule.java deleted file mode 100644 index cfd65a547f..0000000000 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/RestModule.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.walmartlabs.concord.server.boot; - -/*- - * ***** - * Concord - * ----- - * Copyright (C) 2017 - 2020 Walmart Inc. - * ----- - * 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. - * ===== - */ - -import com.google.inject.Binder; -import com.google.inject.Module; -import com.walmartlabs.concord.server.boot.validation.ValidationModule; -import org.sonatype.siesta.server.resteasy.ResteasyModule; - -public class RestModule implements Module { - - @Override - public void configure(Binder binder) { - binder.install(new ResteasyModule()); - binder.install(new ValidationModule()); - } -} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ExceptionMapperSupport.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ExceptionMapperSupport.java new file mode 100644 index 0000000000..5c33b2958e --- /dev/null +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ExceptionMapperSupport.java @@ -0,0 +1,87 @@ +package com.walmartlabs.concord.server.boot.resteasy; + +/* + * Copyright (c) 2007-2014 Sonatype, Inc. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + * + * ***** + * Concord + * ----- + * Copyright (C) 2017 - 2024 Walmart Inc. + * ----- + * 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. + * ===== + */ + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.sonatype.siesta.Component; + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; + +/** + * Based on the original {@link org.sonatype.siesta.ExceptionMapperSupport}. + */ +public abstract class ExceptionMapperSupport implements ExceptionMapper, Component { + + protected final Logger log = LoggerFactory.getLogger(getClass()); + + public Response toResponse(E exception) { + if (exception == null) { + throw new NullPointerException(); + } + + // debug/trace log exception details + if (log.isTraceEnabled()) { + log.trace("Mapping exception: " + exception, exception); + } else { + log.debug("Mapping exception: " + exception); + } + + // Prepare the response + Response response; + try { + response = convert(exception); + } catch (Exception e) { + log.warn("Failed to map exception", e); + response = Response.serverError().entity(e.getMessage()).build(); + } + + // Log terse (unless debug enabled) warning with fault details + Object entity = response.getEntity(); + log.warn("Response: [{}] {}; mapped from: {}", + response.getStatus(), + entity == null ? "(no entity/body)" : String.format("'%s'", entity), + exception, + log.isDebugEnabled() ? exception : null + ); + + return response; + } + + /** + * Convert the given exception into a response. + * + * @param exception The exception to convert. + */ + protected abstract Response convert(E exception); +} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ObjectMapperContextResolver.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ObjectMapperContextResolver.java new file mode 100644 index 0000000000..8c8be926be --- /dev/null +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ObjectMapperContextResolver.java @@ -0,0 +1,45 @@ +package com.walmartlabs.concord.server.boot.resteasy; + +/*- + * ***** + * Concord + * ----- + * Copyright (C) 2017 - 2023 Walmart Inc. + * ----- + * 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. + * ===== + */ + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.walmartlabs.concord.common.ObjectMapperProvider; +import org.sonatype.siesta.Component; + +import javax.inject.Inject; +import javax.ws.rs.ext.ContextResolver; +import javax.ws.rs.ext.Provider; + +@Provider +public class ObjectMapperContextResolver implements ContextResolver, Component { + + private final ObjectMapperProvider delegate; + + @Inject + public ObjectMapperContextResolver(ObjectMapperProvider delegate) { + this.delegate = delegate; + } + + @Override + public ObjectMapper getContext(Class type) { + return delegate.get(); + } +} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyListener.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyListener.java new file mode 100644 index 0000000000..3e960a2c90 --- /dev/null +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyListener.java @@ -0,0 +1,58 @@ +package com.walmartlabs.concord.server.boot.resteasy; + +/*- + * ***** + * Concord + * ----- + * Copyright (C) 2017 - 2023 Walmart Inc. + * ----- + * 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. + * ===== + */ + +import com.google.inject.Inject; +import com.google.inject.Injector; +import org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; +import javax.servlet.annotation.WebListener; +import java.lang.reflect.Field; + +@WebListener +public class ResteasyListener implements ServletContextListener { + + private final GuiceResteasyBootstrapServletContextListener delegate; + + @Inject + public ResteasyListener(Injector injector) { + this.delegate = new GuiceResteasyBootstrapServletContextListener(); + try { + Field field = GuiceResteasyBootstrapServletContextListener.class.getDeclaredField("parentInjector"); + field.setAccessible(true); + field.set(delegate, injector); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + @Override + public void contextInitialized(ServletContextEvent sce) { + delegate.contextInitialized(sce); + } + + @Override + public void contextDestroyed(ServletContextEvent sce) { + delegate.contextDestroyed(sce); + } +} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyModule.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyModule.java new file mode 100644 index 0000000000..bce03cd3dd --- /dev/null +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyModule.java @@ -0,0 +1,48 @@ +package com.walmartlabs.concord.server.boot.resteasy; + +/*- + * ***** + * Concord + * ----- + * Copyright (C) 2017 - 2024 Walmart Inc. + * ----- + * 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. + * ===== + */ + +import com.google.inject.Binder; +import com.google.inject.Module; +import org.sonatype.siesta.Component; + +import javax.servlet.ServletContextListener; + +import static com.google.inject.Scopes.SINGLETON; +import static com.google.inject.multibindings.Multibinder.newSetBinder; +import static com.walmartlabs.concord.server.Utils.bindExceptionMapper; +import static com.walmartlabs.concord.server.Utils.bindServletHolder; + +public class ResteasyModule implements Module { + + @Override + public void configure(Binder binder) { + bindServletHolder(binder, ResteasyServletHolder.class); + + newSetBinder(binder, ServletContextListener.class).addBinding().to(ResteasyListener.class); + + binder.bind(ObjectMapperContextResolver.class).in(SINGLETON); + newSetBinder(binder, Component.class).addBinding().to(ObjectMapperContextResolver.class); + + bindExceptionMapper(binder, UnexpectedExceptionMapper.class); + bindExceptionMapper(binder, WebappExceptionMapper.class); + } +} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/servlets/SiestaServletHolder.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyServletHolder.java similarity index 60% rename from server/impl/src/main/java/com/walmartlabs/concord/server/boot/servlets/SiestaServletHolder.java rename to server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyServletHolder.java index 1030cc8721..b9f81307f2 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/servlets/SiestaServletHolder.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/ResteasyServletHolder.java @@ -1,10 +1,10 @@ -package com.walmartlabs.concord.server.boot.servlets; +package com.walmartlabs.concord.server.boot.resteasy; /*- * ***** * Concord * ----- - * Copyright (C) 2017 - 2020 Walmart Inc. + * Copyright (C) 2017 - 2023 Walmart Inc. * ----- * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,25 +21,17 @@ */ import org.eclipse.jetty.servlet.ServletHolder; -import org.sonatype.siesta.server.SiestaServlet; +import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher; -import javax.inject.Inject; import javax.servlet.annotation.WebServlet; -/** - * Binds {@link SiestaServlet} to Concord's API paths. - */ @WebServlet({ "/api/*", "/events/github/*" }) -public class SiestaServletHolder extends ServletHolder { - - @Inject - public SiestaServletHolder(SiestaServlet siestaServlet) { - super(siestaServlet); +public class ResteasyServletHolder extends ServletHolder { - // necessary to support multiple API roots - setInitParameter("resteasy.servlet.mapping.prefix", "/"); + public ResteasyServletHolder() { + super(HttpServletDispatcher.class); } } diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/UnexpectedExceptionMapper.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/UnexpectedExceptionMapper.java new file mode 100644 index 0000000000..ee12c9030e --- /dev/null +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/UnexpectedExceptionMapper.java @@ -0,0 +1,55 @@ +package com.walmartlabs.concord.server.boot.resteasy; + +/* + * Copyright (c) 2007-2014 Sonatype, Inc. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + * + * ***** + * Concord + * ----- + * Copyright (C) 2017 - 2024 Walmart Inc. + * ----- + * 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. + * ===== + */ + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.Provider; + +import static javax.ws.rs.core.MediaType.TEXT_PLAIN; + +/** + * Based on the original {@link org.sonatype.siesta.UnexpectedExceptionMapper}. + */ +@Provider +public class UnexpectedExceptionMapper extends ExceptionMapperSupport { + + @Override + protected Response convert(Throwable exception) { + // always log unexpected exception with stack + log.warn("Unexpected exception: {}", exception.toString(), exception); + + return Response.serverError() + .entity(String.format("ERROR: %s", exception)) + .type(TEXT_PLAIN) + .build(); + } +} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/WebappExceptionMapper.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/WebappExceptionMapper.java new file mode 100644 index 0000000000..01fcab2903 --- /dev/null +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/resteasy/WebappExceptionMapper.java @@ -0,0 +1,48 @@ +package com.walmartlabs.concord.server.boot.resteasy; + +/* + * Copyright (c) 2007-2014 Sonatype, Inc. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + * + * ***** + * Concord + * ----- + * Copyright (C) 2017 - 2024 Walmart Inc. + * ----- + * 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. + * ===== + */ + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.Provider; + +/** + * Based on the original {@link org.sonatype.siesta.WebappExceptionMapper}. + */ +@Provider +public class WebappExceptionMapper extends ExceptionMapperSupport { + + @Override + protected Response convert(final WebApplicationException exception) { + return exception.getResponse(); + } +} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ConstraintViolationExceptionMapper.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ConstraintViolationExceptionMapper.java new file mode 100644 index 0000000000..83bdd3cd02 --- /dev/null +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ConstraintViolationExceptionMapper.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2007-2014 Sonatype, Inc. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + * + * ***** + * Concord + * ----- + * Copyright (C) 2017 - 2024 Walmart Inc. + * ----- + * 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 com.walmartlabs.concord.server.boot.validation; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.ElementKind; +import javax.validation.Path; +import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.Provider; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +/** + * Based on the original {@link org.sonatype.siesta.server.validation.ConstraintViolationExceptionMapper}. + */ +@Provider +public class ConstraintViolationExceptionMapper extends ValidationExceptionMapperSupport { + + @Override + protected List getValidationErrors(final ConstraintViolationException exception) { + return getValidationErrors(exception.getConstraintViolations()); + } + + @Override + protected Status getStatus(final ConstraintViolationException exception) { + return getResponseStatus(exception.getConstraintViolations()); + } + + private List getValidationErrors(Set> violations) { + return violations.stream() + .map(v -> new ValidationErrorXO(getPath(v), v.getMessage())) + .toList(); + } + + private Status getResponseStatus(Set> violations) { + final Iterator> iterator = violations.iterator(); + + if (iterator.hasNext()) { + return getResponseStatus(iterator.next()); + } else { + return Status.BAD_REQUEST; + } + } + + private Status getResponseStatus(ConstraintViolation violation) { + + for (Path.Node node : violation.getPropertyPath()) { + ElementKind kind = node.getKind(); + + if (ElementKind.RETURN_VALUE.equals(kind)) { + return Status.INTERNAL_SERVER_ERROR; + } + } + + return Status.BAD_REQUEST; + } + + private String getPath(ConstraintViolation violation) { + String leafBeanName = violation.getLeafBean().getClass().getSimpleName(); + int proxySuffix = leafBeanName.indexOf("$$EnhancerByGuice"); + if (proxySuffix > 0) { + leafBeanName = leafBeanName.substring(0, proxySuffix); + } + + String propertyPath = violation.getPropertyPath().toString(); + + return leafBeanName + (!"".equals(propertyPath) ? '.' + propertyPath : ""); + } +} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorXO.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorXO.java new file mode 100644 index 0000000000..acf4dc9dbd --- /dev/null +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorXO.java @@ -0,0 +1,140 @@ +package com.walmartlabs.concord.server.boot.validation; + +/* + * Copyright (c) 2007-2014 Sonatype, Inc. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + * + * ***** + * Concord + * ----- + * Copyright (C) 2017 - 2024 Walmart Inc. + * ----- + * 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. + * ===== + */ + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * Based on the original {@link org.sonatype.siesta.ValidationErrorsXO}. + */ +public class ValidationErrorXO { + /** + * Denotes that validation does not applies to a specific value. + */ + public static final String GENERIC = "*"; + + /** + * Identifies the value value that is failing validation. A value of "*" denotes that validation + * does not applies to a specific value. + *

+ * E.g. "name". + */ + @JsonProperty + private String id; + + /** + * Description of failing validation. + *

+ * E.g. "Name cannot be null". + */ + @JsonProperty + private String message; + + public ValidationErrorXO() { + this.id = GENERIC; + } + + /** + * Creates a validation error that does not applies to a specific value. + * + * @param message validation description + */ + public ValidationErrorXO(String message) { + this(GENERIC, message); + } + + /** + * Creates a validation error for a specific value. + * + * @param id identifier of value failing validation. + * @param message validation description + */ + public ValidationErrorXO(String id, final String message) { + this.id = id == null ? GENERIC : id; + this.message = message; + } + + /** + * @return identifier of value failing validation (never null). A value of "*" denotes that validation does + * not applies to a specific value. + */ + public String getId() { + return id; + } + + /** + * @param id of value failing validation + */ + public void setId(String id) { + this.id = id == null ? GENERIC : id; + } + + /** + * @param id of value failing validation + * @return itself, for fluent api usage + */ + public ValidationErrorXO withId(String id) { + setId(id); + return this; + } + + /** + * @return validation description + */ + public String getMessage() { + return message; + } + + /** + * @param message validation description + */ + public void setMessage(String message) { + this.message = message; + } + + /** + * @param message validation description + * @return itself, for fluent api usage + */ + public ValidationErrorXO withMessage(String message) { + this.message = message; + return this; + } + + @Override + public String toString() { + return getClass().getSimpleName() + "{" + + "id='" + id + '\'' + + ", message='" + message + '\'' + + '}'; + } +} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorsException.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorsException.java new file mode 100644 index 0000000000..15f9c3f81a --- /dev/null +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorsException.java @@ -0,0 +1,97 @@ +package com.walmartlabs.concord.server.boot.validation; + +/* + * Copyright (c) 2007-2014 Sonatype, Inc. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + * + * ***** + * Concord + * ----- + * Copyright (C) 2017 - 2024 Walmart Inc. + * ----- + * 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. + * ===== + */ + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static java.util.Objects.requireNonNull; + +/** + * Based on the original {@link org.sonatype.siesta.server.validation.ValidationErrorsException}. + */ +public class ValidationErrorsException extends RuntimeException { + private final List errors = new ArrayList(); + + public ValidationErrorsException() { + super(); + } + + public ValidationErrorsException(final String message) { + errors.add(new ValidationErrorXO(message)); + } + + public ValidationErrorsException(final String id, final String message) { + errors.add(new ValidationErrorXO(id, message)); + } + + public ValidationErrorsException withError(final String message) { + errors.add(new ValidationErrorXO(message)); + return this; + } + + public ValidationErrorsException withError(final String id, final String message) { + errors.add(new ValidationErrorXO(id, message)); + return this; + } + + public ValidationErrorsException withErrors(final ValidationErrorXO... validationErrors) { + errors.addAll(Arrays.asList(requireNonNull(validationErrors))); + return this; + } + + public ValidationErrorsException withErrors(final List validationErrors) { + errors.addAll(requireNonNull(validationErrors)); + return this; + } + + public List getValidationErrors() { + return errors; + } + + public boolean hasValidationErrors() { + return !errors.isEmpty(); + } + + @Override + public String getMessage() { + StringBuilder sb = new StringBuilder(); + for (ValidationErrorXO error : errors) { + if (!sb.isEmpty()) { + sb.append(", "); + } + sb.append(error.getMessage()); + } + return sb.isEmpty() ? "(No validation errors)" : sb.toString(); + } +} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorsExceptionMapper.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorsExceptionMapper.java new file mode 100644 index 0000000000..2d5fdedbfd --- /dev/null +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationErrorsExceptionMapper.java @@ -0,0 +1,47 @@ +package com.walmartlabs.concord.server.boot.validation; + +/* + * Copyright (c) 2007-2014 Sonatype, Inc. All rights reserved. + * + * This program is licensed to you under the Apache License Version 2.0, + * and you may not use this file except in compliance with the Apache License Version 2.0. + * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the Apache License Version 2.0 is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. + * + * ***** + * Concord + * ----- + * Copyright (C) 2017 - 2024 Walmart Inc. + * ----- + * 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. + * ===== + */ + +import javax.ws.rs.ext.Provider; +import java.util.List; + +/** + * Based on the original {@link org.sonatype.siesta.server.validation.ValidationErrorsExceptionMapper}. + */ +@Provider +public class ValidationErrorsExceptionMapper extends ValidationExceptionMapperSupport { + + @Override + protected List getValidationErrors(ValidationErrorsException exception) { + return exception.getValidationErrors(); + } +} diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationExceptionMapperSupport.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationExceptionMapperSupport.java index 9b110b67d9..a1a2b8ed0b 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationExceptionMapperSupport.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationExceptionMapperSupport.java @@ -31,13 +31,14 @@ * ===== */ -import org.sonatype.siesta.ExceptionMapperSupport; -import org.sonatype.siesta.ValidationErrorXO; +import com.walmartlabs.concord.server.boot.resteasy.ExceptionMapperSupport; import javax.ws.rs.core.*; +import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.Response.Status; import java.util.List; +import static java.util.Objects.requireNonNull; import static org.sonatype.siesta.MediaTypes.VND_VALIDATION_ERRORS_V1_JSON_TYPE; import static org.sonatype.siesta.MediaTypes.VND_VALIDATION_ERRORS_V1_XML_TYPE; @@ -56,16 +57,16 @@ public ValidationExceptionMapperSupport() { } @Override - protected Response convert(final E exception, final String id) { - final Response.ResponseBuilder builder = Response.status(getStatus(exception)); + protected Response convert(E exception) { + ResponseBuilder builder = Response.status(getStatus(exception)); - final List errors = getValidationErrors(exception); + List errors = getValidationErrors(exception); if (errors != null && !errors.isEmpty()) { - final Variant variant = getRequest().selectVariant(variants); + Variant variant = getRequest().selectVariant(variants); if (variant != null) { builder.type(variant.getMediaType()) .entity( - new GenericEntity>(errors) { + new GenericEntity<>(errors) { @Override public String toString() { return getEntity().toString(); @@ -78,26 +79,20 @@ public String toString() { return builder.build(); } - protected Status getStatus(final E exception) { + protected Status getStatus(E exception) { return Status.BAD_REQUEST; } - protected abstract List getValidationErrors(final E exception); + protected abstract List getValidationErrors(E exception); private Request request; @Context - public void setRequest(final Request request) { - if (request == null) { - throw new NullPointerException(); - } - this.request = request; + public void setRequest(Request request) { + this.request = requireNonNull(request); } protected Request getRequest() { - if (request == null) { - throw new IllegalStateException(); - } - return request; + return requireNonNull(request); } } diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationModule.java b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationModule.java index d0d585f838..64b7b8d9bf 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationModule.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/boot/validation/ValidationModule.java @@ -9,9 +9,9 @@ * 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. @@ -20,7 +20,8 @@ * ===== */ -import com.google.inject.AbstractModule; +import com.google.inject.Binder; +import com.google.inject.Module; import com.google.inject.Provides; import com.google.inject.matcher.Matchers; import org.aopalliance.intercept.MethodInterceptor; @@ -38,13 +39,18 @@ import java.util.Optional; import java.util.Set; -public class ValidationModule extends AbstractModule { +import static com.walmartlabs.concord.server.Utils.bindExceptionMapper; + +public class ValidationModule implements Module { @Override - protected void configure() { + public void configure(Binder binder) { final MethodInterceptor interceptor = new ValidationInterceptor(); - bindInterceptor(Matchers.any(), Matchers.annotatedWith(Validate.class), interceptor); - requestInjection(interceptor); + binder.bindInterceptor(Matchers.any(), Matchers.annotatedWith(Validate.class), interceptor); + binder.requestInjection(interceptor); + + bindExceptionMapper(binder, ConstraintViolationExceptionMapper.class); + bindExceptionMapper(binder, ValidationErrorsExceptionMapper.class); } @Provides diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationManager.java index 238da1a505..4129871d9a 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationManager.java @@ -25,6 +25,7 @@ import com.walmartlabs.concord.server.audit.AuditAction; import com.walmartlabs.concord.server.audit.AuditLog; import com.walmartlabs.concord.server.audit.AuditObject; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.project.DiffUtils; import com.walmartlabs.concord.server.org.team.TeamDao; import com.walmartlabs.concord.server.org.team.TeamManager; @@ -44,7 +45,6 @@ import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.authz.UnauthorizedException; import org.jooq.DSLContext; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import java.util.Map; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationModule.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationModule.java index 0161802b67..f1aab01e7b 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationModule.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationModule.java @@ -9,9 +9,9 @@ * 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. diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationResource.java index e8421a7e69..427d088b72 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/OrganizationResource.java @@ -39,7 +39,7 @@ import java.util.UUID; @Path("/api/v1/org") -@Tag(name ="Organizations") +@Tag(name = "Organizations") public class OrganizationResource implements Resource { private final OrganizationDao orgDao; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/ProjectProcessResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/ProjectProcessResource.java index 2714dfb3da..e71ec9aa9c 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/ProjectProcessResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/ProjectProcessResource.java @@ -23,6 +23,7 @@ import com.walmartlabs.concord.common.validation.ConcordKey; import com.walmartlabs.concord.sdk.Constants; import com.walmartlabs.concord.server.OffsetDateTimeParam; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.console.ResponseTemplates; import com.walmartlabs.concord.server.org.project.ProjectDao; import com.walmartlabs.concord.server.org.project.RepositoryDao; @@ -45,7 +46,6 @@ import org.slf4j.LoggerFactory; import org.sonatype.siesta.Resource; import org.sonatype.siesta.Validate; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; @@ -345,7 +345,7 @@ private UUID getRepoId(UUID projectId, String repoName) { private Response processFinished(PartialProcessKey processKey) { return responseTemplates.processFinished(Response.ok(), - Collections.singletonMap("instanceId", processKey.getInstanceId())) + Collections.singletonMap("instanceId", processKey.getInstanceId())) .build(); } diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/inventory/InventoryDataResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/inventory/InventoryDataResource.java index bfaf29622d..00342d03d2 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/inventory/InventoryDataResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/inventory/InventoryDataResource.java @@ -20,6 +20,7 @@ * ===== */ +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.OrganizationEntry; import com.walmartlabs.concord.server.org.OrganizationManager; import com.walmartlabs.concord.server.org.ResourceAccessLevel; @@ -29,7 +30,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.sonatype.siesta.Resource; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.ws.rs.*; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreDataManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreDataManager.java index 840aa4d074..5ff44ac29b 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreDataManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreDataManager.java @@ -28,6 +28,7 @@ import com.walmartlabs.concord.server.audit.AuditAction; import com.walmartlabs.concord.server.audit.AuditLog; import com.walmartlabs.concord.server.audit.AuditObject; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.OrganizationEntry; import com.walmartlabs.concord.server.org.OrganizationManager; import com.walmartlabs.concord.server.org.ResourceAccessLevel; @@ -37,7 +38,6 @@ import com.walmartlabs.concord.server.policy.PolicyUtils; import com.walmartlabs.concord.server.sdk.ConcordApplicationException; import com.walmartlabs.concord.server.security.UserPrincipal; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import java.text.MessageFormat; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreManager.java index 631ba72d00..d09d7018d8 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreManager.java @@ -28,6 +28,7 @@ import com.walmartlabs.concord.server.audit.AuditAction; import com.walmartlabs.concord.server.audit.AuditLog; import com.walmartlabs.concord.server.audit.AuditObject; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.*; import com.walmartlabs.concord.server.org.team.TeamDao; import com.walmartlabs.concord.server.policy.EntityAction; @@ -40,7 +41,6 @@ import com.walmartlabs.concord.server.user.UserEntry; import com.walmartlabs.concord.server.user.UserManager; import com.walmartlabs.concord.server.user.UserType; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import java.io.Serializable; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryExecDao.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryExecDao.java index 37280a8889..add7d0167b 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryExecDao.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryExecDao.java @@ -24,12 +24,12 @@ import com.walmartlabs.concord.db.AbstractDao; import com.walmartlabs.concord.db.JsonStorageDB; import com.walmartlabs.concord.server.ConcordObjectMapper; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import org.jooq.Configuration; import org.jooq.DSLContext; import org.jooq.QueryPart; import org.jooq.Record; import org.jooq.impl.DSL; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import java.util.List; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryManager.java index cae41cf378..cc0950539a 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryManager.java @@ -24,6 +24,7 @@ import com.walmartlabs.concord.server.audit.AuditAction; import com.walmartlabs.concord.server.audit.AuditLog; import com.walmartlabs.concord.server.audit.AuditObject; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.OrganizationEntry; import com.walmartlabs.concord.server.org.OrganizationManager; import com.walmartlabs.concord.server.org.ResourceAccessLevel; @@ -31,7 +32,6 @@ import com.walmartlabs.concord.server.policy.EntityType; import com.walmartlabs.concord.server.policy.PolicyManager; import com.walmartlabs.concord.server.policy.PolicyUtils; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import java.util.*; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryResource.java index 834e0fa5cb..1f8cadf655 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/jsonstore/JsonStoreQueryResource.java @@ -23,12 +23,12 @@ import com.walmartlabs.concord.common.validation.ConcordKey; import com.walmartlabs.concord.server.GenericOperationResult; import com.walmartlabs.concord.server.OperationResult; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.sdk.ConcordApplicationException; import com.walmartlabs.concord.server.sdk.metrics.WithTimer; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.sonatype.siesta.Resource; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.validation.Valid; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/policy/PolicyCheckResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/policy/PolicyCheckResource.java index d8e31b95cb..ac0c5f9e5d 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/policy/PolicyCheckResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/policy/PolicyCheckResource.java @@ -20,6 +20,7 @@ * ===== */ +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.OrganizationEntry; import com.walmartlabs.concord.server.org.OrganizationManager; import com.walmartlabs.concord.server.org.project.ProjectEntry; @@ -34,7 +35,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.sonatype.siesta.Resource; import org.sonatype.siesta.Validate; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.ws.rs.*; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/KvManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/KvManager.java index 29a2817ea8..ea2779a7ec 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/KvManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/KvManager.java @@ -23,9 +23,9 @@ import com.walmartlabs.concord.policyengine.CheckResult; import com.walmartlabs.concord.policyengine.KvRule; import com.walmartlabs.concord.policyengine.PolicyEngine; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.policy.PolicyManager; import com.walmartlabs.concord.server.security.UserPrincipal; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import java.text.MessageFormat; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectAccessManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectAccessManager.java index 391ef45711..91852a40fe 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectAccessManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectAccessManager.java @@ -24,6 +24,7 @@ import com.walmartlabs.concord.server.audit.AuditAction; import com.walmartlabs.concord.server.audit.AuditLog; import com.walmartlabs.concord.server.audit.AuditObject; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.*; import com.walmartlabs.concord.server.sdk.metrics.WithTimer; import com.walmartlabs.concord.server.security.Roles; @@ -31,7 +32,6 @@ import com.walmartlabs.concord.server.user.UserDao; import org.apache.shiro.authz.UnauthorizedException; import org.jooq.DSLContext; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import java.io.Serializable; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectManager.java index f058e563a2..6cbf349136 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectManager.java @@ -25,6 +25,7 @@ import com.walmartlabs.concord.server.audit.AuditAction; import com.walmartlabs.concord.server.audit.AuditLog; import com.walmartlabs.concord.server.audit.AuditObject; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.jooq.enums.RawPayloadMode; import com.walmartlabs.concord.server.org.EntityOwner; import com.walmartlabs.concord.server.org.OrganizationEntry; @@ -42,7 +43,6 @@ import com.walmartlabs.concord.server.user.UserManager; import com.walmartlabs.concord.server.user.UserType; import org.jooq.DSLContext; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.ws.rs.core.Response; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectRepositoryManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectRepositoryManager.java index 4beafc9c9c..dd0fa9ef66 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectRepositoryManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectRepositoryManager.java @@ -24,6 +24,7 @@ import com.walmartlabs.concord.server.audit.AuditAction; import com.walmartlabs.concord.server.audit.AuditLog; import com.walmartlabs.concord.server.audit.AuditObject; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.jooq.Tables; import com.walmartlabs.concord.server.org.ResourceAccessLevel; import com.walmartlabs.concord.server.org.secret.SecretEntry; @@ -36,7 +37,6 @@ import com.walmartlabs.concord.server.sdk.ConcordApplicationException; import org.immutables.value.Value; import org.jooq.DSLContext; -import org.sonatype.siesta.ValidationErrorsException; import javax.annotation.Nullable; import javax.inject.Inject; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectResource.java index bdb7c0a238..f1c0d83b75 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectResource.java @@ -25,6 +25,7 @@ import com.walmartlabs.concord.common.validation.ConcordKey; import com.walmartlabs.concord.server.GenericOperationResult; import com.walmartlabs.concord.server.OperationResult; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.*; import com.walmartlabs.concord.server.org.team.TeamDao; import com.walmartlabs.concord.server.sdk.ConcordApplicationException; @@ -32,7 +33,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.sonatype.siesta.Resource; import org.sonatype.siesta.Validate; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.validation.Valid; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectValidator.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectValidator.java index 846e021e81..b23cd44077 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectValidator.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/ProjectValidator.java @@ -29,7 +29,7 @@ import com.walmartlabs.concord.process.loader.model.SourceMap; import com.walmartlabs.concord.process.loader.model.Trigger; import com.walmartlabs.concord.sdk.Constants; -import org.sonatype.siesta.ValidationErrorsException; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import java.io.Serializable; import java.util.*; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/RepositoryValidationExceptionMapper.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/RepositoryValidationExceptionMapper.java index e9b87857f7..0b0dedcc94 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/RepositoryValidationExceptionMapper.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/project/RepositoryValidationExceptionMapper.java @@ -20,8 +20,8 @@ * ===== */ +import com.walmartlabs.concord.server.boot.resteasy.ExceptionMapperSupport; import com.walmartlabs.concord.server.process.ErrorMessage; -import org.sonatype.siesta.ExceptionMapperSupport; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; @@ -40,7 +40,7 @@ public class RepositoryValidationExceptionMapper extends ExceptionMapperSupport< HttpHeaders headers; @Override - protected Response convert(RepositoryValidationException e, String id) { + protected Response convert(RepositoryValidationException e) { String details = getDetails(e.getCause()); String stacktrace = null; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretExceptionMapper.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretExceptionMapper.java index 467c8843d0..60ca84ee37 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretExceptionMapper.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretExceptionMapper.java @@ -20,19 +20,21 @@ * ===== */ -import org.sonatype.siesta.ExceptionMapperSupport; +import com.walmartlabs.concord.server.boot.resteasy.ExceptionMapperSupport; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; +import javax.ws.rs.ext.Provider; +@Provider public class SecretExceptionMapper extends ExceptionMapperSupport { @Context HttpHeaders headers; @Override - protected Response convert(SecretException e, String id) { + protected Response convert(SecretException e) { return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); } } diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretManager.java index 8937801d2d..c69b3681c9 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretManager.java @@ -28,6 +28,7 @@ import com.walmartlabs.concord.server.audit.AuditAction; import com.walmartlabs.concord.server.audit.AuditLog; import com.walmartlabs.concord.server.audit.AuditObject; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.cfg.SecretStoreConfiguration; import com.walmartlabs.concord.server.org.*; import com.walmartlabs.concord.server.org.project.DiffUtils; @@ -55,7 +56,6 @@ import com.walmartlabs.concord.server.user.UserManager; import org.apache.shiro.authz.UnauthorizedException; import org.jooq.DSLContext; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.ws.rs.WebApplicationException; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResource.java index 8d09c56f5d..51201690e7 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResource.java @@ -25,6 +25,7 @@ import com.walmartlabs.concord.server.GenericOperationResult; import com.walmartlabs.concord.server.MultipartUtils; import com.walmartlabs.concord.server.OperationResult; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.*; import com.walmartlabs.concord.server.org.project.ProjectDao; import com.walmartlabs.concord.server.org.secret.SecretManager.DecryptedKeyPair; @@ -45,7 +46,6 @@ import org.slf4j.LoggerFactory; import org.sonatype.siesta.Resource; import org.sonatype.siesta.Validate; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.validation.Valid; @@ -113,7 +113,7 @@ public SecretOperationResponse create(@PathParam("orgName") @ConcordKey String o String storePwd = SecretResourceUtils.getOrGenerateStorePassword(input, generatePwd); SecretVisibility visibility = SecretResourceUtils.getVisibility(input); - Set projectIds = getProjectIds( + Set projectIds = getProjectIds( org.getId(), MultipartUtils.getUUIDList(input, Constants.Multipart.PROJECT_IDS), MultipartUtils.getStringList(input, Constants.Multipart.PROJECT_NAMES), @@ -359,8 +359,9 @@ private UUID getProjectIdFromName(UUID orgId, String projectName) { } return id; } + private UUID getProject(UUID orgId, UUID id, String name) { - if (id == null && ( name != null && !name.trim().isEmpty()) ) { + if (id == null && (name != null && !name.trim().isEmpty())) { id = projectDao.getId(orgId, name); if (id == null) { throw new ValidationErrorsException("Project not found: " + name); diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResourceUtils.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResourceUtils.java index f4bd6427f2..533b579a3c 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResourceUtils.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResourceUtils.java @@ -24,15 +24,16 @@ import com.walmartlabs.concord.sdk.Constants; import com.walmartlabs.concord.server.MultipartUtils; import com.walmartlabs.concord.server.OperationResult; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.sdk.ConcordApplicationException; import org.jboss.resteasy.plugins.providers.multipart.MultipartInput; -import org.sonatype.siesta.ValidationErrorsException; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; -import java.util.*; +import java.util.Set; +import java.util.UUID; public final class SecretResourceUtils { diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResourceV2.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResourceV2.java index a6765af89e..739f1ae05d 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResourceV2.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/secret/SecretResourceV2.java @@ -26,6 +26,7 @@ import com.walmartlabs.concord.server.GenericOperationResult; import com.walmartlabs.concord.server.MultipartUtils; import com.walmartlabs.concord.server.OperationResult; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.OrganizationEntry; import com.walmartlabs.concord.server.org.OrganizationManager; import com.walmartlabs.concord.server.org.ResourceAccessLevel; @@ -39,7 +40,6 @@ import org.jboss.resteasy.plugins.providers.multipart.MultipartInput; import org.sonatype.siesta.Resource; import org.sonatype.siesta.Validate; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.ws.rs.*; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/team/TeamManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/team/TeamManager.java index 1884783542..778ecdf38e 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/team/TeamManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/team/TeamManager.java @@ -23,6 +23,7 @@ import com.walmartlabs.concord.server.audit.AuditAction; import com.walmartlabs.concord.server.audit.AuditLog; import com.walmartlabs.concord.server.audit.AuditObject; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.OrganizationDao; import com.walmartlabs.concord.server.org.OrganizationEntry; import com.walmartlabs.concord.server.org.OrganizationManager; @@ -35,7 +36,6 @@ import com.walmartlabs.concord.server.user.UserType; import org.apache.shiro.authz.UnauthorizedException; import org.jooq.DSLContext; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import java.util.Collection; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/team/TeamResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/team/TeamResource.java index 3f7757e250..90f36a2f55 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/team/TeamResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/team/TeamResource.java @@ -23,6 +23,7 @@ import com.walmartlabs.concord.common.validation.ConcordKey; import com.walmartlabs.concord.server.GenericOperationResult; import com.walmartlabs.concord.server.OperationResult; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.OrganizationEntry; import com.walmartlabs.concord.server.org.OrganizationManager; import com.walmartlabs.concord.server.security.UserPrincipal; @@ -32,7 +33,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.sonatype.siesta.Resource; import org.sonatype.siesta.Validate; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.validation.Valid; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/CronTriggerProcessor.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/CronTriggerProcessor.java index 751844194c..cf692a78a0 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/CronTriggerProcessor.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/CronTriggerProcessor.java @@ -22,8 +22,8 @@ import com.walmartlabs.concord.process.loader.model.Trigger; import com.walmartlabs.concord.sdk.Constants; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import org.jooq.DSLContext; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import java.time.OffsetDateTime; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/TriggerResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/TriggerResource.java index 96970f53d2..218df2b421 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/TriggerResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/TriggerResource.java @@ -25,6 +25,7 @@ import com.walmartlabs.concord.process.loader.ProjectLoader; import com.walmartlabs.concord.process.loader.model.ProcessDefinition; import com.walmartlabs.concord.repository.Repository; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.OrganizationEntry; import com.walmartlabs.concord.server.org.OrganizationManager; import com.walmartlabs.concord.server.org.ResourceAccessLevel; @@ -39,7 +40,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonatype.siesta.Resource; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.ws.rs.GET; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/TriggerV2Resource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/TriggerV2Resource.java index 2dea622904..bf387c39ae 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/TriggerV2Resource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/org/triggers/TriggerV2Resource.java @@ -21,13 +21,13 @@ */ import com.walmartlabs.concord.common.validation.ConcordKey; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.OrganizationDao; import com.walmartlabs.concord.server.org.ResourceAccessLevel; import com.walmartlabs.concord.server.org.project.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.sonatype.siesta.Resource; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.ws.rs.GET; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/policy/PolicyManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/policy/PolicyManager.java index 96883b4823..9387006318 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/policy/PolicyManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/policy/PolicyManager.java @@ -23,6 +23,7 @@ import com.walmartlabs.concord.policyengine.CheckResult; import com.walmartlabs.concord.policyengine.EntityRule; import com.walmartlabs.concord.policyengine.PolicyEngine; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.policy.PolicyDao; import com.walmartlabs.concord.server.org.policy.PolicyEntry; import com.walmartlabs.concord.server.process.Payload; @@ -30,7 +31,6 @@ import com.walmartlabs.concord.server.user.UserEntry; import com.walmartlabs.concord.server.user.UserInfoProvider; import com.walmartlabs.concord.server.user.UserManager; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import java.util.*; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/process/PayloadBuilder.java b/server/impl/src/main/java/com/walmartlabs/concord/server/process/PayloadBuilder.java index 36c4130a33..4e606db217 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/process/PayloadBuilder.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/process/PayloadBuilder.java @@ -25,11 +25,11 @@ import com.walmartlabs.concord.imports.Imports; import com.walmartlabs.concord.sdk.Constants; import com.walmartlabs.concord.server.MultipartUtils; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.sdk.PartialProcessKey; import com.walmartlabs.concord.server.sdk.ProcessKey; import org.jboss.resteasy.plugins.providers.multipart.InputPart; import org.jboss.resteasy.plugins.providers.multipart.MultipartInput; -import org.sonatype.siesta.ValidationErrorsException; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.MediaType; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/process/PayloadManager.java b/server/impl/src/main/java/com/walmartlabs/concord/server/process/PayloadManager.java index 3fc899be56..8461c71129 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/process/PayloadManager.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/process/PayloadManager.java @@ -24,6 +24,7 @@ import com.walmartlabs.concord.imports.Imports; import com.walmartlabs.concord.sdk.Constants; import com.walmartlabs.concord.server.MultipartUtils; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.org.OrganizationDao; import com.walmartlabs.concord.server.org.project.ProjectDao; import com.walmartlabs.concord.server.org.project.RepositoryDao; @@ -34,7 +35,6 @@ import com.walmartlabs.concord.server.sdk.metrics.WithTimer; import com.walmartlabs.concord.server.security.UserPrincipal; import org.jboss.resteasy.plugins.providers.multipart.MultipartInput; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.inject.Named; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/process/ProcessExceptionMapper.java b/server/impl/src/main/java/com/walmartlabs/concord/server/process/ProcessExceptionMapper.java index f63fdef72f..e94fb92990 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/process/ProcessExceptionMapper.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/process/ProcessExceptionMapper.java @@ -9,9 +9,9 @@ * 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. @@ -20,8 +20,8 @@ * ===== */ +import com.walmartlabs.concord.server.boot.resteasy.ExceptionMapperSupport; import com.walmartlabs.concord.server.sdk.PartialProcessKey; -import org.sonatype.siesta.ExceptionMapperSupport; import javax.inject.Named; import javax.inject.Singleton; @@ -29,12 +29,14 @@ import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import javax.ws.rs.ext.Provider; import java.io.PrintWriter; import java.io.StringWriter; import java.util.UUID; @Named @Singleton +@Provider public class ProcessExceptionMapper extends ExceptionMapperSupport { private static final int MAX_CAUSE_DEPTH = 5; @@ -45,7 +47,7 @@ public class ProcessExceptionMapper extends ExceptionMapperSupport { @Override - protected Response convert(UnauthenticatedException exception, String id) { + protected Response convert(UnauthenticatedException exception) { return Response.status(Status.UNAUTHORIZED) .header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_TYPE) .entity(exception.getMessage()) diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/security/UnauthorizedExceptionMapper.java b/server/impl/src/main/java/com/walmartlabs/concord/server/security/UnauthorizedExceptionMapper.java index 14df65d275..3f0bfa4796 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/security/UnauthorizedExceptionMapper.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/security/UnauthorizedExceptionMapper.java @@ -20,21 +20,20 @@ * ===== */ +import com.walmartlabs.concord.server.boot.resteasy.ExceptionMapperSupport; import org.apache.shiro.authz.UnauthorizedException; -import org.sonatype.siesta.ExceptionMapperSupport; -import javax.inject.Named; -import javax.inject.Singleton; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; +import javax.ws.rs.ext.Provider; -@Named -@Singleton +@Provider public class UnauthorizedExceptionMapper extends ExceptionMapperSupport { + @Override - protected Response convert(UnauthorizedException exception, String id) { + protected Response convert(UnauthorizedException exception) { return Response.status(Status.FORBIDDEN) .header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_TYPE) .entity(exception.getMessage()) diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/security/apikey/ApiKeyResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/security/apikey/ApiKeyResource.java index d964b49157..8e2b8ad777 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/security/apikey/ApiKeyResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/security/apikey/ApiKeyResource.java @@ -26,6 +26,7 @@ import com.walmartlabs.concord.server.audit.AuditAction; import com.walmartlabs.concord.server.audit.AuditLog; import com.walmartlabs.concord.server.audit.AuditObject; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.cfg.ApiKeyConfiguration; import com.walmartlabs.concord.server.sdk.ConcordApplicationException; import com.walmartlabs.concord.server.security.Roles; @@ -40,7 +41,6 @@ import org.slf4j.LoggerFactory; import org.sonatype.siesta.Resource; import org.sonatype.siesta.Validate; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.validation.Valid; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/user/UserResource.java b/server/impl/src/main/java/com/walmartlabs/concord/server/user/UserResource.java index 715b387bb7..3a014f50c9 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/user/UserResource.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/user/UserResource.java @@ -22,6 +22,7 @@ import com.walmartlabs.concord.server.GenericOperationResult; import com.walmartlabs.concord.server.OperationResult; +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.sdk.ConcordApplicationException; import com.walmartlabs.concord.server.security.Roles; import com.walmartlabs.concord.server.security.UserPrincipal; @@ -30,7 +31,6 @@ import org.apache.shiro.authz.UnauthorizedException; import org.sonatype.siesta.Resource; import org.sonatype.siesta.Validate; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.inject.Named; diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/user/UserResourceV2.java b/server/impl/src/main/java/com/walmartlabs/concord/server/user/UserResourceV2.java index 1778e61ee0..04866ccad8 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/user/UserResourceV2.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/user/UserResourceV2.java @@ -20,11 +20,11 @@ * ===== */ +import com.walmartlabs.concord.server.boot.validation.ValidationErrorsException; import com.walmartlabs.concord.server.sdk.metrics.WithTimer; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.sonatype.siesta.Resource; -import org.sonatype.siesta.ValidationErrorsException; import javax.inject.Inject; import javax.inject.Named; diff --git a/server/impl/src/test/java/com/walmartlabs/concord/server/TestObjectMapper.java b/server/impl/src/test/java/com/walmartlabs/concord/server/TestObjectMapper.java index 83306020f8..ff80f499ca 100644 --- a/server/impl/src/test/java/com/walmartlabs/concord/server/TestObjectMapper.java +++ b/server/impl/src/test/java/com/walmartlabs/concord/server/TestObjectMapper.java @@ -9,9 +9,9 @@ * 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. @@ -21,7 +21,7 @@ */ import com.fasterxml.jackson.databind.ObjectMapper; -import org.sonatype.siesta.jackson2.ObjectMapperProvider; +import com.walmartlabs.concord.common.ObjectMapperProvider; public final class TestObjectMapper { diff --git a/server/plugins/noderoster/impl/pom.xml b/server/plugins/noderoster/impl/pom.xml index 63e5222525..d81a52cf4d 100644 --- a/server/plugins/noderoster/impl/pom.xml +++ b/server/plugins/noderoster/impl/pom.xml @@ -60,20 +60,6 @@ io.takari.siesta siesta-api - - io.takari.siesta - siesta-server - - - javax.validation - validation-api - - - org.hibernate - hibernate-validator - - - javax.validation validation-api @@ -83,10 +69,6 @@ hibernate-validator 6.1.5.Final - - io.takari.siesta - siesta-jackson2 - org.jboss.resteasy resteasy-jackson2-provider diff --git a/targetplatform/pom.xml b/targetplatform/pom.xml index 052491f39f..98eb522f16 100644 --- a/targetplatform/pom.xml +++ b/targetplatform/pom.xml @@ -603,41 +603,6 @@ - - io.takari.siesta - siesta-jackson2 - ${siesta.version} - - - - org.jboss.resteasy - resteasy-jackson2-provider - - - - - io.takari.siesta - siesta-server - ${siesta.version} - - - org.sonatype.sisu - sisu-guice - - - org.sonatype.sisu.inject - guice-servlet - - - org.glassfish.web - javax.el - - - org.jboss.resteasy - resteasy-jaxrs - - - javax.inject javax.inject