Monday, November 15, 2010

CXF Auto Redirect Feature in action

I was working today on testing some CXF JAX-RS client code against Tomcat and Jetty servers. All was going well with Tomcat : after deploying a sample.war to Tomcat and doing :

WebClient wc = WebClient.create("http://localhost:8080/sample";
// print the collection

a collection of Books was printed in the console.

However this code stopped working once I deployed a sample.war to Jetty, using a Maven Jetty plugin. I spent some good few hours debugging it before I spotted that Jetty returns HTTP 302 to a "GET /sample" request with the Location header pointing to "http://localhost:8080/sample/", note the trailing slash.

So changing the code to

WebClient wc = WebClient.create("http://localhost:8080/sample/";

made it work for both Tomcat and Jetty deployments. One other option to deal with the redirects is to use one of the WebClient methods returning JAX-RS Response rather than a typed one, and check the status and then follow the new URI if needed.

But I found the following code working nicely in the end :

WebClient wc = WebClient.create("http://localhost:8080/sample";

No comments: