Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id AE9FA11E17 for ; Thu, 28 Aug 2014 13:05:29 +0000 (UTC) Received: (qmail 34627 invoked by uid 500); 28 Aug 2014 13:05:29 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 34562 invoked by uid 500); 28 Aug 2014 13:05:29 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 34553 invoked by uid 99); 28 Aug 2014 13:05:29 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 28 Aug 2014 13:05:29 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 4D2D7A0402E; Thu, 28 Aug 2014 13:05:29 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sergeyb@apache.org To: commits@cxf.apache.org Message-Id: <3d553cd4c4674835ad7b80e0c0a7655f@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: git commit: [CXF-5899] More work to do with supporting the injection of Configuration Date: Thu, 28 Aug 2014 13:05:29 +0000 (UTC) Repository: cxf Updated Branches: refs/heads/3.0.x-fixes fd8c3c951 -> 2f14a20a7 [CXF-5899] More work to do with supporting the injection of Configuration Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/2f14a20a Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/2f14a20a Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/2f14a20a Branch: refs/heads/3.0.x-fixes Commit: 2f14a20a70e37d2151d587e935b99d959f4dbd72 Parents: fd8c3c9 Author: Sergey Beryozkin Authored: Thu Aug 28 14:03:04 2014 +0100 Committer: Sergey Beryozkin Committed: Thu Aug 28 14:05:04 2014 +0100 ---------------------------------------------------------------------- .../cxf/jaxrs/provider/ProviderFactory.java | 14 +-- .../jaxrs/provider/ServerProviderFactory.java | 123 ++++++++++++++----- .../org/apache/cxf/jaxrs/utils/JAXRSUtils.java | 2 +- .../cxf/jaxrs/client/ClientProviderFactory.java | 10 +- .../cxf/jaxrs/client/spec/ClientImpl.java | 3 +- .../client/spec/ClientRequestContextImpl.java | 2 +- .../jaxrs/JAXRS20ClientServerBookTest.java | 7 +- 7 files changed, 111 insertions(+), 50 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/2f14a20a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java index f95a829..040f505 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java @@ -97,8 +97,6 @@ public abstract class ProviderFactory { new NameKeyMap>(true); protected Map> writerInterceptors = new NameKeyMap>(true); - private Configuration dynamicConfiguration; - private List>> messageReaders = new ArrayList>>(); @@ -163,15 +161,7 @@ public abstract class ProviderFactory { return null; } - public void setConfiguration(Configuration config) { - // Whatever is set inside Configuration is also set in this ProviderFactory - // We use it only to support Configuration injection at a basic level - this.dynamicConfiguration = config; - } - - public Configuration getConfiguration() { - return dynamicConfiguration; - } + public abstract Configuration getConfiguration(Message message); public ContextResolver createContextResolver(Type contextType, Message m) { @@ -570,7 +560,7 @@ public abstract class ProviderFactory { protected void addProviderToList(List list, ProviderInfo provider) { List> list2 = CastUtils.cast(list); for (ProviderInfo pi : list2) { - if (pi.getProvider().getClass() == provider.getProvider().getClass()) { + if (pi.getProvider() == provider.getProvider()) { return; } } http://git-wip-us.apache.org/repos/asf/cxf/blob/2f14a20a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java index 9f93528..9418224 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java @@ -30,6 +30,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import javax.ws.rs.Priorities; import javax.ws.rs.RuntimeType; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.ContainerResponseFilter; @@ -46,6 +47,7 @@ import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; import org.apache.cxf.common.util.ClassHelper; import org.apache.cxf.endpoint.Endpoint; +import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.jaxrs.impl.ConfigurableImpl; import org.apache.cxf.jaxrs.impl.RequestPreprocessor; import org.apache.cxf.jaxrs.impl.ResourceInfoImpl; @@ -132,6 +134,8 @@ public final class ServerProviderFactory extends ProviderFactory { factory.setProviders(new WebApplicationExceptionMapper()); bus.setProperty(SHARED_SERVER_FACTORY, factory); + + return factory; } @@ -339,9 +343,8 @@ public final class ServerProviderFactory extends ProviderFactory { } } - @Override - public Configuration getConfiguration() { - return new ServerConfigurationImpl(super.getConfiguration()); + public Configuration getConfiguration(Message m) { + return new ServerConfigurationImpl(); } private void doApplyDynamicFeatures(ClassResourceInfo cri) { @@ -350,7 +353,6 @@ public final class ServerProviderFactory extends ProviderFactory { for (DynamicFeature feature : dynamicFeatures) { FeatureContext featureContext = new MethodFeatureContextImpl(ori); feature.configure(new ResourceInfoImpl(ori), featureContext); - super.setConfiguration(featureContext.getConfiguration()); } } Collection subs = cri.getSubResources(); @@ -506,68 +508,129 @@ public final class ServerProviderFactory extends ProviderFactory { private class ServerConfigurationImpl implements Configuration { - private Configuration superConfig; - public ServerConfigurationImpl(Configuration superConfig) { - this.superConfig = superConfig; + public ServerConfigurationImpl() { + } @Override public Set> getClasses() { - return superConfig != null ? superConfig.getClasses() : Collections.>emptySet(); + return application != null ? application.getProvider().getClasses() + : Collections.>emptySet(); } @Override public Set getInstances() { - return superConfig != null ? superConfig.getInstances() : Collections.emptySet(); + return application != null ? application.getProvider().getSingletons() + : Collections.emptySet(); } @Override - public Map getProperties() { - return application != null ? application.getProperties() - : Collections.emptyMap(); + public boolean isEnabled(Feature f) { + return dynamicFeatures.contains(f); } @Override - public Object getProperty(String name) { - return getProperties().get(name); + public boolean isEnabled(Class featureCls) { + for (DynamicFeature f : dynamicFeatures) { + if (featureCls.isAssignableFrom(f.getClass())) { + return true; + } + } + return false; } @Override - public Collection getPropertyNames() { - return getProperties().keySet(); + public boolean isRegistered(Object o) { + return isRegistered(preMatchContainerRequestFilters, o) + || isRegistered(postMatchContainerRequestFilters.values(), o) + || isRegistered(containerResponseFilters.values(), o) + || isRegistered(readerInterceptors.values(), o) + || isRegistered(writerInterceptors.values(), o); } @Override - public RuntimeType getRuntimeType() { - return RuntimeType.SERVER; + public boolean isRegistered(Class cls) { + return isRegistered(preMatchContainerRequestFilters, cls) + || isRegistered(postMatchContainerRequestFilters.values(), cls) + || isRegistered(containerResponseFilters.values(), cls) + || isRegistered(readerInterceptors.values(), cls) + || isRegistered(writerInterceptors.values(), cls); } @Override - public boolean isEnabled(Feature f) { - return superConfig != null ? superConfig.isEnabled(f) : false; + public Map, Integer> getContracts(Class cls) { + Map, Integer> map = new HashMap, Integer>(); + if (isRegistered(cls)) { + if (ContainerRequestFilter.class.isAssignableFrom(cls)) { + boolean isPreMatch = cls.getAnnotation(PreMatching.class) != null; + map.put(ContainerRequestFilter.class, + getPriority(isPreMatch ? preMatchContainerRequestFilters + : postMatchContainerRequestFilters.values(), cls, ContainerRequestFilter.class)); + } + if (ContainerResponseFilter.class.isAssignableFrom(cls)) { + map.put(ContainerResponseFilter.class, + getPriority(containerResponseFilters.values(), cls, ContainerResponseFilter.class)); + } + if (WriterInterceptor.class.isAssignableFrom(cls)) { + map.put(WriterInterceptor.class, + getPriority(writerInterceptors.values(), cls, WriterInterceptor.class)); + } + if (ReaderInterceptor.class.isAssignableFrom(cls)) { + map.put(ReaderInterceptor.class, + getPriority(readerInterceptors.values(), cls, ReaderInterceptor.class)); + } + } + return map; } - + @Override - public boolean isEnabled(Class featureCls) { - return superConfig != null ? superConfig.isEnabled(featureCls) : false; + public Map getProperties() { + return application != null ? application.getProperties() + : Collections.emptyMap(); } @Override - public boolean isRegistered(Object o) { - return superConfig != null ? superConfig.isRegistered(o) : false; + public Object getProperty(String name) { + return getProperties().get(name); } @Override - public boolean isRegistered(Class cls) { - return superConfig != null ? superConfig.isRegistered(cls) : false; + public Collection getPropertyNames() { + return getProperties().keySet(); } @Override - public Map, Integer> getContracts(Class cls) { - return superConfig != null ? superConfig.getContracts(cls) - : Collections., Integer>emptyMap(); + public RuntimeType getRuntimeType() { + return RuntimeType.SERVER; } + private boolean isRegistered(Collection list, Object o) { + Collection> list2 = CastUtils.cast(list); + for (ProviderInfo pi : list2) { + if (pi.getProvider() == o) { + return true; + } + } + return false; + } + private boolean isRegistered(Collection list, Class cls) { + Collection> list2 = CastUtils.cast(list); + for (ProviderInfo pi : list2) { + if (cls.isAssignableFrom(pi.getProvider().getClass())) { + return true; + } + } + return false; + } + private Integer getPriority(Collection list, Class cls, Class filterClass) { + Collection> list2 = CastUtils.cast(list); + for (ProviderInfo pi : list2) { + if (pi instanceof FilterProviderInfo && pi.getProvider().getClass().isAssignableFrom(cls)) { + return ((FilterProviderInfo)pi).getPriority(filterClass); + } + } + return Priorities.USER; + } } } http://git-wip-us.apache.org/repos/asf/cxf/blob/2f14a20a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java index a655c9b..d85a26b 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java @@ -1078,7 +1078,7 @@ public final class JAXRSUtils { } else if (ContextResolver.class.isAssignableFrom(clazz)) { o = createContextResolver(genericType, contextMessage); } else if (Configuration.class.isAssignableFrom(clazz)) { - o = ProviderFactory.getInstance(contextMessage).getConfiguration(); + o = ProviderFactory.getInstance(contextMessage).getConfiguration(contextMessage); } else if (Application.class.isAssignableFrom(clazz)) { ProviderInfo providerInfo = (ProviderInfo)contextMessage.getExchange().getEndpoint().get(Application.class.getName()); http://git-wip-us.apache.org/repos/asf/cxf/blob/2f14a20a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java ---------------------------------------------------------------------- diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java index e68465f..0c2b20b 100644 --- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java +++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java @@ -25,6 +25,7 @@ import java.util.List; import javax.ws.rs.client.ClientRequestFilter; import javax.ws.rs.client.ClientResponseFilter; +import javax.ws.rs.core.Configuration; import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; @@ -43,7 +44,6 @@ public final class ClientProviderFactory extends ProviderFactory { new ArrayList>(1); private List>> responseExceptionMappers = new ArrayList>>(1); - private ClientProviderFactory(ProviderFactory baseFactory, Bus bus) { super(baseFactory, bus); @@ -82,8 +82,6 @@ public final class ClientProviderFactory extends ProviderFactory { bus.setProperty(SHARED_CLIENT_FACTORY, factory); return factory; } - - @Override protected void setProviders(Object... providers) { List> theProviders = @@ -142,5 +140,11 @@ public final class ClientProviderFactory extends ProviderFactory { public List> getClientResponseFilters() { return Collections.unmodifiableList(clientResponseFilters); } + + @Override + public Configuration getConfiguration(Message m) { + return (Configuration)m.getExchange().getOutMessage() + .getContextualProperty(Configuration.class.getName()); + } } http://git-wip-us.apache.org/repos/asf/cxf/blob/2f14a20a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java ---------------------------------------------------------------------- diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java index bdcffa0..88d7317 100644 --- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java +++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java @@ -252,9 +252,10 @@ public class ClientImpl implements Client { } pf.setUserProviders(providers); - pf.setConfiguration(getConfiguration()); WebClient.getConfig(targetClient).getRequestContext().putAll(getConfiguration().getProperties()); WebClient.getConfig(targetClient).getRequestContext().put(Client.class.getName(), ClientImpl.this); + WebClient.getConfig(targetClient).getRequestContext().put(Configuration.class.getName(), + getConfiguration()); // TLS TLSClientParameters tlsParams = secConfig.getTlsClientParams(); if (tlsParams.getSSLSocketFactory() != null http://git-wip-us.apache.org/repos/asf/cxf/blob/2f14a20a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientRequestContextImpl.java ---------------------------------------------------------------------- diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientRequestContextImpl.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientRequestContextImpl.java index 24963fb..7a3d27d 100644 --- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientRequestContextImpl.java +++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientRequestContextImpl.java @@ -66,7 +66,7 @@ public class ClientRequestContextImpl extends AbstractRequestContextImpl @Override public Configuration getConfiguration() { ClientProviderFactory cpf = ClientProviderFactory.getInstance(m); - return cpf.getConfiguration(); + return cpf.getConfiguration(m); } private Object getMessageContent() { http://git-wip-us.apache.org/repos/asf/cxf/blob/2f14a20a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java index 948922a..a70bea6 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java @@ -39,6 +39,7 @@ import javax.ws.rs.client.ClientResponseContext; import javax.ws.rs.client.ClientResponseFilter; import javax.ws.rs.client.Entity; import javax.ws.rs.client.InvocationCallback; +import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.GenericEntity; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.HttpHeaders; @@ -153,8 +154,10 @@ public class JAXRS20ClientServerBookTest extends AbstractBusClientServerTestBase String address = "http://localhost:" + PORT + "/bookstore/bookheaders/simple"; Client client = ClientBuilder.newClient(); client.register(new BookInfoReader()); - BookInfo book = client.target(address) - .request("application/xml").get(BookInfo.class); + WebTarget target = client.target(address); + BookInfo book = target.request("application/xml").get(BookInfo.class); + assertEquals(124L, book.getId()); + book = target.request("application/xml").get(BookInfo.class); assertEquals(124L, book.getId()); }