You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/11/27 07:48:47 UTC
[isis] 02/02: ISIS-3275: testing: resteasy provisioning fixes
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch spring6
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 512a96d2f11f1e42cbf55119c66f8ac999797f4b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Nov 27 08:48:40 2022 +0100
ISIS-3275: testing: resteasy provisioning fixes
---
.../causeway/testdomain/rest/RestServiceTest.java | 12 +-
.../conf/Configuration_usingSpring6.java | 150 +++++++++++++++++++++
.../resources/DomainObjectResourceServerside.java | 7 +-
.../resources/DomainServiceResourceServerside.java | 7 +-
.../resources/DomainTypeResourceServerside.java | 7 +-
.../resources/HomePageResourceServerside.java | 7 +-
.../viewer/resources/ImageResourceServerside.java | 7 +-
.../resources/MenuBarsResourceServerside.java | 7 +-
.../viewer/resources/SwaggerSpecResource.java | 4 +-
.../viewer/resources/UserResourceServerside.java | 7 +-
.../resources/VersionResourceServerside.java | 7 +-
11 files changed, 189 insertions(+), 33 deletions(-)
diff --git a/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/RestServiceTest.java b/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/RestServiceTest.java
index 2f6711301c..88ecbf9287 100644
--- a/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/RestServiceTest.java
+++ b/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/RestServiceTest.java
@@ -18,6 +18,9 @@
*/
package org.apache.causeway.testdomain.rest;
+import jakarta.inject.Inject;
+import jakarta.xml.bind.JAXBException;
+
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@@ -31,16 +34,13 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import org.apache.causeway.core.config.presets.CausewayPresets;
import org.apache.causeway.testdomain.conf.Configuration_usingJdo;
+import org.apache.causeway.testdomain.conf.Configuration_usingSpring6;
import org.apache.causeway.testdomain.jdo.JdoInventoryJaxbVm;
import org.apache.causeway.testdomain.jdo.JdoTestFixtures;
import org.apache.causeway.testdomain.jdo.entities.JdoBook;
import org.apache.causeway.testdomain.util.rest.RestEndpointService;
-import org.apache.causeway.testing.fixtures.applib.fixturescripts.ExecutionParametersServiceAutoConfiguration;
-import org.apache.causeway.testing.fixtures.applib.fixturescripts.FixtureScriptsSpecificationProviderAutoConfiguration;
import org.apache.causeway.viewer.restfulobjects.jaxrsresteasy.CausewayModuleViewerRestfulObjectsJaxrsResteasy;
-import jakarta.inject.Inject;
-import jakarta.xml.bind.JAXBException;
import lombok.val;
@SpringBootTest(
@@ -48,11 +48,9 @@ import lombok.val;
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestPropertySource(CausewayPresets.UseLog4j2Test)
@Import({
+ Configuration_usingSpring6.class,
Configuration_usingJdo.class,
CausewayModuleViewerRestfulObjectsJaxrsResteasy.class,
-
- FixtureScriptsSpecificationProviderAutoConfiguration.class, // because something? disables autoconfiguration
- ExecutionParametersServiceAutoConfiguration.class // because something? disables autoconfiguration
})
class RestServiceTest {
diff --git a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingSpring6.java b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingSpring6.java
new file mode 100644
index 0000000000..c159817845
--- /dev/null
+++ b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingSpring6.java
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.causeway.testdomain.conf;
+
+import java.util.Set;
+
+import jakarta.servlet.Servlet;
+import jakarta.servlet.ServletContainerInitializer;
+
+import org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher;
+import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters;
+import org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer;
+import org.jboss.resteasy.springboot.ResteasyEmbeddedServletInitializer;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import org.apache.causeway.testing.fixtures.applib.fixturescripts.ExecutionParametersServiceAutoConfiguration;
+import org.apache.causeway.testing.fixtures.applib.fixturescripts.FixtureScriptsSpecificationProviderAutoConfiguration;
+
+import lombok.extern.log4j.Log4j2;
+
+/**
+ * Introduced for the purpose of troubleshooting Spring 5.x to 6.x migration issues.
+ * @deprecated marked deprecated, to be removed once no longer needed
+ */
+@Deprecated(forRemoval = true)
+@Configuration
+@Import({
+ ResteasyEmbeddedServletInitializer.class, //FIXME[ISIS-3275] move up the hierarchy?
+ FixtureScriptsSpecificationProviderAutoConfiguration.class, // because something? disables autoconfiguration
+ ExecutionParametersServiceAutoConfiguration.class // because something? disables autoconfiguration
+})
+@Log4j2
+public class Configuration_usingSpring6 {
+
+ /**
+ * This class is the Spring Boot equivalent of {@link ResteasyServletInitializer},
+ * which implements the Servlet API {@link ServletContainerInitializer} interface
+ * to find all JAX-RS Application, Provider and Path classes in the classpath.
+ * <p>
+ * As we all know, in Spring Boot we use an embedded servlet container. However,
+ * the Servlet spec does not support embedded containers, and many portions of it
+ * do not apply to embedded containers, and ServletContainerInitializer is one of them.
+ * <p>
+ * This class fills in this gap.
+ * <p>
+ * Notice that the JAX-RS Application classes are found in this RESTEasy starter by class
+ * ResteasyEmbeddedServletInitializer, and that is done by scanning the classpath.
+ * <p>
+ * The Path and Provider annotated classes are found by using Spring framework (instead of
+ * scanning the classpath), since it is assumed those classes are ALWAYS necessarily
+ * Spring beans (this starter is meant for Spring Boot applications that use RESTEasy
+ * as the JAX-RS implementation)
+ *
+ * @see "https://github.com/paypal/resteasy-spring-boot/blob/master/resteasy-spring-boot-starter/src/main/java/com/paypal/springboot/resteasy/ResteasyApplicationBuilder.java"
+ */
+ public static class ResteasyApplicationBuilder {
+
+ public static final String BEAN_NAME = "JaxrsApplicationServletBuilder";
+
+ public ServletRegistrationBean<Servlet> build(
+ final String applicationClassName,
+ final String path,
+ final Set<Class<?>> resources,
+ final Set<Class<?>> providers) {
+ Servlet servlet = new HttpServlet30Dispatcher();
+
+ ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<Servlet>(servlet);
+
+ servletRegistrationBean.setName(applicationClassName);
+ servletRegistrationBean.setLoadOnStartup(1);
+ servletRegistrationBean.setAsyncSupported(true);
+ servletRegistrationBean.addInitParameter("javax.ws.rs.Application", applicationClassName);
+
+ if (path != null) {
+ String mapping = path;
+ if (!mapping.startsWith("/"))
+ mapping = "/" + mapping;
+ String prefix = mapping;
+ if (!"/".equals(prefix) && prefix.endsWith("/"))
+ prefix = prefix.substring(0, prefix.length() - 1);
+ if (mapping.endsWith("/"))
+ mapping += "*";
+ else
+ mapping += "/*";
+ // resteasy.servlet.mapping.prefix
+ servletRegistrationBean.addInitParameter("resteasy.servlet.mapping.prefix", prefix);
+ servletRegistrationBean.addUrlMappings(mapping);
+ }
+
+ if (resources.size() > 0) {
+ StringBuilder builder = new StringBuilder();
+ boolean first = true;
+ for (Class<?> resource : resources) {
+ if (first) {
+ first = false;
+ } else {
+ builder.append(",");
+ }
+
+ builder.append(resource.getName());
+ }
+ servletRegistrationBean.addInitParameter(ResteasyContextParameters.RESTEASY_SCANNED_RESOURCES, builder.toString());
+ }
+ if (providers.size() > 0) {
+ StringBuilder builder = new StringBuilder();
+ boolean first = true;
+ for (Class<?> provider : providers) {
+ if (first) {
+ first = false;
+ } else {
+ builder.append(",");
+ }
+ builder.append(provider.getName());
+ }
+ servletRegistrationBean.addInitParameter(ResteasyContextParameters.RESTEASY_SCANNED_PROVIDERS, builder.toString());
+ }
+
+ log.debug("ServletRegistrationBean has just bean created for JAX-RS class " + applicationClassName);
+
+ return servletRegistrationBean;
+ }
+
+ }
+
+
+ @Bean(name = "JaxrsApplicationServletBuilder")
+ public ResteasyApplicationBuilder resteasyApplicationBuilder() {
+ return new ResteasyApplicationBuilder();
+ }
+
+}
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
index c4897ddc8d..0575b560a4 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
@@ -32,6 +32,7 @@ import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
@@ -83,9 +84,9 @@ implements DomainObjectResource {
@Inject
public DomainObjectResourceServerside(
- final MetaModelContext metaModelContext,
- final CausewayConfiguration causewayConfiguration,
- final InteractionLayerTracker iInteractionLayerTracker) {
+ final @Context MetaModelContext metaModelContext,
+ final @Context CausewayConfiguration causewayConfiguration,
+ final @Context InteractionLayerTracker iInteractionLayerTracker) {
super(metaModelContext, causewayConfiguration, iInteractionLayerTracker);
log.debug("<init>");
}
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
index 6a4486de52..94f9118af8 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainServiceResourceServerside.java
@@ -32,6 +32,7 @@ import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
@@ -72,9 +73,9 @@ implements DomainServiceResource {
@Inject
public DomainServiceResourceServerside(
- final MetaModelContext metaModelContext,
- final CausewayConfiguration causewayConfiguration,
- final InteractionLayerTracker iInteractionLayerTracker) {
+ final @Context MetaModelContext metaModelContext,
+ final @Context CausewayConfiguration causewayConfiguration,
+ final @Context InteractionLayerTracker iInteractionLayerTracker) {
super(metaModelContext, causewayConfiguration, iInteractionLayerTracker);
log.debug("<init>");
}
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java
index 734c20b1ae..aafd8cc65e 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java
@@ -26,6 +26,7 @@ import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
@@ -84,9 +85,9 @@ implements DomainTypeResource {
@Inject
public DomainTypeResourceServerside(
- final MetaModelContext metaModelContext,
- final CausewayConfiguration causewayConfiguration,
- final InteractionLayerTracker iInteractionLayerTracker) {
+ final @Context MetaModelContext metaModelContext,
+ final @Context CausewayConfiguration causewayConfiguration,
+ final @Context InteractionLayerTracker iInteractionLayerTracker) {
super(metaModelContext, causewayConfiguration, iInteractionLayerTracker);
log.debug("<init>");
}
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/HomePageResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/HomePageResourceServerside.java
index 594d33e2c9..10aa4ea9e7 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/HomePageResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/HomePageResourceServerside.java
@@ -22,6 +22,7 @@ import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
@@ -53,9 +54,9 @@ implements HomePageResource {
@Inject
public HomePageResourceServerside(
- final MetaModelContext metaModelContext,
- final CausewayConfiguration causewayConfiguration,
- final InteractionLayerTracker iInteractionLayerTracker) {
+ final @Context MetaModelContext metaModelContext,
+ final @Context CausewayConfiguration causewayConfiguration,
+ final @Context InteractionLayerTracker iInteractionLayerTracker) {
super(metaModelContext, causewayConfiguration, iInteractionLayerTracker);
log.debug("<init>");
}
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ImageResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ImageResourceServerside.java
index 822791e269..4d479b7bbc 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ImageResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ImageResourceServerside.java
@@ -25,6 +25,7 @@ import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.Response;
import org.springframework.stereotype.Component;
@@ -44,9 +45,9 @@ public class ImageResourceServerside extends ResourceAbstract {
@Inject
public ImageResourceServerside(
- final MetaModelContext metaModelContext,
- final CausewayConfiguration causewayConfiguration,
- final InteractionLayerTracker iInteractionLayerTracker) {
+ final @Context MetaModelContext metaModelContext,
+ final @Context CausewayConfiguration causewayConfiguration,
+ final @Context InteractionLayerTracker iInteractionLayerTracker) {
super(metaModelContext, causewayConfiguration, iInteractionLayerTracker);
log.debug("<init>");
}
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/MenuBarsResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/MenuBarsResourceServerside.java
index d58941ca65..06881c3466 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/MenuBarsResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/MenuBarsResourceServerside.java
@@ -23,6 +23,7 @@ import java.util.function.Consumer;
import jakarta.inject.Inject;
import jakarta.ws.rs.HttpMethod;
import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
@@ -54,9 +55,9 @@ public class MenuBarsResourceServerside extends ResourceAbstract implements Menu
@Inject
public MenuBarsResourceServerside(
- final MetaModelContext metaModelContext,
- final CausewayConfiguration causewayConfiguration,
- final InteractionLayerTracker iInteractionLayerTracker) {
+ final @Context MetaModelContext metaModelContext,
+ final @Context CausewayConfiguration causewayConfiguration,
+ final @Context InteractionLayerTracker iInteractionLayerTracker) {
super(metaModelContext, causewayConfiguration, iInteractionLayerTracker);
}
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/SwaggerSpecResource.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/SwaggerSpecResource.java
index 48f1237a2b..1b85f97f1a 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/SwaggerSpecResource.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/SwaggerSpecResource.java
@@ -55,8 +55,8 @@ public class SwaggerSpecResource {
@Inject
public SwaggerSpecResource(
- final SwaggerService swaggerService,
- final InteractionService interactionService) {
+ final @Context SwaggerService swaggerService,
+ final @Context InteractionService interactionService) {
this.swaggerService = swaggerService;
this.interactionService = interactionService;
log.debug("<init>");
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/UserResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/UserResourceServerside.java
index 628cad31b4..c49f9f85e2 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/UserResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/UserResourceServerside.java
@@ -23,6 +23,7 @@ import java.net.URISyntaxException;
import jakarta.inject.Inject;
import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
@@ -51,9 +52,9 @@ public class UserResourceServerside extends ResourceAbstract implements UserReso
@Inject
public UserResourceServerside(
- final MetaModelContext metaModelContext,
- final CausewayConfiguration causewayConfiguration,
- final InteractionLayerTracker iInteractionLayerTracker) {
+ final @Context MetaModelContext metaModelContext,
+ final @Context CausewayConfiguration causewayConfiguration,
+ final @Context InteractionLayerTracker iInteractionLayerTracker) {
super(metaModelContext, causewayConfiguration, iInteractionLayerTracker);
}
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/VersionResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/VersionResourceServerside.java
index b2e036c64c..53c20066ed 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/VersionResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/VersionResourceServerside.java
@@ -24,6 +24,7 @@ import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.HttpHeaders;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
@@ -63,9 +64,9 @@ implements VersionResource {
@Inject
public VersionResourceServerside(
- final MetaModelContext metaModelContext,
- final CausewayConfiguration causewayConfiguration,
- final InteractionLayerTracker iInteractionLayerTracker) {
+ final @Context MetaModelContext metaModelContext,
+ final @Context CausewayConfiguration causewayConfiguration,
+ final @Context InteractionLayerTracker iInteractionLayerTracker) {
super(metaModelContext, causewayConfiguration, iInteractionLayerTracker);
log.debug("<init>");
}