16 Aug

Eclipse ile WSDL Oluşturma

Web servis ile uğraşırken, en çok sıkıntı yaratan şey WSDL oluşturmak sanırım. En yalın hali ile XML den ibaret bir dosya olmasına rağmen , çok fazla ayrıntı olması bu işi zorlaştırıyor.

Ama,WSDL dosyasını HTML gibi , gerekli etiketleri kullanarak, bir yazı editörü ile oluşturabilmek de mümkün. Biz kolay yöntemi kullanarak , Eclipse yardımı ile WSDL dosyasını oluşturacağız.

Eclipse ile WSDL dosyasını oluşturabilmek için, yeni bir proje açarak veya var olan proje içerisinde
File -> New -> Other adımlarını takip ettiğimizde, karşımıza çıkan pencerede bulunan Web Services başlığı altındaki, WSDL File seçip “Next”e tıklayarak bir diğer adıma geçin.

Bu adımda WSDL dosyamıza bir ad vererek bir diğer adıma geçin.

Bu adımda bulunan “Target namespace” yazan alana, benzersiz bir url yazın (örnek için var olan kayıdı değiştirmeseniz de olur)

“Prefix” alanına da herhangi birşey yazabilirsiniz , örneğin “tns” yerine “orn” yazabilirsiniz.
Buradaki “Create WSDL skeleton” seçeneğinde bulunan işareti kaldırın, çünkü bize örnek bir WSDL oluşturmasını istemiyoruz, kendimiz sıfırdan oluşturacağız.

Bu işlemden sonra “Finish”e tıkladığımızda, bir kaç satır koddan oluşan bir sayfa gelir karşımıza. Bu sayfa “Source” ve “Design” olmak üzere iki bölüm vardır. Biz “Design” bölümünü kullanacağız, burası görsel olarak WSDL’i oluşturabileceğimiz bölümdür.

WSDL oluşturmaya geçmeden önce, web servisimizin ne olacağını ve ne görev yapacağını belirlemeliyiz. Böylece WSDL’imizi de bu yapılacak işlere göre oluşturacağız.

Web servisimiz bir stok servisi olsun, urun stok durumunu kontrol edebilen ve stoğu listeleyebilen , ürünün stok durumunu gösterebilen bir servisimiz olsun. Bu web servisde kullanılacak sınıfımız da aşağıdaki gibi olsun :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class StokYanit {
   public $mesaj;
   public $kod;
   public function __construct($mesaj,$kod){
      $this->mesaj=$mesaj;
      $this->kod=$kod;
   }
}
class Urun {
   public $id;
   public $ad;
   public $renk;
   
   public function __construct($id,$ad,$renk){
      $this->id=$id;
      $this->ad=$ad;
      $this->renk=$renk;
   }
}

class Stok {
   public function liste(){}
   public function kontrolEt(Urun $urun){
      return new StokYanit($urun->ad.' ürünüden x adet kalmıştır',100);
   }
}

Yukarıdaki kod sadece sistemin işleyişini anlatabilmek için oluşturuldu. Şimdi geçelim bu stok servisimizin WSDL’ini oluşturmaya.
Az önce bahsettiğim gibi , “Design” bölümünü kullanacağız. Design bölümüne tıkladığımızda karşımıza boş bir sayfa çıkacaktır. Bu sayfada bir alana sağ tıklayalım :

– Add Service
– Add Binding
– Add PortType

ve daha birkaç seçeneğin de olduğu bir menü çıkar. Bu menüden bu üç seçeneği yazdım, çünkü en çok kullanacağımız seçenekler bunlar.

Şimdi , yukarıdaki Class’ın WSDL’imizde karşılığını oluşturacağız. Böylece web servisimizi kullanarak sistemimizde stok işlemeleri yapılabilecek.

Add PortType bir port ekler, burada servisin yapısını oluşturmamızı sağlar (Bizim örneğimizde IStok, bu adlandırmayı rastgele yaptım) .

Add Service ile bir servis oluşturulur, servis çağrısının yapılacağı konumu belirtmemizi sağlar (endpointURI burada tanımlanır)

Add Binging ile de Service ve PortType arasında bağ kurulması sağlayan “Binding” nesnesi oluşturulur.

Burda en önemli ve en karmaşık olan bölüm “Add PortType”. Çünkü bu seçenek ile servisimizin yapısını oluştururuz.

Buraya kadar anlattıklarımı video olarak aşağıda bulabilirsiniz. Tek tek resim ekleyerek anlatmak uzun ve zor olacağından böyle bir yöntem seçtim. Yalnız ses problemini aşamadığım için videoda ses yok.

Videoyu izlemeye geçmeden önce yukarıda bulunan kodlardaki “Class”lara iyi bakın, çünkü WSDL de bu yapıyı kuracağız.

Eclipse ile WSDL oluşturma from Ersin DOĞAN on Vimeo.

Konu ile ilgili daha fazla bilgi vermek gerek, yalnız ayrıntı fazla olduğu için , konuyu dağıtmadan nasıl tamamlayabileceğimi bilemediğim için, yazıyı burada kesiyorum. Aklınıza takılan şeyleri burda yorum olarak yazarsanız, konun devamını yorumlardan sürdürebiliriz.

Güzel günler dileği ile.

24 Apr

WSDL’i nasıl okuyabiliriz

Bir WSDL dosyasının nasıl oluşturulabileceğine dair bir örnek vermek istiyordum, ama önce bir WSDL dosyasını okumayı göstermek daha iyi olur diye düşündüm.
Kendi oluşturduğum, oldukça basit bir WSDL dosyasını sizinle paylaşacağım ve bu WSDL yardımı ile konu üzerinde fikir edindirmeye çalışacağım. Ayrıca önceki yazıyı okuyarak bir fikir sahibi olabilirsiniz.

WSDL dosyamızı oluşturabilmek için Eclipse kullandım. Eclipse gerçekten çok başarılı bir geliştirme ortamı sunuyor. Hangi aracı kullanır iseniz kullanın, bilgisayarınızda mutlaka Eclipse bulundurun.

Şimdi geçelim WSDL dosyamıza. Aşağıdaki resimde görülebileceği gibi çok basit bir WSDL oluşturduk ( WSDL oluşturmaya daha sonra değineceğim )

Buradaki web servis çok basit . EchoTest adında bir metodu mevcut. Bu metod string tipinde ad,soyad ve mesaj diye parametreler almakta ve birde string tipinde sonuç döndürmekte. Bütün bunları Eclipse yardımı ile görebiliyoruz.

Adım adım gidersek :

İlk önce WSDL dosyamızı Eclipse ile açtık (Eclipse’in WSDL editor desteği olmalı veya sonradan aktif edilmelidir). Dosyayı açtığımızda yukarıdaki gibi bir yapı ile karşılaşırız.

Burada birçok alan mevcut, eğer başka bir WSDL açarsanız muhtemelen çok daha fazla alan ile karşılaşacaksınızdır.

NewPort yazan alanın altındaki değer, servis çağrılarının yapılacağı adrestir (EndpointURI) . Yani yaptığınız her SOAP çağrısı bu adrese yapılır.

TestServisi yazan alan servisimizin kendisidir.

EchoTest servisimize ait bir metoddur. Burada input ve output alanları görmekteyiz.

İnput alanı metodun aldığı parametreleri ve parametre tiplerini tutar.
Output ise metodun döndüreceği sonucu ve tipini tutar.

Bu servisin çağrımı aşağıdaki gibi olur

1
2
$istemci=new SoapClient('test.wsdl'); // böyle bir wsdlimiz olduğunu varsayıyorum
echo $istemci->EchoTest('Ersin','DOGAN','Merhaba Dunya');

Servisin çalışan şeklini burada göstermek istiyordum, ama hosting firmamın anlamadığım bir stratejisinden dolayı SOAP devredışı bırakılmış. Bu yüzden örneğin çalışabilir halini burada veremiyorum.

Son olarak bu servisin sunucu tarafını vererek noktalayalım :

1
2
3
4
5
6
7
8
class TestServisi {
   public function EchoTest($ad,$soyad,$mesaj){
      return 'Merhaba '.$ad.' '.$soyad.' Mesajınız: '.$mesaj.' alındı';
   }
}
$server=new SoapServer('test.wsdl');
$server->setClass('TestServisi');
$server->handle();

Sunucu tarafında da istemci tarafında da aynı wsdl kullanılır. Çünkü wsdl’in temel amacı budur. Yani ortak bir yapı kurarak servisler arası iletişimi sağlamak.

İstemci wsdl dosyasına bakarak hangi metodu nasıl , ne parametreler ile çağıracağını ne sonuç döneceğini bilir.
Sunucu ise hangi servisi çalıştıracağını ve ne sonuç döndüreceğini wsdl yardımı ile bilir.

Bu konuda yazacağım şimdilik bu kadar. Anlaşılmaz , eksik veya hatalı yer var ise yorum düşebilirseniz ilgilenirim.

Güzel günler dileği ile.

Not : WSDL dosyasına buradan ulaşabilirsiniz.