You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2013/08/12 13:21:52 UTC
svn commit: r1513105 - in /cxf/trunk/rt:
frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/
rs/client/src/main/java/org/apache/cxf/jaxrs/client/
rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/
Author: sergeyb
Date: Mon Aug 12 11:21:52 2013
New Revision: 1513105
URL: http://svn.apache.org/r1513105
Log:
[CXF-5135] Some work to avoid the duplicate registration of various providers due to Client 2.0 API making the duplication possible
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java?rev=1513105&r1=1513104&r2=1513105&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java Mon Aug 12 11:21:52 2013
@@ -31,6 +31,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -101,7 +102,7 @@ public abstract class ProviderFactory {
private List<ProviderInfo<ContextProvider<?>>> contextProviders =
new ArrayList<ProviderInfo<ContextProvider<?>>>(1);
- private List<ParamConverterProvider> newParamConverters;
+ private Set<ParamConverterProvider> newParamConverters;
// List of injected providers
private Collection<ProviderInfo<?>> injectedProviders =
@@ -496,19 +497,19 @@ public abstract class ProviderFactory {
Class<?> providerCls = ClassHelper.getRealClass(provider.getProvider());
if (MessageBodyReader.class.isAssignableFrom(providerCls)) {
- messageReaders.add((ProviderInfo<MessageBodyReader<?>>)provider);
+ addProviderToList(messageReaders, provider);
}
if (MessageBodyWriter.class.isAssignableFrom(providerCls)) {
- messageWriters.add((ProviderInfo<MessageBodyWriter<?>>)provider);
+ addProviderToList(messageWriters, provider);
}
if (ContextResolver.class.isAssignableFrom(providerCls)) {
- contextResolvers.add((ProviderInfo<ContextResolver<?>>)provider);
+ addProviderToList(contextResolvers, provider);
}
if (ContextProvider.class.isAssignableFrom(providerCls)) {
- contextProviders.add((ProviderInfo<ContextProvider<?>>)provider);
+ addProviderToList(contextProviders, provider);
}
if (filterContractSupported(provider, providerCls, ReaderInterceptor.class)) {
@@ -523,7 +524,7 @@ public abstract class ProviderFactory {
//TODO: review the possibility of ParamConverterProvider needing to have Contexts injected
Object converter = provider.getProvider();
if (newParamConverters == null) {
- newParamConverters = new LinkedList<ParamConverterProvider>();
+ newParamConverters = new LinkedHashSet<ParamConverterProvider>();
}
newParamConverters.add((ParamConverterProvider)converter);
}
@@ -545,6 +546,16 @@ public abstract class ProviderFactory {
}
}
+ protected void addProviderToList(List<?> list, ProviderInfo<?> provider) {
+ List<ProviderInfo<?>> list2 = CastUtils.cast(list);
+ for (ProviderInfo<?> pi : list2) {
+ if (pi.getProvider().getClass() == provider.getProvider().getClass()) {
+ return;
+ }
+ }
+ list2.add(provider);
+ }
+
protected void injectContextProxies(Collection<?> ... providerLists) {
for (Collection<?> list : providerLists) {
Collection<ProviderInfo<?>> l2 = CastUtils.cast(list);
@@ -1054,10 +1065,14 @@ public abstract class ProviderFactory {
protected static class NameKey {
private String name;
- private Integer bindingPriority;
- public NameKey(String name, int priority) {
+ private Integer priority;
+ private Class<?> providerCls;
+ public NameKey(String name,
+ int priority,
+ Class<?> providerCls) {
this.name = name;
- this.bindingPriority = priority;
+ this.priority = priority;
+ this.providerCls = providerCls;
}
public String getName() {
@@ -1065,11 +1080,24 @@ public abstract class ProviderFactory {
}
public Integer getPriority() {
- return bindingPriority;
+ return priority;
}
-
+
+ public boolean equals(Object o) {
+ if (!(o instanceof NameKey)) {
+ return false;
+ }
+ NameKey other = (NameKey)o;
+ return name.equals(other.name) && priority.equals(other.priority)
+ && providerCls == other.providerCls;
+ }
+
+ public int hashCode() {
+ return super.hashCode();
+ }
+
public String toString() {
- return name + ":" + bindingPriority;
+ return name + ":" + priority;
}
}
@@ -1084,7 +1112,7 @@ public abstract class ProviderFactory {
int priority = getFilterPriority(p, providerCls);
for (String name : names) {
- map.put(new NameKey(name, priority), p);
+ map.put(new NameKey(name, priority, p.getClass()), p);
}
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java?rev=1513105&r1=1513104&r2=1513105&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ServerProviderFactory.java Mon Aug 12 11:21:52 2013
@@ -24,6 +24,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -79,7 +80,7 @@ public final class ServerProviderFactory
new NameKeyMap<ProviderInfo<ContainerResponseFilter>>(false);
private RequestPreprocessor requestPreprocessor;
private ProviderInfo<Application> application;
- private List<DynamicFeature> dynamicFeatures = new LinkedList<DynamicFeature>();
+ private Set<DynamicFeature> dynamicFeatures = new LinkedHashSet<DynamicFeature>();
private Map<Class<?>, BeanParamInfo> beanParams = new HashMap<Class<?>, BeanParamInfo>();
private ProviderInfo<ContainerRequestFilter> wadlGenerator;
@@ -233,7 +234,7 @@ public final class ServerProviderFactory
if (ExceptionMapper.class.isAssignableFrom(providerCls)) {
- exceptionMappers.add((ProviderInfo<ExceptionMapper<?>>)provider);
+ addProviderToList(exceptionMappers, provider);
}
}
@@ -273,7 +274,7 @@ public final class ServerProviderFactory
wadlGenerator = p;
} else {
if (isPrematching(filter.getClass())) {
- preMatchContainerRequestFilters.add(p);
+ addProviderToList(preMatchContainerRequestFilters, p);
} else {
postMatchFilters.add(p);
}
Modified: cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java?rev=1513105&r1=1513104&r2=1513105&view=diff
==============================================================================
--- cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java (original)
+++ cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java Mon Aug 12 11:21:52 2013
@@ -84,7 +84,6 @@ public final class ClientProviderFactory
}
- @SuppressWarnings("unchecked")
@Override
protected void setProviders(Object... providers) {
List<ProviderInfo<? extends Object>> theProviders =
@@ -93,15 +92,15 @@ public final class ClientProviderFactory
for (ProviderInfo<? extends Object> provider : theProviders) {
Class<?> providerCls = ClassHelper.getRealClass(provider.getProvider());
if (filterContractSupported(provider, providerCls, ClientRequestFilter.class)) {
- clientRequestFilters.add((ProviderInfo<ClientRequestFilter>)provider);
+ addProviderToList(clientRequestFilters, provider);
}
if (filterContractSupported(provider, providerCls, ClientResponseFilter.class)) {
- clientResponseFilters.add((ProviderInfo<ClientResponseFilter>)provider);
+ addProviderToList(clientResponseFilters, provider);
}
if (ResponseExceptionMapper.class.isAssignableFrom(providerCls)) {
- responseExceptionMappers.add((ProviderInfo<ResponseExceptionMapper<?>>)provider);
+ addProviderToList(responseExceptionMappers, provider);
}
}
Collections.sort(clientRequestFilters,
Modified: cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java?rev=1513105&r1=1513104&r2=1513105&view=diff
==============================================================================
--- cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java (original)
+++ cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientImpl.java Mon Aug 12 11:21:52 2013
@@ -186,9 +186,7 @@ public class ClientImpl implements Clien
ClientImpl.this.checkClosed();
initTargetClientIfNeeded();
- // API gives options to register new providers between
- // individual requests (sigh) or on per-WebTarget basis so we have to
- // register directly on the endpoint-specific ClientFactory
+
ClientProviderFactory pf =
ClientProviderFactory.getInstance(WebClient.getConfig(targetClient).getEndpoint());
List<Object> providers = new LinkedList<Object>();
@@ -205,7 +203,6 @@ public class ClientImpl implements Clien
pf.setUserProviders(providers);
- // Collect the properties which may have been reset the requests
WebClient.getConfig(targetClient).getRequestContext().putAll(configImpl.getConfiguration().getProperties());
// start building the invocation