This is an automated email from the ASF dual-hosted git repository. rzo1 pushed a commit to branch tomee-10.x in repository https://gitbox.apache.org/repos/asf/tomee.git
commit e1a633ace91fbb4b317595d272862d947d19db03 Author: Markus Jung <[email protected]> AuthorDate: Wed Oct 7 17:37:13 2026 +0200 TOMEE-4728 - deploy the container health application without the providers of declared applications (#3064) (cherry picked from commit bbfd0054ff57fa91b29983c089c007461bde8d20) --- .../microprofile/health/HealthEndpointTest.java | 31 ++++++++++++++++++++++ .../apache/openejb/server/rest/RESTService.java | 4 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/itests/tomee-microprofile-itests/src/test/java/org/apache/tomee/microprofile/health/HealthEndpointTest.java b/itests/tomee-microprofile-itests/src/test/java/org/apache/tomee/microprofile/health/HealthEndpointTest.java index eb5fa1c085..2f699403d0 100644 --- a/itests/tomee-microprofile-itests/src/test/java/org/apache/tomee/microprofile/health/HealthEndpointTest.java +++ b/itests/tomee-microprofile-itests/src/test/java/org/apache/tomee/microprofile/health/HealthEndpointTest.java @@ -22,6 +22,7 @@ import jakarta.ws.rs.NameBinding; import jakarta.ws.rs.Path; import jakarta.ws.rs.container.ContainerRequestContext; import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.container.PreMatching; import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.Response; import org.apache.cxf.jaxrs.client.WebClient; @@ -125,6 +126,20 @@ public class HealthEndpointTest { assertEquals(200, get(tomee, "/test/health/live").getStatus()); } + @Test + public void applicationWithItsOwnProvider() throws Exception { + final TomEE tomee = deploy(Archive.archive() + .add(HealthEndpointTest.class) + .add(UnavailableApp.class) + .add(UnavailableFilter.class) + .add(HelloResource.class) + .asJar()); + + assertEquals(503, get(tomee, "/test/api/hello").getStatus()); + assertEquals(200, get(tomee, "/test/health").getStatus()); + assertEquals(200, get(tomee, "/test/health/live").getStatus()); + } + private static TomEE deploy(final File appJar) throws Exception { return TomEE.microprofile() .add("webapps/test/WEB-INF/beans.xml", "") @@ -183,6 +198,22 @@ public class HealthEndpointTest { } } + @ApplicationPath("/api") + public static class UnavailableApp extends Application { + @Override + public Set<Class<?>> getClasses() { + return Set.of(HelloResource.class, UnavailableFilter.class); + } + } + + @PreMatching + public static class UnavailableFilter implements ContainerRequestFilter { + @Override + public void filter(final ContainerRequestContext requestContext) { + requestContext.abortWith(Response.status(Response.Status.SERVICE_UNAVAILABLE).build()); + } + } + @ApplicationPath("/other") public static class OtherApp extends Application { @Override diff --git a/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java b/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java index a4310d3d96..770c01d46d 100644 --- a/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java +++ b/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java @@ -154,6 +154,8 @@ public abstract class RESTService implements ServerService, SelfManaging { final Collection<Object> additionalProviders = new HashSet<>(); addAppProvidersIfNeeded(appInfo, webApp, classLoader, additionalProviders); + // the providers of the webapp itself, before the declared applications add their own + final Collection<Object> webAppProviders = new HashSet<>(additionalProviders); Collection<IdPropertiesInfo> pojoConfigurations = null; // done lazily try { @@ -275,7 +277,7 @@ public abstract class RESTService implements ServerService, SelfManaging { if (!webApp.restApplications.isEmpty() && deploymentWithApplication && !applicationAtContextRoot && !containerResources.isEmpty()) { pojoConfigurations = PojoUtil.findPojoConfig(pojoConfigurations, appInfo, webApp); - deployApplication(appInfo, webApp.contextRoot, restEjbs, classLoader, injections, owbCtx, context, additionalProviders, pojoConfigurations, new InternalApplication(null), containerResources, "/" + wildcard); + deployApplication(appInfo, webApp.contextRoot, restEjbs, classLoader, injections, owbCtx, context, webAppProviders, pojoConfigurations, new InternalApplication(null), containerResources, "/" + wildcard); } if (webApp.restApplications.isEmpty()) {
