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 2014/07/01 13:26:09 UTC

git commit: Support for multiple ParamConverterProvider in 2.7.x

Repository: cxf
Updated Branches:
  refs/heads/2.7.x-fixes b27448090 -> e33448ad1


Support for multiple ParamConverterProvider in 2.7.x


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e33448ad
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e33448ad
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e33448ad

Branch: refs/heads/2.7.x-fixes
Commit: e33448ad1086c86fb510e9b2d3a24c60b35de677
Parents: b274480
Author: Sergey Beryozkin <sb...@talend.com>
Authored: Tue Jul 1 12:25:18 2014 +0100
Committer: Sergey Beryozkin <sb...@talend.com>
Committed: Tue Jul 1 12:25:18 2014 +0100

----------------------------------------------------------------------
 .../cxf/jaxrs/provider/ProviderFactory.java     | 24 ++++++++++++++------
 1 file changed, 17 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/e33448ad/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 ce44efe..090bec6 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
@@ -32,6 +32,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -131,7 +132,7 @@ public final class ProviderFactory {
     private List<ProviderInfo<ContextProvider<?>>> contextProviders = 
         new ArrayList<ProviderInfo<ContextProvider<?>>>(1);
     
-    private ParamConverterProvider newParamConverter;
+    private Set<ParamConverterProvider> newParamConverters;
     private LegacyParamConverterProvider legacyParamConverter; 
     
     private List<ProviderInfo<MessageBodyReader<?>>> jaxbReaders = 
@@ -385,14 +386,20 @@ public final class ProviderFactory {
     
     public <T> ParamConverter<T> createParameterHandler(Class<T> paramType, Annotation[] anns) {
         
-        if (newParamConverter != null) {
+        if (newParamConverters != null) {
             anns = anns != null ? anns : new Annotation[]{};
-            return newParamConverter.getConverter(paramType, paramType, anns);
+            
+            for (ParamConverterProvider newParamConverter : newParamConverters) {
+                ParamConverter<T> converter = newParamConverter.getConverter(paramType, paramType, anns);
+                if (converter != null) {
+                    return converter;
+                }
+            }
         } else if (legacyParamConverter != null) {
             return legacyParamConverter.getConverter(paramType, null, null);
-        } else {
-            return null;
-        }
+        } 
+        return null;
+        
     }
         
     @SuppressWarnings("unchecked")
@@ -811,7 +818,10 @@ public final class ProviderFactory {
             }
             
             if (ParamConverterProvider.class.isAssignableFrom(oClass)) {
-                newParamConverter = (ParamConverterProvider)o;
+                if (newParamConverters == null) {
+                    newParamConverters = new LinkedHashSet<ParamConverterProvider>();
+                }
+                newParamConverters.add((ParamConverterProvider)o);
             }
             
             if (ParameterHandler.class.isAssignableFrom(oClass)) {