by

RESTful Web Service pada Java menggunakan Jersey (JAX-RS 1.1)

Tutorial ini menjelaskan bagaimana caranya mengembangkan aplikasi RESTful web services pada Java menggunakan Jersey yang mengimplementasi JAX-RS, Saya menggunakan Jersey 1.11 yang menggunakan implementasi dari JAX-RS 1.1. Kamu bisa download Jersey di sini. Pada tutorial ini saya menggunakan Eclipse Indigo, Tomcat 7 dan Jersey 1.11

Seperti biasa, buat dynamic web project di eclipse, lalu copy semua library pada folder Jersey yang baru saja kamu download ke folder “/WEB-INF/lib/”. Sekarang coba buat class Hello.java seperti dibawah ini :

[java]
package com.kusandriadi.ws;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class Hello {

@GET
@Produces(MediaType.TEXT_HTML)
public String helloHtml(){
return "<html> " +
"<title>" +
"Hello Kus Andriadi :D" +
"</title>"
+ "<body><h1>" + "Hello Kus Andriadi :D" +
"</body></h1>" +
"</html> ";
}

@GET
@Produces(MediaType.TEXT_PLAIN)
public String helloText(){
return "Hello Kus Andriadi";
}

@GET
@Produces(MediaType.TEXT_XML)
public String helloXML(){
return "<?xml version=\"1.0\"?>" +
"<hello> Kus Andriadi" + "</hello>";
}
}

[/java]

Anotasi @Path(“/hello”) diatas maksudnya adalah jika ada request ke path “/hello” akan diolah oleh class ini, anotasi @GET akan menjawab request dari client (begitu juga dengan @POST, @DELETE dan @PUT jika digunakan) sesuai dengan HTTP Standard Methods. Anotasi @Produce berguna sebagai hasil respons dari server, apakah berbentuk text, xml, html, dst.

Jangan lupa untuk mendefinisikan Servlet Jersey di web.xml seperti ini :

[xml]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>HelloWS</display-name>
<servlet>
<servlet-name>Jersey</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.kusandriadi</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
[/xml]

Pada <param-value> arahkan ke package dimana class Hello tadi berasal. <url-pattern> disitu maksudnya adalah setiap url yang masuk dengan pattern “/rest/*” akan diolah oleh Servlet Jersey. Setelah selesai, mari kita membuat class Client untuk request ke class REST tadi. Buat project baru, copy semua library Jersey tadi ke project yang baru dibuat,  lalu cukup buat class main seperti dibawah ini.

[java]
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;

/**
*
* @author Kus Andriadi
*/
public class ClientWS {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);

WebResource webResource = client.resource(getURI());

//respon dari uri
System.out.println(webResource.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class).toString());

//xml
System.out.println(webResource.accept(MediaType.TEXT_XML).get(String.class).toString());

//html
System.out.println(webResource.accept(MediaType.TEXT_HTML).get(String.class).toString());

//text
System.out.println(webResource.accept(MediaType.TEXT_PLAIN).get(String.class).toString());
}

private static URI getURI() {
return UriBuilder.fromUri("http://localhost:8080/HelloWS/rest/hello").build();
}
}
[/java]

Jalankan class main tersebut, lalu akan output seperti dibawah ini :

[text]
GET http://localhost:8080/HelloWS/rest/hello returned a response status of 200 OK
<?xml version="1.0"?><hello> Kus Andriadi</hello>
<html> <title>Hello Kus Andriadi :D</title><body><h1>Hello Kus Andriadi :D</body></h1></html>
Hello Kus Andriadi
[/text]

Jika masih ada error, ulangi langkah diatas, aplikasi ini sudah saya cek seharusnya tidak ada error :D, kamu juga bisa langsung menjalankan aplikasi ini dari eclipse. Langsung saja hit ke url “http://localhost:8080/HelloWS/rest/hello”. HelloWS disitu adalah nama project saya, jadi itu tergantung nama project yang anda buat.

Regards,

Write a Comment

Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  1. Mas,
    Sebelumnya mohon maaf kalau saya salah.
    Sepengetahuan saya sebuah web service adalah suatu function/method yang disediakan oleh suatu Service Provider untuk memberikan akses apa-apa yang ada didalam Provider tersebut kepada dunia luar secara aman dan terkendali, misal data2 dan rumus2 yang dimilikinya atau services lainnya, lewat suatu Teknologi Web Service

    Web Service biasanya merupakan java class (atau dng bhs lainnya) yang di-compile dalam suatu framework web service, menjadi sebuah WSDL kemudian dipublish di Internet via url http://:?wsdl

    WS bukan merupakan aplikasi Web Interaktif sebagaimana terlihat diatas, tetapi WS sebenarnya hanyalah sebuah method/class yang dipublish via internet, jadi untuk menggunakan method tersebut, user harus membangun aplikasi dimana ada function yang berbasis WSDL tersebut

    Maka sebelum mulai bekerja dengan Web Service, WSDLdi http://:?wsdl harus dibaca dulu, karena disitu didokumentasikan secara lengkap apa2 yang harus diketahui oleh developer, termasuk nama function-nya, parameter in dan out nya, format datanya dll.

    Sekali lagi mohon maaf kalau saya salah, tetapi untuk diketahui blog anda salah satu blog yang cukup inspiring, sayang saya tadi ubek2an cari wsdl di url anda tapi tidak menemukannya, kalau boleh usul, judul diatas perlu dirubah, karena sekilas rasanya topik ini lebih banyak berceritera tentang Servlet

    Bagi mereka yang akan ingin menambah wawasan tentang WS bisa memeriksa url ini http://www.w3schools.com/webservices/default.asp sebagaimana pula saya belajar dari sini juga

    untuk Membangun framework WS dlm java
    (1) download apache axis2.war dan expand di tomcat/Jetty/JBoss atau Glassfish dll
    (2) selanjutnya download axis2 plugins for eclipse dan diexpand ke folder eclipse
    (3) ikuti tutorial axis2, sbg bahan latihan WS, compile java class apa saja asal jalan di eclipse pake axis2, tapi sebaiknya java class yang ada parameter in dan outnya, hasil compile axis2 adalah sebuah file ber-extesion .aar, pilih output folder di webbap/axis2/WEB-INF/services
    (4) aplikasi relatif client lebih mudah, gunakan IDE yang mendukung WS, delphi 7 bahkan bisa membentuk function WS secara otomatik tentunya juga IDE yang lain termasuk .NET studio

  2. REST itu menggunakan protokol HTTP untuk post/delete data pak,

    seperti yang saya contoh kan di artikel saya diatas, menggunakan request GET…

    penjelasan yang cukup komplit tentang REST bisa dibaca disini http://rest.elkstein.org/

    disitu juga dijelaskan kekurangan dan kelebihannya dibanding web service kalo gak salah…

    btw, thanks atas sharingnya 😀

  3. Mas Kus,

    Salam kenal saya baru belajar java dan tertarik dengan RESTful.
    Saya coba coding di atas tapi ada error pada syntax
    public String helloHtml
    di kata “String” dengan pesan error : “Syntax error on token “String”, @ expected”

    kira-kira penyebabnya apa ya mas?

    Terima kasih sebelumnya

    Ahmad

  4. permisi mas punya contoh sederhana kombinasi JAX-RS dan MySQL g?
    trima kasih

  5. tidak ada mas, mungkin dari contoh artikel diatas bisa di kembangkan 🙂

    terima kasih 🙂

  6. mas sulis :

    benar pengertian yg sudah anda jelaskan, tapi yg perlu di tekankan disini adalah

    REST tidak perlu menggunakan WSDL untuk mengetahui servis apa saja yg dimiliki. REST cukup menggunakan HTTP, untuk operasinya ada aturan-aturannya dengan menggunakan method GET/RETRIEVE, POST/CREATE, PUT/UPDATE, DELETE/DELETE

  7. Maaf permisi,
    saya sudah menikuti seperti di atas, tetapi saat di run on server dengan servlet tomcat, knapa gak muncul hasilnya tetapi muncul HTTP Status 404 – Not Found
    kesalahannya ada dimana ya ?

    mohon pencerahan. Terima kasih