Web Service
Web service merupakan aplikasi yang terdiri dari sekumpulan application logic, object dan method-method yang terletak pada suatu server yang diakses menggunakan protokol HTTP dan SOAP. Tujuan dari aplikasi ini adalah untuk memudahan beberapa aplikasi atau komponennya untuk saling berhubungan dengan aplikasi lain yang tidak terikat oleh platform dan tidak terikat oleh bahasa pemrograman. Kita dapat menggunakan web service untuk keperluan data terdistibusi sehingga setiap client yang mengakses dapat memanfaatkan dengan mudah tanpa mengetahui platform dan bahasa pemrograman yang digunakan.
Kemudahan ini karena web service menggunakan format data XML dalam mendistribusikan data dari server ke client yang mengakses menggunakan protokol SOAP sehingga setiap client yang mengakses data akan terhubung dengan server seolah – olah memanggil fungsi yang ada di lokal. Pada topik ini penulis malakukan uji coba cara untuk melakukan invoke ASP.NET web service melalui java dan juga sebaliknya.
Akses Web Service Java dengan VB.NET
Instalasi Apache Axis
Apache Axis merupakan SOAP Engine dan salah satu toolkit untuk web service java. Di dalam apache axis sudah terdapat library yang digunakan untuk develop java yang akan di akses oleh client. Untuk mendapatkan apache axis bisa download di http://ws.apache.org/axis. Pada saat tulisan ini dibuat penulis menggunakan axis versi terbaru yaitu axis 1.4.
Untuk menjalankan Axis penulis menggunakan Apache Tomcat 1.5 dan untuk instalasinya apache Tomcat ikuti tinggal di ekstrak ke direktori. Jangan lupa untuk mengistal Java SDK untuk frameworknya. Setelah instalasi tomcat selesai maka selanjutnya install Apache Axis,langkahnya sebagai berikut :
1. Ekstrak file axis yang telah di download (pada saat uji coba penulis meletakkan semua hasil instalasi di direktori C:\). Setelah itu akan terbentuk file sebagai berikut :
…\DIRECTORI\axis-1_4
\docs
\lib
\sample
\webapps
\axis
2. Copy semua file library axis yang ada di dalam folder axis-1_4\lib ke dalam library tomcat. Jangan lupa untuk menambahkan file activation.jar, karena apache axis tidak menyertakan file library activation.jar. Untuk mendapatkan file activation.jar bisa cari di internet dengan cara googling dan download file tersebut kemudian letakkan di dalam library tomcat.
3. Copy folder axis di dalam folder webapp\axis ke directory C:\. Sehingga tersusun directory sebagai berikut C:\axis
4. Buat mapping path pada tomcat TOMCAT_HOME\conf\Catalina\localhost\axis.xml dan tulis script di bawah ini :
Buat file java dengan nama Hello.java dan buat scrip di bawah ini kemudian simpan :
public class Hello
{
public String getMsg(String msg)
{
return ("Heloo “ + msg + “Ini Web Service Java");
}
}
Metode JWS
Pada contoh kali ini penulis menggunakan metode JWS untuk deployment axis karena metode ini merupakan metode deployment yang paling mudah. Dengan menggunakan metode JWS, deployment web service sangat mudah hanya dengan membuat file java biasa dan simpan file tersebut di bawah folder CONTEXT_PATH/axis dan rename akhiran .java dengan .jws. Sebagai contoh file Hello.java menjadi Hello.jws dan untuk mengakses WSDL dari web service dengan url http://localhost:8080/axis/Hello.jws?WSDL. Setelah selesai lakukan uji coba dengan start Apache Tomcat dan panggil seperti contoh URL sebelumnya maka akan muncul tampilan sebagai berikut :
Gambar 1. Tampilan wsdl dari Web Service Java.
Akses Client Web Service dengan .NET
Setelah selesai sukses membuat Java Web Service sekarang kita melakukan invoke data dari client. Pada uji coba ini penulis menggunakan VB.NET untuk melakukan akses data web service. Langkah untuk mamanggil fungsi web service adalah sebagai berikut :
1. Lakukan web reference dengan melakukan discovery pada http://localhost:8080/axis/Hello.jws?wsdl
2. Gunakan script di bawah ini untuk memanggil fungsi web service
Dim ws As New jws1.HelloService
MsgBox(ws.getMsg(TextBox1.Text))
Hasilnya akan tampak pada gambar di bawah ini yang menunjukkan bahwa akses web service java dengan akses client dari VB.NET telah berhasil.
Akses Web Service .NET dengan Java
Untuk mengakses web service .NET dengan Java langkahnya tidak teralu berbeda jauh. Karena semua web service manggunakan metode yang sama untuk distribusi data yaitu XML. Ok nggak usah lama – lama lagi, mari kita mulai untuk mempraktekkan cara invoke web service .NET melalui Java. Berikut code dari .NET Web Service
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Inherits System.Web.Services.WebService
Public Function HelloWorld() As String
Return "Hello FRIENDS Ini Web Service .NET"
End Function
End Class
Pertama kita membutuhkan library untuk mendapatkan informasi SOAP dari web service .NET. Beberapa library yang kita butuhkan antara lain mail.jar, soap.jar, activation.jar dan xerces.jar. Library tersebut berfungsi sebgai SOAP engine untuk menangkap dan mengkonversi type data dari Web Service .NET. O iya, distribusi data XML Web Service sedikit berbeda dengan Web Service yang lain termasuk Web Service Java. .NET menggunakan mekanisme XMLSerializer untuk melakukan distribusi data di mana informasi yang di kirimkan melalui Web Service .NET di konversi menjadi binary. Hal ini yang membedakan Web Service .NET berbeda dengan yang lain namun memiliki keunggulan yaitu memiliki performance yang lebih tinggi dibandingkan dengan yang lain karena datanya di rubah dulu menjadi binary. Untuk itu perlu dilakukan Deserialisasi terlebih dahulu sebelum di lakukan invoke. Untuk melakukan Desirialisasi data XML berikut code program yang digunakan :
package WebServicesClient;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.*;
import org.apache.soap.*;
import org.apache.soap.messaging.*;
import javax.activation.*;
import java.io.*;
public class wsnet extends HttpServlet implements Servlet {
private URL m_url = null;
private String m_soapUri = "";
private Message m_strMsg_ = new Message ();
private Envelope m_envelope = new Envelope ();
private DataHandler m_strReturnMsg = null;
private PrintWriter out = null;
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
out = resp.getWriter();
this.m_url = new URL
("http://localhost:1684/WebSite10/Service.asmx");
try
{
out.print(GetCustomerData ());
}
catch(Exception e)
{}
}
public synchronized void setWebServiceURL (URL url)
{
this.m_url = url;
}
public synchronized URL getWebServiceURL ()
{
return this.m_url;
}
public synchronized String GetCustomerData () throws SOAPException {
String strReturn = "";
if (this.m_url == null)
{
throw new SOAPException (Constants.FAULT_CODE_CLIENT,
"URL tidak ditemukan");
}
this.m_soapUri = "http://ws.pdawir.iseng/getData";
MsgBody ourBody = new MsgBody ();
this.m_envelope.setBody (ourBody);
m_strMsg_.send (this.getWebServiceURL(),
this.m_soapUri, this.m_envelope);
try
{
this.m_strReturnMsg = this.m_strMsg_.receive();
strReturn=this.m_strReturnMsg.getContent().toString();
}
catch (Exception exception)
{
exception.printStackTrace ();
}
return strReturn;
}
}
Code di atas digunakan untuk melakukan deserialisasi data XML yang dikirimkan oleh .NET Web Service yang hasilnya berupa data dalam bentuk SOAP, seperti tampak pada gambar di bawah ini :
Hasil deserializer data xml .NET menjadi SOAP
Jika proses Deserializer berhasil maka akan tampak seperti pada gambar di atas dan siap untuk dilakukan invoke. Untuk melakukan invoke data web menggunakanan code seperti contoh di bawah ini dan hasilnya akan tampak seperti gambar di bawah
String endPoint = "http://localhost:9080/WSNET/servlet/WebServicesClient.wsnet";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endPoint));
call.setOperationName("getMsg");
call.addParameter("op1", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);
String msg = (String) call.invoke( new Object[]{""});
out.println(msg);