Hi Willem

I'd really prefer us discussing updates like this one to the public client API that the CXF JAX-RS runtime offers.

I can see you just added 5 or so new JAXRSClientFactory methods.
I consider most of them redundant. JAXRSClientFactory is a *utility* factory and is already a bit overloaded without these new extra 5 methods added.

JAXRSClientFactoryBean is always there to offer a more custom approach toward creating a proxy and I would like to revert most of the methods you added.

I agree it may make sense to offer say a single utility method for accepting the features, but I'd not like to have 5+ variations, the API will become too 'noisy'. Besides the same would then need to be added to WebClient factory methods...

I'll take care of updating the api

Thanks, Sergey


On 29/05/12 02:39, ningji...@apache.org wrote:
Author: ningjiang
Date: Tue May 29 01:39:02 2012
New Revision: 1343446

URL: http://svn.apache.org/viewvc?rev=1343446&view=rev
Log:
CXF-4345 Allow user-secified feautres for JAXRSClientFactory

Modified:
     
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java?rev=1343446&r1=1343445&r2=1343446&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactory.java
 Tue May 29 01:39:02 2012
@@ -26,6 +26,7 @@ import java.util.List;
  import javax.ws.rs.core.MultivaluedMap;

  import org.apache.cxf.common.util.ProxyHelper;
+import org.apache.cxf.feature.AbstractFeature;
  import org.apache.cxf.jaxrs.model.UserResource;

  /**
@@ -56,7 +57,20 @@ public final class JAXRSClientFactory {
       * @return typed proxy
       */
      public static<T>  T create(String baseAddress, Class<T>  cls, ClassLoader 
loader) {
+
+        return create(baseAddress, cls, loader, null);
+    }
+
+    /**
+     * Creates a proxy using a custom class loader
+     * @param baseAddress baseAddress
+     * @param loader class loader
+     * @param cls resource class, if not interface then a CGLIB proxy will be 
created
+     * @return typed proxy
+     */
+    public static<T>  T create(String baseAddress, Class<T>  cls, ClassLoader 
loader, List<AbstractFeature>  features) {
          JAXRSClientFactoryBean bean = getBean(baseAddress, cls, null);
+        bean.setFeatures(features);
          bean.setClassLoader(loader);
          return bean.create(cls);
      }
@@ -80,18 +94,30 @@ public final class JAXRSClientFactory {
       * @return typed proxy
       */
      public static<T>  T create(URI baseURI, Class<T>  cls, boolean 
inheritHeaders) {
-
+        return create(baseURI, cls, inheritHeaders, null);
+    }
+
+    /**
+     * Creates a proxy
+     * @param baseURI baseURI
+     * @param cls resource class, if not interface then a CGLIB proxy will be 
created
+     * @param inheritHeaders if true then existing proxy headers will be 
inherited by
+     *        subresource proxies if any
+     * @param features, the features which will be applied to the client
+     * @return typed proxy
+     */
+    public static<T>  T create(URI baseURI, Class<T>  cls, boolean inheritHeaders, 
List<AbstractFeature>  features) {
          JAXRSClientFactoryBean bean = getBean(baseURI.toString(), cls, null);
          bean.setInheritHeaders(inheritHeaders);
+        bean.setFeatures(features);
          return bean.create(cls);
-
      }

      /**
       * Creates a proxy
       * @param baseAddress baseAddress
       * @param cls resource class, if not interface then a CGLIB proxy will be 
created
-     * @param config classpath location of Spring configuration resource
+     * @param configLocation classpath location of Spring configuration 
resource
       * @return typed proxy
       */
      public static<T>  T create(String baseAddress, Class<T>  cls, String 
configLocation) {
@@ -103,9 +129,42 @@ public final class JAXRSClientFactory {
       * Creates a proxy
       * @param baseAddress baseAddress
       * @param cls resource class, if not interface then a CGLIB proxy will be 
created
+     * @param configLocation classpath location of Spring configuration 
resource
+     * @param features, the features which will be applied to the client
+     * @return typed proxy
+     */
+    public static<T>  T create(String baseAddress, Class<T>  cls, String 
configLocation,
+                               List<AbstractFeature>  features) {
+        JAXRSClientFactoryBean bean = getBean(baseAddress, cls, 
configLocation);
+        bean.setFeatures(features);
+        return bean.create(cls);
+    }
+
+    /**
+     * Creates a proxy
+     * @param baseAddress baseAddress
+     * @param cls resource class, if not interface then a CGLIB proxy will be 
created
+     *        This class is expected to have a root JAXRS Path annotation 
containing
+     *        template variables, for ex, "/path/{id1}/{id2}"
+     * @param configLocation classpath location of Spring configuration 
resource
+     * @param features, the features which will be applied to the client
+     * @param varValues values to replace root Path template variables
+     * @return typed proxy
+     */
+    public static<T>  T create(String baseAddress, Class<T>  cls, String 
configLocation,
+                               List<AbstractFeature>  features, Object... 
varValues) {
+        JAXRSClientFactoryBean bean = getBean(baseAddress, cls, 
configLocation);
+        bean.setFeatures(features);
+        return bean.create(cls, varValues);
+    }
+
+    /**
+     * Creates a proxy
+     * @param baseAddress baseAddress
+     * @param cls resource class, if not interface then a CGLIB proxy will be 
created
       *        This class is expected to have a root JAXRS Path annotation 
containing
       *        template variables, for ex, "/path/{id1}/{id2}"
-     * @param config classpath location of Spring configuration resource
+     * @param configLocation classpath location of Spring configuration 
resource
       * @param varValues values to replace root Path template variables
       * @return typed proxy
       */
@@ -136,11 +195,26 @@ public final class JAXRSClientFactory {
       * @return typed proxy
       */
      public static<T>  T create(String baseAddress, Class<T>  cls, List<?>  
providers, boolean threadSafe) {
+        return create(baseAddress, cls, providers, threadSafe, null);
+    }
+
+    /**
+     * Creates a thread safe proxy
+     * @param baseAddress baseAddress
+     * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
+     * @param providers list of providers
+     * @param threadSafe if true then a thread-safe proxy will be created
+     * @param features, the features which will be applied to the client
+     * @return typed proxy
+     */
+    public static<T>  T create(String baseAddress, Class<T>  cls, List<?>  
providers, boolean threadSafe,
+                               List<AbstractFeature>  features) {
          JAXRSClientFactoryBean bean = getBean(baseAddress, cls, null);
          bean.setProviders(providers);
          if (threadSafe) {
              bean.setInitialState(new ThreadLocalClientState(baseAddress));
          }
+        bean.setFeatures(features);
          return bean.create(cls);
      }

@@ -149,12 +223,27 @@ public final class JAXRSClientFactory {
       * @param baseAddress baseAddress
       * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
       * @param providers list of providers
-     * @param config classpath location of Spring configuration resource
+     * @param configLocation classpath location of Spring configuration 
resource
       * @return typed proxy
       */
      public static<T>  T create(String baseAddress, Class<T>  cls, List<?>  
providers, String configLocation) {
+        return create(baseAddress, cls, providers, configLocation);
+    }
+
+    /**
+     * Creates a proxy
+     * @param baseAddress baseAddress
+     * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
+     * @param providers list of providers
+     * @param configLocation classpath location of Spring configuration 
resource
+     * @param features, the features which will be applied to the client
+     * @return typed proxy
+     */
+    public static<T>  T create(String baseAddress, Class<T>  cls, List<?>  
providers, String configLocation,
+                               List<AbstractFeature>  features) {
          JAXRSClientFactoryBean bean = getBean(baseAddress, cls, 
configLocation);
          bean.setProviders(providers);
+        bean.setFeatures(features);
          return bean.create(cls);
      }

@@ -164,14 +253,30 @@ public final class JAXRSClientFactory {
       * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
       * @param username username
       * @param password password
-     * @param config classpath location of Spring configuration resource
+     * @param configLocation classpath location of Spring configuration 
resource
       * @return typed proxy
       */
      public static<T>  T create(String baseAddress, Class<T>  cls, String 
username,
                                 String password, String configLocation) {
+        return create(baseAddress, cls, username, password, configLocation);
+    }
+
+    /**
+     * Creates a proxy which will do basic authentication
+     * @param baseAddress baseAddress
+     * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
+     * @param username username
+     * @param password password
+     * @param configLocation classpath location of Spring configuration 
resource
+     * @param features, the features which will be applied to the client
+     * @return typed proxy
+     */
+    public static<T>  T create(String baseAddress, Class<T>  cls, String 
username,
+                               String password, String configLocation, 
List<AbstractFeature>  features) {
          JAXRSClientFactoryBean bean = getBean(baseAddress, cls, 
configLocation);
          bean.setUsername(username);
          bean.setPassword(password);
+        bean.setFeatures(features);
          return bean.create(cls);
      }

@@ -193,14 +298,31 @@ public final class JAXRSClientFactory {
       * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
       * @param modelRef model location
       * @param providers list of providers
+     * @param configLocation classpath location of Spring configuration 
resource
       * @return typed proxy
       */
      public static<T>  T createFromModel(String baseAddress, Class<T>  cls, 
String modelRef,
                                 List<?>  providers, String configLocation) {
+        return createFromModel(baseAddress, cls, modelRef, providers, 
configLocation, null);
+    }
+
+    /**
+     * Creates a proxy using user resource model
+     * @param baseAddress baseAddress
+     * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
+     * @param modelRef model location
+     * @param providers list of providers
+     * @param configLocation classpath location of Spring configuration 
resource
+     * @param features, the features which will be applied to the client
+     * @return typed proxy
+     */
+    public static<T>  T createFromModel(String baseAddress, Class<T>  cls, 
String modelRef,
+                               List<?>  providers, String configLocation, 
List<AbstractFeature>  features) {
          JAXRSClientFactoryBean bean = WebClient.getBean(baseAddress, 
configLocation);
          bean.setProviders(providers);
          bean.setModelRef(modelRef);
          bean.setServiceClass(cls);
+        bean.setFeatures(features);
          return bean.create(cls);
      }

@@ -215,6 +337,20 @@ public final class JAXRSClientFactory {
       */
      public static<T>  T createFromModel(String baseAddress, Class<T>  cls, 
String modelRef,
                                          List<?>  providers, boolean 
threadSafe) {
+        return createFromModel(baseAddress, cls, modelRef, providers, 
threadSafe, null);
+    }
+
+    /**
+     * Creates a thread safe proxy using user resource model
+     * @param baseAddress baseAddress
+     * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
+     * @param modelRef model location
+     * @param providers list of providers
+     * @param threadSafe if true then thread-safe proxy will be created
+     * @return typed proxy
+     */
+    public static<T>  T createFromModel(String baseAddress, Class<T>  cls, 
String modelRef,
+                                        List<?>  providers, boolean threadSafe, 
List<AbstractFeature>  features) {
          JAXRSClientFactoryBean bean = WebClient.getBean(baseAddress, null);
          bean.setProviders(providers);
          bean.setModelRef(modelRef);
@@ -222,6 +358,7 @@ public final class JAXRSClientFactory {
          if (threadSafe) {
              bean.setInitialState(new ThreadLocalClientState(baseAddress));
          }
+        bean.setFeatures(features);
          return bean.create(cls);
      }

@@ -230,6 +367,7 @@ public final class JAXRSClientFactory {
       * @param baseAddress baseAddress
       * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
       * @param modelBeans model beans
+     * @param configLocation classpath location of Spring configuration 
resource
       * @return typed proxy
       */
      public static<T>  T createFromModel(String baseAddress, Class<T>  cls, 
List<UserResource>  modelBeans,
@@ -243,15 +381,32 @@ public final class JAXRSClientFactory {
       * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
       * @param modelBeans model beans
       * @param providers list of providers
+     * @param configLocation classpath location of Spring configuration 
resource
       * @return typed proxy
       */
      public static<T>  T createFromModel(String baseAddress, Class<T>  cls, 
List<UserResource>  modelBeans,
                                 List<?>  providers, String configLocation) {
+        return createFromModel(baseAddress, cls, modelBeans, providers, 
configLocation);
+    }
+
+    /**
+     * Creates a proxy using user resource model
+     * @param baseAddress baseAddress
+     * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
+     * @param modelBeans model beans
+     * @param providers list of providers
+     * @param configLocation classpath location of Spring configuration 
resource
+     * @param features, the features which will be applied to the client
+     * @return typed proxy
+     */
+    public static<T>  T createFromModel(String baseAddress, Class<T>  cls, 
List<UserResource>  modelBeans,
+                               List<?>  providers, String configLocation, 
List<AbstractFeature>  features) {
          JAXRSClientFactoryBean bean = WebClient.getBean(baseAddress, 
configLocation);

          bean.setProviders(providers);
          bean.setModelBeans(modelBeans);
          bean.setServiceClass(cls);
+        bean.setFeatures(features);
          return bean.create(cls);
      }

@@ -275,8 +430,23 @@ public final class JAXRSClientFactory {
       * @return typed proxy
       */
      public static<T>  T fromClient(Client client, Class<T>  cls, boolean 
inheritHeaders) {
+        return fromClient(client, cls, inheritHeaders, null);
+    }
+
+    /**
+     * Creates a proxy, baseURI will be set to Client currentURI
+     * @param client Client instance
+     * @param cls proxy class, if not interface then a CGLIB proxy will be 
created
+     * @param inheritHeaders if true then existing Client headers will be 
inherited by new proxy
+     *        and subresource proxies if any
+     * @param features, the features which will be applied to the client
+     * @return typed proxy
+     */
+    public static<T>  T fromClient(Client client, Class<T>  cls, boolean 
inheritHeaders,
+                                   List<AbstractFeature>  features) {
          JAXRSClientFactoryBean bean = 
getBean(client.getCurrentURI().toString(), cls, null);
          bean.setInheritHeaders(inheritHeaders);
+        bean.setFeatures(features);

          ClientState clientState = WebClient.getClientState(client);





--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to