Burak IŞIKLI

Computer scientist living in Istanbul, Turkey. Data scientist at Turkcell, Traveller, Rower, Sailor

Twitter Github Linkedin Mail

Web Service ile Sıcaklık Dönüşümü

Daha önceden blogumdaki Axis 2 Kullanılarak Web Servis Oluşturma adlı yazımda web servisin nasıl oluşturulacağını anlatmıştım. Fakat çok iyi bir örnek vermediğim için biraz havada kaldı. Şimdi anlatacağım örnekle konu tam anlamıyla oturmuş olacak. Web servislerde internette biraz araştırma yaparsanız en sık öne çıkan örnekler sıcaklık dönüşümü, para dönüşümü, kimlik sorgulama gibi hizmetler olacaktır. Bende bunlardan biri olan sıcaklık dönüşümünü java ve jsp kullanarak anlatacağım.

Yapacağımız programı iki aşamalı olarak anlatacağım. Birinci versiyonumuz için paket adımız “edu.burakkk.webservice.tempConverter.v1”. İlk önce birinci versiyonu yapalım.

TempConverter.java

package edu.burakkk.webservice.tempConverter.v1;
/*
* Web Service  
* Temp Converter  
*  
* @version 1.0 Release 1  
* @author burakkk  
*/

public class TempConverter{  
public String FahrenheitToCelsius(String Input) {  
if (!Input.isEmpty() && isNumber(Input)) {  
double result = 0;  
result = Double.parseDouble(Input);  
result = (((result) - 32) / 9) * 5;  
Input = Double.toString(result);  
return Input;  
} else {  
return "ERROR! Please enter the input number...";  
}  
}

public String CelsiusToFahrenheit(String Input) {  
if (!Input.isEmpty() && isNumber(Input)) {  
double result = 0;  
result = Double.parseDouble(Input);  
result = (((result) \* 9) / 5) + 32;  
Input = Double.toString(result);  
return Input;  
} else {  
return "ERROR! Please enter the input number...";  
}  
}

private boolean isNumber(String num) {  
try {  
Double.parseDouble(num);  
} catch (NumberFormatException nfe) {  
return false;  
}  
return true;  
}  
}

Aslında yaptığımız programı bu şekilde kullanmak doğru olmaz. Çünkü her metodu çağırmak için ayrı bir fçıktır. İşte bu işlemi bu şekilde iki ayrı metoda bölerek rahatlıkla yapabiliriz. Özel olan metoda önce kullanıcı üye mi değil mi diye üyelik testi yaptırırız. Bu sebeple de sınıfımıza private olan ayrı bir metod daha ekleriz. Bu private metod, gelen kullanıcının üye olup olmadığını kontrol eder. Örneğin boolean türünde olursa true sonuç döndürürse istediğimiz webservisin sonucunu döndürürüz aksi takdirde üye olmadığına dair hata sonucunu döndürürüz.

Bu prosesimizi(web servisimizi) kullanacağımız zaman yani çağırmak için olan prosesimizi yapalım. Aslında bunu bir web sayfası olarak JSP ile yapacağız. Ancak daha öncedende anlattığım gibi web servis genel bir konsept olduğu için her programlama dilinde yapmak mümkündür. Ben sadece örnek olarak JSP kullanacağım.

TempConverter.v1.jsp

<form
action='http://localhost:8080/WebService/services/TempConverter/FahrenheitToCelsius'  
method="post" target="_blank">

  ------------------------ --------------------------------------------
  Fahrenheit to Celsius:   <input type="text" size="30" name="Input">
                           <input type="submit" value="Convert">
  ------------------------ --------------------------------------------

</form>
<form
action='http://localhost:8080/WebService/services/TempConverter/CelsiusToFahrenheit'  
method="post" target="_blank">

  ------------------------ --------------------------------------------
  Celsius to Fahrenheit:   <input type="text" size="30" name="Input">
                           <input type="submit" value="Convert">
  ------------------------ --------------------------------------------

</form>

Ekran Görüntüsü:

Result

Sayfamızı çalıştırdığımızda yukarıdaki gibi bir ekran karşımıza gelecektir. Buraya fahrenheit olarak veya celcius olarak çevirmek istediğimiz rakamı girip convert butonuna bastığımızda karşımıza sonuç gelecektir. Ancak web servis bir xml tabanlı olduğu için sonucumuz da xml formatında gelecektir.

Programımızın ikinci aşamasına gelelim. İkinci programımızın paket adı “edu.burakkk.webservice.tempConverter.v2”dır. Web servisimizi yaratalım.

TempConverter.java

package edu.burakkk.webservice.tempConverter.v2;

/*
* Web Service  
* Temp Converter  
*  
*@version 1.1 Release 1  
*@author Burak ISIKLI  
*  
*/

public class TempConverter {  
public String Convert(String type, String Input) {  
if (Input.isEmpty() || !isNumber(Input)) {  
return "ERROR! Please enter the input number...";  
}  
// Fahrenheit To Celsius  
if (type.equals("F")) {  
double result = 0;  
result = Double.parseDouble(Input);  
result = (((result) - 32) / 9) * 5;  
Input = Double.toString(result);  
return Input;  
}  
// Celsius To Fahrenheit  
else if (type.equals("C")) {  
double result = 0;  
result = Double.parseDouble(Input);  
result = (((result) \* 9) / 5) + 32;  
Input = Double.toString(result);  
return Input;  
}  
return "ERROR! Please enter the input number...";

}

private boolean isNumber(String num) {  
try {  
Double.parseDouble(num);  
} catch (NumberFormatException nfe) {  
return false;  
}  
return true;  
}  
}

Bu prosesimiz bir öncekinden biraz daha farklı oldu. Bu prosesimizde tek fonksiyonda olayı çözdük. Ancak fahrenheit mı celcius mu olduğunu kısaca hangi tür olduğunu kullancıdan başkan bir değişken isteyerek yaptık. Bu istediğimiz değişkeni formda belirleyerek programa derdimizi anlattık. Böylelikle tek hamlede istediğimiz web servisi yapmış olduk. Aslında benim yaptığım hata döndürme olaylarını da web tarafında yapmak daha doğru olur. Basit bir örnek vermek istediğim için detaylı incelemedim. Formda javascriptle gerekli eklemeler yapılarak hatta ajax kullanılarak çok daha kullanışlı bir sayfa yapmak mümkün olabilir.

TempConverter.v1.1.jsp

<form
action='http://localhost:8080/WebService/services/TempConverter/Convert'  
method="post">

  ----------------------------------------------------------------------
  Enter the input number: <input type="text" size="30" name="Input">

  <input type="radio" name="type" value="F"></input> Fahrenheit  
 <input type="radio" name="type" value="C" checked></input> Celsius

  <input type="submit" value="Convert" <br></input> class="button"> 
  ----------------------------------------------------------------------

</form>

Ekran Görüntüsü:

Result-245 Celcius’u Fahrenheit’e çevirmek istediğimizde karşımıza gelen ekran şu şekilde olacaktır.

Ekran Görüntüsü:

Result-3


Comments !