You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Sergey Beryozkin <sb...@gmail.com> on 2012/05/29 11:00:40 UTC

Re: svn commit: r1343446

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, ningjiang@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

Re: svn commit: r1343446

Posted by Sergey Beryozkin <sb...@gmail.com>.
11 new methods have been introduced, with 3 of the existing methods made 
to loop by mistake.

I have replaced them with a single one that should catch most of the 
typical cases where setting a features is also required. Also added a 
similar WebClient factory method.

Lets chat next time before making major changes like this one.

Cheers, Sergey

On 29/05/12 10:12, Sergey Beryozkin wrote:
> By the way, Willem, if you have any specific preference on how such a
> single method would like then lets work on it, ping me here or IRC
>
> I'm thinking of having the one or max two methods which can take an
> address, class, and the list of features. JAXRSClientFactory can not
> take all the variations really - one may want then to offer a support
> for accepting in or out or both in/out interceptors, etc - hope you see
> what I mean
>
> Sergey
>
> On 29/05/12 10:00, Sergey Beryozkin wrote:
>> 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, ningjiang@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

Re: svn commit: r1343446

Posted by Sergey Beryozkin <sb...@gmail.com>.
By the way, Willem, if you have any specific preference on how such a 
single method would like then lets work on it, ping me here or IRC

I'm thinking of having the one or max two methods which can take an 
address, class, and the list of features. JAXRSClientFactory can not 
take all the variations really - one may want then to offer a support 
for accepting in or out or both in/out interceptors, etc - hope you see 
what I mean

Sergey

On 29/05/12 10:00, Sergey Beryozkin wrote:
> 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, ningjiang@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

Re: svn commit: r1343446

Posted by Sergey Beryozkin <sb...@gmail.com>.
On 29/05/12 14:07, Willem Jiang wrote:
> Hi Sergey,
>
> JAXRSClientFactory provides the static method to create the proxy or the
> client. I didn't find a better way to apply the features to all these
> method by just changing a single method.
>
> If you have a better idea, please share it with me.
>
> BTW, I just found my commit introduced a stall over follow issue, I will
> commit a patch to fix the build right way.
>
I already fixed it

As I said, JAXRSClientFactoryBean can always be used.
Having a single utility method should be enough,

Sergey

>
> On 5/29/12 5:00 PM, Sergey Beryozkin wrote:
>> 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, ningjiang@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

Re: svn commit: r1343446

Posted by Willem Jiang <wi...@gmail.com>.
Hi Sergey,

JAXRSClientFactory provides the static method to create the proxy or the 
client. I didn't find a better way to apply the features to all these 
method by just changing a single method.

If you have a better idea, please share it with me.

BTW, I just found my commit introduced a stall over follow issue, I will 
commit a patch to fix the build right way.


On 5/29/12 5:00 PM, Sergey Beryozkin wrote:
> 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, ningjiang@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);
>>
>>
>>
>
>


-- 
Willem
----------------------------------
CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
          http://jnn.javaeye.com (Chinese)
Twitter: willemjiang
Weibo: willemjiang