Tutorial Lengkap Membuat Web Service Dengan Java

Satu yang belum pernah aku temui adalah tutorial membuat web service menggunakan java dengan database mysql. Selama ini aku mencari-cari tutorial ini, karena tidak menemukan akhirnya aku explor sana dan sini bahkan pernah putus asa. Aku yakin banyak temen-temen programmer java yang masih pemula mengalami hal yang sama. Oleh karena itu kali ini aku ingin memposting hasil risetku sendiri tentang bagaimana cara membuat web service di java untuk menampilkan database mysql.
Sebelumnya maaf buat para master java dimanapun berada, bukan ane mau pamer tapi hanya ingin share dengan temen-temen yang belum bisa. Kalau nanti ada kesalahan dan kekurangan, tidak berlebihan kiranya untuk memberikan masukan dan koreksinya :mrgreen:
OK, langsung aja.
Saat ini arah pengembangan aplikasi adalah menggunakan model SOA (service oriented application). Salah satu bentuk implementasi di tingkat dasar adalah penggunaan web service sebagai jalan untuk berkomunikasi lintas platform aplikasi. Gampangnya dengan web service, apapun aplikasinya (web, dekstop, mobile), apapun OSnya (linux, mac, solaris, windows) akan saling dapat berkomunikasi melalui bahasa xml.
Apa saja isi tutorial ini ?
1. Step by step membuat web service,
2. Script sql dari tabel yang digunakan
3. Hasil jadi dari tutorial ini dalam bentuk .war yang sudah siap digunakan atau dicoba dikomputer Anda.
Kita mulai !
Pertama adalah kebutuhannya yaotu di dalam komputer sudah terinstall database mysql, netbeans ide versi 6.5 atau 6.8, jdk 6
Kedua adalah skenarionya kita akan mempublish sebuah webservice untuk :
  1. menampilkan database karyawan
  2. mencari data karyawan berdasarkan nama
Buatlah terlebih dahulu tabel dengan nama tbl_karyawan yang susunannya seperti gambar berikut ini :

Dalam tutorial ini settingan usernya adalah :
User : user
Password : user
Host : localhost
Database : karyawan
Step 1.
Buka netbeans ide anda untuk memulai membuat project baru. Kali ini buatlah sebuah project Java Web -> Web Application

Step 2.
Kemudian klik Next dan dan beri nama project WebServices seperti gambar berikut ini. Kemudian pilih JDK 6 dan Application Servernya pilih Glassfish agar kita bisa melakukan testing pada web service yang kita buat

Step 3.
Setelah selesai maka akan tampil project baru pada editor netbeans seperti ini :

Step 4.
Kemudian buatlah pacakage untuk menyimpan class-class yang akan kita gunakan dalam webservice ini. Kita pisahkan antara package untuk util (Koneksi database helper class), model untuk merepresentasikan tabel karyawan dan service untuk web servicenya sendiri. Rancangannya adalah seperti ini :
  1. package ahsanfile.webservice berisi class tipe web service dengan nama DataKaryawan.java
  2. package ahsanfile.webservice.model berisi class Karyawan.java
  3. package ahsanfile.webservice.util berisi class Database.java, NestedExeception.java dan Warning.java
Dan pada hasil akhirnya tampil seperti gambar berikut ini, tetapi ini nanti dulu, silahkan langsung lanjut ke ke Step 5 untuk membuat WebService DataKaryawan

Step 5.
Cara membuat kelas ahsanfile.webservice.DataKaryawan
1. Pada package ahsanfile.webservice klik kanan pilin New - Web Service
2. Beri nama web service tersebut DataKaryawan kemudian
3. Pilih create from scratch

4. Kemudian klik finish dan akan tampil sebuah editor web service.
5. Pada editor tersebut tambahkan 2 buah method Operation masing masing bernama getKaryawan dengan tanpa parameter dan cariKaryawan dengan parameter bertipe String dengan nama namakaryawan
6. Hasil akhir dari editor web service adalahs sebagai berikut :

Skenarionya adalah getKaryawan untuk mengambil data di tabel tbl_karyawan semuanya dalam bentuk yang akan kita definisikan dalam class Karyawan. Kemudian cariKaryawan sama juga untuk mengambil data di tbl_karyawan tetapi dengan model pencarian berdasarkan parameter nama karyawan
Step 6.
Mendefinisikan class Karyawan. class ini berfungsi untuk merepresentasikan isi tbl_karyawan (secara sederhana) yang nantinya akan menjadi struktur xml dalam webservicenya. Pertama kita buat private atribut dari masing-masing field yang ada yaitu :
1. private int idKaryawan
2. private String namaKaryawan
3. private String alamatKaryawan
4. private String emailKaryawan
5. private String teleponKaryawan
Jangan lupa buat untuk getter dan setternya dengan cara klik kanan pada editor -> insert code -> Getter and Setter. Kemudian centang semua field. Maka getter dan setter akan dibuat oleh netbeans secara otomatis. Class Karyawan dapat dilihat berikut ini :
package ahsanfile.webservice.model;
/** * * @author ahsanfile */ public class Karyawan {
private int idKaryawan; private String namaKaryawan; private String alamatKaryawan; private String emailKaryawan; private String teleponKaryawan; private String errorMessage;
public String getAlamatKaryawan() { return alamatKaryawan; }
public void setAlamatKaryawan(String alamatKaryawan) { this.alamatKaryawan = alamatKaryawan; }
public String getEmailKaryawan() { return emailKaryawan; }
public void setEmailKaryawan(String emailKaryawan) { this.emailKaryawan = emailKaryawan; }
public int getIdKaryawan() { return idKaryawan; }
public void setIdKaryawan(int idKaryawan) { this.idKaryawan = idKaryawan; }
public String getNamaKaryawan() { return namaKaryawan; }
public void setNamaKaryawan(String namaKaryawan) { this.namaKaryawan = namaKaryawan; }
public String getTeleponKaryawan() { return teleponKaryawan; }
public void setTeleponKaryawan(String teleponKaryawan) { this.teleponKaryawan = teleponKaryawan; }
public String getErrorMessage() { return errorMessage; }
public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; }
}
Step 7.
Sampai di sini hal utama telah kita lakukan. Sekarang tinggal melengkapi method getKaryawan dan cariKaryawan pada webService DataKaryawan. Isinya adalah seperti ini :
package ahsanfile.webservice;
 import ahsanfile.webservice.util.DataBase;
import ahsanfile.webservice.model.Karyawan;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
 /**
 *
 * @author ahsanfile
 */
@WebService()
public class DataKaryawan {
 /**
 * Web service operation
 */
 @WebMethod(operationName = "getKaryawan")
 public List<Karyawan> getKaryawan() {
 List<Karyawan> lk = new ArrayList<Karyawan>();
 DataBase db = new DataBase();
 try {
 String sql = "select * from tbl_karyawan";
 PreparedStatement ps = db.getConnection().prepareStatement(sql);
 ResultSet rs = ps.executeQuery();
 while (rs.next()) {
 Karyawan karyawan = new Karyawan();
 karyawan.setErrorMessage("");
 karyawan.setIdKaryawan(rs.getInt("id_karyawan"));
 karyawan.setNamaKaryawan(rs.getString("nama_karyawan"));
 karyawan.setAlamatKaryawan(rs.getString("alamat_karyawan"));
 karyawan.setEmailKaryawan(rs.getString("email_karyawan"));
 karyawan.setTeleponKaryawan(rs.getString("telepon_karyawan"));
 lk.add(karyawan);
 }
 return lk;
 } catch (Exception e) {
 Karyawan karyawan = new Karyawan();
 karyawan.setErrorMessage(e.getMessage());
 lk.add(karyawan);
 return lk;
 } finally {
 db.closeConnection();
 db = null;
 }
 }
 /**
 * Web service operation
 */
 @WebMethod(operationName = "cariKaryawan")
 public List<Karyawan> cariKaryawan(@WebParam(name = "namKaryawan")
 final String namKaryawan) {
 List<Karyawan> lk = new ArrayList<Karyawan>();
 DataBase db = new DataBase();
 try {
 String sql = "select * from tbl_karyawan where nama_karyawan like ?";
 PreparedStatement ps = db.getConnection().prepareStatement(sql);
 ps.setString(1, "%" + namKaryawan + "%");
 ResultSet rs = ps.executeQuery();
 while (rs.next()) {
 Karyawan karyawan = new Karyawan();
 karyawan.setErrorMessage("");
 karyawan.setIdKaryawan(rs.getInt("id_karyawan"));
 karyawan.setNamaKaryawan(rs.getString("nama_karyawan"));
 karyawan.setAlamatKaryawan(rs.getString("alamat_karyawan"));
 karyawan.setEmailKaryawan(rs.getString("email_karyawan"));
 karyawan.setTeleponKaryawan(rs.getString("telepon_karyawan"));
 lk.add(karyawan);
 }
 return lk;
 } catch (Exception e) {
 Karyawan karyawan = new Karyawan();
 karyawan.setErrorMessage(e.getMessage());
 lk.add(karyawan);
 return lk;
 } finally {
 db.closeConnection();
 db = null;
 }
 }
}
Class DataBase
package ahsanfile.webservice.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 *
 * @author ahsanfile
 */
public class DataBase {
 private Connection connection;
 private String userName = "user";
 private String passWord = "user";
 private String hostName = "localhost";
 private String dbName = "karyawan";

 public DataBase() {
 try {
 DriverManager.registerDriver(new com.mysql.jdbc.Driver());
 } catch (SQLException e) {
 throw new NestedException("Error driver : " + e.getMessage(), e, 0);
 }
 try {
 connection = DriverManager.getConnection("jdbc:mysql://" + hostName + ":3306/" + dbName + "?user=" + userName + "&password=" + passWord);
 } catch (Exception e) {
 throw new NestedException("Error connection : " + e.getMessage(), e, 0);
 }
 }

 public Connection getConnection() {
 return connection;
 }

 public void closeConnection() {
 try {
 connection.close();
 } catch (Exception e) {
 throw new NestedException("Error close connection : " + e.getMessage(), e, 0);
 }
 }
}
Class NestedException
package ahsanfile.webservice.util;

import ahsanfile.webservice.util.Warning;

/**
 *
 * @author ahsanfile
 */
public class NestedException extends RuntimeException implements Warning {

 protected Exception nestedException;
 protected int issueId;
 private String _warning;

 public String getNestedMessage() {
 String nestedMessage = "";
 try {
 if (nestedException instanceof NestedException) {
 NestedException ne = (NestedException) nestedException;
 nestedMessage = nestedException.getMessage() + ne.getNestedMessage();
 } else {
 nestedMessage = nestedException.getMessage();
 }
 } catch (Exception e) {
 }
 return nestedMessage;
 }

 public NestedException(String msg, Exception e, int id) {
 super(msg);
 this.nestedException = e;
 this.issueId = id;
 _warning = msg;
 }
 public NestedException(String msg,String Warning, Exception e, int id) {
 super(msg);
 this.nestedException = e;
 this.issueId = id;
 }

 public Exception getNestedException() {
 return this.nestedException;
 }

 public int getIssue() {
 return this.issueId;
 }

 public String getWarning() {
 return _warning;
 }

 public void setWarning(String warning) {
 this._warning = warning;
 }
}
Interface Warning
package ahsanfile.webservice.util;

/**
 *
 * @author ahsanfile
 */
public interface Warning {

 public String getWarning();
}
Step 8.
Nah sampai di sini semua sudah lengkap dan diap untuk digunakan. Untuk dapat mengetes webservice yang barusan kita buat, maka pada project WebService klik kanan dan Deploy. Kemudian pada child Web Service klik kanan pada node DataKaryawan dan pilih Test Webservice. Maka jika tidak ada error akan tampil dalam browser seperti ini :

Coba klik tombol getKaryawan dan hasilnya adalah interface berupa xml yang siap untuk dikonsumsi oleh sitem kita. Seperti gambar berikut ini :

Kemudian coba masukan parameter nama pada method cariKaryawan dan klik tombol cariKaryawan. Dalam tutorial ini, saya memasukan parameter hadi dan hasil invokenya adalah seperti ini :

Sampai disini dulu share pengalaman dariku. Oh iya kalau masih ada error coba cek library mysqlnya sudah ada atau belum dan juga settingan user, host dan password pada class DataBase. Sebagai bukti tutorial ini jalan, berikut ini aku lampirkan attachment berupa .war dan sql script tabel tbl_karyawan. Silahkan download di sini Jangan lupa buang extention .ppt karena sebenarnya file tersebut adalah .tar.gz saja.