JAX-RS 2.0 API does not work with a CXF specific failover feature, definitely not something I've had a chance to look into. We'd need to create a JAX-RS 2.0 Feature wrapper but what is the point of such a JAX-RS Feature can not be portable.

Consider using WebClient with FailoverFeature.

Sergey


On 10/02/16 21:57, ranadeep.sha...@gmail.com wrote:
I had tried some heavy exploration on enabling Failover feature, as per
documentation provided by Apache CXF. While the one for SOAP client works
like a charm, the other one for REST client is not so with the way I am
trying to instantiate the client. My requirement of instantiating the REST
client is via JAXRS 2.0.1 API, as shown in following sample code.NOTE : The
following endpoint URL is a valid one, except that the port number has been
switched from 8080 (working one) to 8081 (non-working one), since I need to
simulate the invocation failure retry behavior.Client client =
ClientBuilder.newClient(); WebTarget target =
client.target("http://localhost:8081/my-app/ws/ers/customers";);
Invocation.Builder builder =
target.request(MediaType.APPLICATION_JSON_TYPE); Response response =
builder.get();I have found that the Failover feature is not working when the
above last line of code is invoked.Now, here comes the interesting part. I
have found only 2 classes in cxf-rt-rs-client-3.1.0-sources.jar where the
initialization of Failover feature in a
org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean instance happens. And my
requirement is to have one of these methods (or, a similar one where
bean.setFeatures(features) is invoked ) being called.Method in
org.apache.cxf.jaxrs.client.JAXRSClientFactory class.public static  T
create(String baseAddress,                        Class cls, List<?>
providers,                       List features,
String configLocation) {    JAXRSClientFactoryBean bean =
getBean(baseAddress, cls, configLocation);    bean.setProviders(providers);
bean.setFeatures(features);    return bean.create(cls);}Method in
org.apache.cxf.jaxrs.client.WebClient class.public static WebClient
create(String baseAddress,                            List<?> providers,
List<? extends Feature> features,                           String
configLocation) {    JAXRSClientFactoryBean bean = getBean(baseAddress,
configLocation);    bean.setProviders(providers);
bean.setFeatures(features);    return bean.createWebClient();}However, when
my custom client code above is executed, neither of the above 2 methods have
been invoked. Instead, the following method in
org.apache.cxf.jaxrs.client.spec.ClientImpl is invoked.private void
initTargetClientIfNeeded() {    URI uri = this.uriBuilder.build(new
Object[0]);    if(this.targetClient == null) {        JAXRSClientFactoryBean
bean = new JAXRSClientFactoryBean();        bean.setAddress(uri.toString());
this.targetClient = bean.createWebClient();
ClientImpl.this.baseClients.add(this.targetClient);    }     else
if(!this.targetClient.getCurrentURI().equals(uri)) {
this.targetClient.to(uri.toString(), false);    } }Does this imply that
Failover Feature is NOT supported for CXF version 3.1.0 ?If so, which
upcoming version of CXF will support my above requirement ?



--
View this message in context: 
http://cxf.547215.n5.nabble.com/No-support-for-FailoverFeature-in-CXF-Rest-Client-implementation-version-3-1-0-tp5765813.html
Sent from the cxf-user mailing list archive at Nabble.com.



--
Sergey Beryozkin

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

Reply via email to