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