Repository: tomee Updated Branches: refs/heads/master 0cc96a643 -> 2c1ee1f0e
TOMEE-2366 ensure JAX-RS Feature are taken into account even without @Provider Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/2c1ee1f0 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/2c1ee1f0 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/2c1ee1f0 Branch: refs/heads/master Commit: 2c1ee1f0e7e5532a7d2426ed9405b009fdaf01c9 Parents: 0cc96a6 Author: Romain Manni-Bucau <rmannibu...@apache.org> Authored: Thu Dec 13 19:58:23 2018 +0100 Committer: Romain Manni-Bucau <rmannibu...@apache.org> Committed: Thu Dec 13 19:58:23 2018 +0100 ---------------------------------------------------------------------- .../server/cxf/rs/ApplicationFeatureTest.java | 87 ++++++++++++++++++++ .../apache/openejb/server/rest/RESTService.java | 2 + 2 files changed, 89 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/2c1ee1f0/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/ApplicationFeatureTest.java ---------------------------------------------------------------------- diff --git a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/ApplicationFeatureTest.java b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/ApplicationFeatureTest.java new file mode 100644 index 0000000..3ae114b --- /dev/null +++ b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/ApplicationFeatureTest.java @@ -0,0 +1,87 @@ +/* + * 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.openejb.server.cxf.rs; + +import static java.util.stream.Collectors.toSet; +import static org.junit.Assert.assertEquals; + +import java.util.Set; +import java.util.stream.Stream; + +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.container.ContainerRequestFilter; +import javax.ws.rs.core.Application; +import javax.ws.rs.core.Feature; +import javax.ws.rs.core.FeatureContext; +import javax.ws.rs.core.Response; + +import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.openejb.junit.ApplicationComposer; +import org.apache.openejb.testing.Classes; +import org.apache.openejb.testing.EnableServices; +import org.apache.openejb.testing.RandomPort; +import org.junit.Test; +import org.junit.runner.RunWith; + +@EnableServices("jaxrs") +@RunWith(ApplicationComposer.class) +@Classes({ ApplicationFeatureTest.MyEndpoint.class, ApplicationFeatureTest.MyApp.class }) +public class ApplicationFeatureTest { + @RandomPort("http") + private int port; + + @Test + public void checkStarIsNotAnIssue() { + final Client client = ClientBuilder.newClient(); + try { + assertEquals("ok", client.target("http://localhost:" + port + "/openejb/ApplicationFeatureTest-MyApp") + .path("test") + .request().get(String.class)); + } finally { + client.close(); + } + } + + @Path("test") + public static class MyEndpoint { + @GET + public String get() { + return "failed"; + } + } + + // don't put @Provider here + public static class MyFeature implements Feature { + @Override + public boolean configure(final FeatureContext featureContext) { + featureContext.register((ContainerRequestFilter) ctx -> ctx.abortWith(Response.ok("ok").build())); + return true; + } + } + + @ApplicationPath("ApplicationFeatureTest-MyApp") + public static class MyApp extends Application { + @Override + public Set<Class<?>> getClasses() { + return Stream.of(MyEndpoint.class, MyFeature.class).collect(toSet()); + } + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/2c1ee1f0/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java ---------------------------------------------------------------------- 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 2474c0f..43d65b4 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 @@ -57,6 +57,7 @@ import javax.ws.rs.Path; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.core.Application; +import javax.ws.rs.core.Feature; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.ext.ContextResolver; import javax.ws.rs.ext.MessageBodyReader; @@ -567,6 +568,7 @@ public abstract class RESTService implements ServerService, SelfManaging { WriterInterceptor.class.isAssignableFrom(clazz) || ParamConverterProvider.class.isAssignableFrom(clazz) || ContextResolver.class.isAssignableFrom(clazz) || + Feature.class.isAssignableFrom(clazz) || new MetaAnnotatedClass<>(clazz).isAnnotationPresent(Provider.class); }