Saturday, March 18, 2017

How to invoke soap service using java

Sebetulnya soap service sudah mulai ditinggalkan, karena dinilai cukup berat dan lebih lambat jika dibandingkan dengan Restfull service. Sudah banyak aplikasi-aplikasi baru yang dikembangkan dengan teknologi Restfull service dengan alasan perlu perombakan dari sisi aplikasi mereka yang mungkin akan mengeluarkan budget yang tidak sedikit tentunya.

Lalu kenapa saya ingin membahas tentang soap bukan rest? Ternyata untuk sekala enterprise, saat ini teknologi soap service masih banyak digunakan, kebanyakan penyedia aplikasi juga belum berani untuk me-migrasi atau upgrade aplikasi mereka secara teknologi yang dikarenakan keterbatasan budget dan kekhawatiran akan munculnya masalah-masalah baru.

Ada banyak cara tentunya untuk invoke soap service dengan java, bisa dengan menulis ulang setiap baris xml seperti yang terdapat di blog ini https://technology.amis.nl/2011/06/29/how-to-call-a-call-a-webservice-directly-from-java-without-webservice-library/

Tapi ternyata dengan menuliskan setiap baris xml di code java, memakan waktu yg cukup lama, belum lagi misalnya service yang akan kita invoke cukup complex. Ternyata ada cara lain yang cukup mudah yaitu dengan meng-import wsdl ke dalam java, sehingga nanti kita tinggal melakukan set dan get pada parameter yang dibutuhkan.

Untuk use case invoke soap service ini saya menggunakan contoh webeservice online yang dapat diakses di url berikut http://www.thomas-bayer.com/axis2/services/BLZService

Nah sebelum kita mulai untuk coding invoke soap service dengan java, pastikan tools yang kalian gunakan support untuk melakukan generate webservice client. Saya sendiri menggunakan Eclipse Java EE IDE for Web Developers Version: Neon.1 Release (4.6.1)

Berikut langkah demi langkah implementasinya
  1. Akses http://www.thomas-bayer.com/axis2/services/BLZService dari browser kemudian save kedalam format wsdl.
  2. Simpan wsdl tersebut kedalam folder project java
  3. Klik kanan pada wsdl kemudian pilih web service  --> generate client
  4. Set ke dalam Develop Client mode, kemudian Finish
  5. Jika berhasil maka akan terbentuk 1 package dan beberapa class java yang digenerate otomatis
  6. Buat 1 class java untuk invoke class java hasil generate sebelumnya.
Jika sudah pada tahap tersebut cukup copy and paste code dibawah ini, kemudian execute sehingga kita akan mendapatkan response dari webservice tersebut.


package test;

import com.thomas_bayer.blz.BLZService;
import com.thomas_bayer.blz.BLZServiceLocator;
import com.thomas_bayer.blz.BLZServicePortType;
import com.thomas_bayer.blz.BLZServicePortTypeProxy;
import com.thomas_bayer.blz.BLZServiceSOAP11BindingStub;
import com.thomas_bayer.blz.DetailsType;

public class BLZServiceService {
 public String getBank(String bankCode) throws Exception {
  
 try {
  BLZService service = new BLZServiceLocator();
  BLZServicePortType port = service.getBLZServiceSOAP11port_http();
  
  BLZServiceSOAP11BindingStub stub = (BLZServiceSOAP11BindingStub) port;
  stub._setProperty(stub.ENDPOINT_ADDRESS_PROPERTY, 
    "http://www.thomas-bayer.com/axis2/services/BLZService");
  
  DetailsType response = new DetailsType();
  response.setBezeichnung(bankCode);
  
  response = port.getBank(bankCode);
  System.out.println(response.getBezeichnung());
  System.out.println(response.getBic());
  System.out.println(response.getClass());
  System.out.println(response.getOrt());
  System.out.println(response.getPlz());
  
  
 } catch (Exception e) {
  // TODO: handle exception
 }
  
 return "OK";
 }
 public static void main(String[] args) throws Exception {
  String bankCode = "54030011";
  BLZServiceService a = new BLZServiceService();
  a.getBank(bankCode);
 
 }
}


Berikut hasil dari hasil execute code tersebut


Sekian guys, semoga dapat diimplementasikan di service-service lain, mungkin tidak akan selalu sama dengan contoh ini, tapi semoga bisa menjadi referensi.

Salam Coding :D

No comments:

Post a Comment