X

TOTD #57: Jersey Client API - simple and easy to use

Guest Author
href="http://blogs.sun.com/arungupta/entry/totd_56_simple_restful_web">TOTD
#56 explains how to create a RESTful Web service endpoint
using Jersey
and publish the resource using JSON representation. The blog entry
showed how the endpoint can be accessed from a Web browser. This style="font-weight: bold;">Tip style="font-weight: bold;">Of style="font-weight: bold;">The style="font-weight: bold;">Day explains how to
use Jersey
Client APIs
to invoke the published endpoint.



Lets get started!

  1. Create a new directory
    "./src/test/java/org/glassfish/samples"
  2. Add a test
    1. Add a template test file "AppTest.java" as shown below:

      style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
      cellpadding="2" cellspacing="2">package org.glassfish.samples;


      import junit.framework.Test;

      import junit.framework.TestCase;

      import junit.framework.TestSuite;


      /\*\*

       \* Unit test for simple App.

       \*/

      public class AppTest

          extends TestCase

      {

          /\*\*

           \* Create the test case

           \*

           \* @param testName name of the
      test case

           \*/

          public AppTest( String testName )

          {

             
      super( testName );

          }


          /\*\*

           \* @return the suite of tests
      being tested

           \*/

          public static Test suite()

          {

             
      return new TestSuite( AppTest.class );

          }


          /\*\*

           \* Rigourous Test :-)

           \*/

          public void testApp()

          {

              assertTrue(true);

          }

      }
    2. Add a new method "createResource()" as:

      style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
      cellpadding="2" cellspacing="2">    private
      WebResource createResource() {

             
      Client client = Client.create();

             
      WebResource resource =
      client.resource("http://localhost:8080/helloworld-webapp/webresources/myresource");

             
      return resource;

          }

      This code creates a default instance of Jersey Client and creates a Web
      resource from that client for the URI passed as an argument.
    3. Change the implementation of "testApp()" method as:

      style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
      cellpadding="2" cellspacing="2">       
      Greeting result = createResource().get(Greeting.class);

             
      assertTrue(result.greeting.equals("Hi there!"));

      This invokes the
      GET method on the resource by passing specific type and compares the
      returned and expected value.
    4. Add the following "imports":

      style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
      cellpadding="2" cellspacing="2">import com.sun.jersey.api.client.Client;

      import com.sun.jersey.api.client.WebResource;
    5. Copy "Greeting.java" from TOTD #56
      to "./src/test/java/org/glassfish/samples"
      directory.
  3. Run the test
    1. Deploy the endpoint as "mvn glassfish:run".
    2. Run the test as "mvn test". The following output is shown:

      style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
      cellpadding="2" cellspacing="2">~/samples/jersey/helloworld-webapp > style="font-weight: bold;">mvn test

      [INFO] Scanning for projects...

      [INFO]
      ------------------------------------------------------------------------

      [INFO] Building helloworld-webapp Jersey Webapp

      [INFO]    task-segment: [test]

      [INFO]
      ------------------------------------------------------------------------

      [INFO] [resources:resources]

      [INFO] Using default encoding to copy filtered resources.

      [INFO] [compiler:compile]

      [INFO] Nothing to compile - all classes are up to date

      [INFO] [resources:testResources]

      [INFO] Using default encoding to copy filtered resources.

      [INFO] [compiler:testCompile]

      [INFO] Compiling 1 source file to
      /Users/arungupta/samples/jersey/helloworld-webapp/target/test-classes

      [INFO] [surefire:test]

      [INFO] Surefire report directory:
      /Users/arungupta/samples/jersey/helloworld-webapp/target/surefire-reports


      -------------------------------------------------------

       T E S T S

      -------------------------------------------------------

      Running org.glassfish.samples.AppTest

      Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.587
      sec


      Results :


      Tests run: 1, Failures: 0, Errors: 0, Skipped: 0


      [INFO]
      ------------------------------------------------------------------------

      [INFO] BUILD SUCCESSFUL

      [INFO]
      ------------------------------------------------------------------------

      [INFO] Total time: 4 seconds

      [INFO] Finished at: Mon Nov 24 16:50:17 PST 2008

      [INFO] Final Memory: 18M/43M

      [INFO]
      ------------------------------------------------------------------------
  4. View request and response messages
    1. Change the implementation of "createResource()" method as
      (changes highlighted in bold):

      style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
      cellpadding="2" cellspacing="2">       
      Client client = Client.create();

             
      WebResource resource =
      client.resource("http://localhost:8080/helloworld-webapp/webresources/myresource");

              style="font-weight: bold;">resource.addFilter(new
      LoggingFilter());

             
      return resource;
    2. Running the tests as "mvn test" now shows the output,
      with request and response messages, as shown below:

      style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
      cellpadding="2" cellspacing="2">Running org.glassfish.samples.AppTest

      1 \* Out-bound request

      1 > GET
      http://localhost:8080/helloworld-webapp/webresources/myresource

      1 >

      1 < 200

      1 < X-Powered-By: Servlet/2.5

      1 < Transfer-Encoding: chunked

      1 < Content-Type: application/json

      1 < Server: GlassFish/v3

      1 < Date: Tue, 25 Nov 2008 07:07:51 GMT

      1 <

      {"greeting":"Hi there!"}

      1 \* In-bound response

      Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.074
      sec


Really easy!



Even though the APIs are used to invoke a RESTful endpoint deployed
using Jersey but are very generic and can be used to invoke any RESTful
endpoint. href="http://blogs.sun.com/sandoz/entry/jersey_client_api">Paul's
blog explain in detail on the usage. You can also see how
these APIs can be used to href="http://blog.beuchelt.org/2008/07/18/Using+Abdera+And+The+Jersey+Client+API.aspx">consume
a service hosted using Apache Abdera.



href="https://jersey.dev.java.net/source/browse/\*checkout\*/jersey/tags/jersey-1.0/api/jersey/com/sun/jersey/api/client/package-frame.html">com.sun.jersey.api.client,
href="https://jersey.dev.java.net/source/browse/\*checkout\*/jersey/tags/jersey-1.0/api/jersey/com/sun/jersey/api/client/config/package-frame.html">com.sun.jersey.api.client.config,
and href="https://jersey.dev.java.net/source/browse/\*checkout\*/jersey/tags/jersey-1.0/api/jersey/com/sun/jersey/api/client/filter/package-frame.html">com.sun.jersey.api.client.filter
packages documents all the classes that provide support for client-side
communication with HTTP-based RESTful Web services.



Technorati: totd
glassfish
v3 href="http://technorati.com/tag/embeddable">embeddable
jersey
jsr311
rest href="http://technorati.com/tag/json">json href="http://technorati.com/tag/webservices">webservices

Join the discussion

Comments ( 10 )
  • Arun Gupta's Blog Monday, December 1, 2008
    [Trackback] Lets extend the Jersey endpoint (TOTD# 56) and client (TOTD# 57) such that it can accept a POST request and then invoke it. Add a new method to "MyResource.java" from TOTD# 56 as: &nbsp;&nbsp;&nbsp; @POST &nbsp;&nbsp;&nbsp; @Consumes("application/json...
  • Arun Gupta's Blog Thursday, December 4, 2008
    [Trackback] Today Sun announces the availability of Java FX 1.0. JavaFX 1.0 is a rich client platform for creating and delivering Rich Internet Applications across all screens (desktop, browser, and mobile) of your life. It consists of the following key...
  • dizi izle Saturday, February 21, 2009

    saOL


  • &ccedil;i&ccedil;ek&ccedil;i Monday, February 23, 2009

    paylaşım için çok teşekkürler başarılar diliyorum


  • sinema izle Saturday, March 7, 2009

    thax u arun gupta


  • nikah &#351;ekeri Sunday, April 5, 2009

    thanks


  • kelebek Sunday, April 26, 2009

    thanks..


  • Arun Gupta's Blog Thursday, August 20, 2009
    [Trackback] GlassFish Monitoring allows you to monitor the state of various runtime components of the application server. This information is used to identify performance bottlenecks and tuning the system for optimal performance, to aid capacity planning, to pred...
  • vijay sharma Tuesday, April 27, 2010

    Thanks a lot for this amazing blog.

    I need HTTP authenication information to pass with this.How it will be implemented?


  • Arun Gupta Thursday, May 6, 2010

    Vijay,

    HTTP authentication with Jersey is explained at:

    http://weblogs.java.net/blog/mhadley/archive/2008/03/authentication.html


Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.