Merhaba arkadaşlar bu yazımda sizlere java programlama dilinde secure (username password ile girilen) bir web servise client olma işleminden bahsetmek istiyorum.

Bu işlemleri nerede kullanıyoruz dersek, bununda cevabı ise bankalarda yada o bilgilerin çok özel olduğu yerlerde kullanıyoruz. Güvenliğin önemli olduğu yerlerde kullanıyoruz.

Biz bu işlemi java kodu değilde onun yerine soap ui gibi bir tane arayüz kullanarak  wsdl olarak girdiğimizde aşağıdaki gibi bir tane çıktı almaktayız.

SOAP ‘un eksikliği sadece -göndericiden alıcıya- tek yönlü veri transferi gerçekleştirebiliyor olmasıdır ancak Web Servisleri “response/request” modeline ihtiyaç duymaktadır, dolayısıyla SOAP paketleri HTML paketlerinin içine gömülü olarak gönderilir.

SOAP dört ayrı kısımdan oluşmaktadır ;

1-SOAP Envelope : Mesajın içeriğini, mesajı kimin proses edeceğini ve bu mesajın opsiyonel yada zorunlu olup olmadığını içerir.

2-SOAP Encoding rules : Serializasyon mekanizmasını tanımlar.

3-SOAP RPC representation : Uzaktan prosedür çağırımı ve bunların geri dönüşlerini tanımlar.

4-Protocol binding : SOAP un HTTP içinde nasıl kullanılacağını tanımlar.

Soap Servis ile alakalı bir tane ön bilgi vermek istiyorum.

Envelope : Root

Header : Root un (Envelope) ilk alt elementi dir.Authentication (yetkilendirme), transaction management (Hareket yönetimi), payment gibi yapıların yönetimi bu blokta yapılır.

Body : Eğer header elementi yoksa body elementi envelop un yani root un ilk alt elementi olur.Web servisleri yapısında body , WS metodlarının, onların parametrelerinin ve dönüş değerlerinin konumlandırıldığı kısımdır.

Fault : Eğer Fault elementi varsa bu element Body nin içinde yer alır. Bu element hata ve statu kodunu taşımak için vardır.

Burada passwordType’ın String olduğunu görüyoruz.  Burada giriş yapabilmek için token giriyoruz.

Aşağıda Handler isminde bir tane class oluşturuyoruz ve bu handler sınıfına SOAPHandler<SOAPMessageContext>  interfacesini implament ediyoruz. Peki bu handler nedir diye soracak olursanız java da client ile server arasına girerek sürekli bir dinleme yapan ve şuan yaptığımız gibi olan servislerde clientin username ve passwordunu alarak bir token oluşturan yapıdır.

Aşağıda yer alan kodda esas işi yapan method handlerMessage methodudur. Program içeriğini dinleyip eğer client tarafında yer alan içerik handler ile serverın bağlantı kurmasına uygun bir içerik ise outBoundProperty diye tanımladığımız değişken true gelecek ve biz bir tane soap header oluşturmaya hazır duruma geleceğiz.

Burada SOAPEnvolpe dediğimiz yapı wsdl’in kök elementi olacaktır ve bizim serverlar ile bağlantımızı bu sağlayacaktır. Login ve passwordu girdikten sonra wsse denilen protokol ile şifreleyerek soap handlerın yazımının ilk aşamasını atlatmış olacağız. Bu bölüm

<wsse:Security  xmlns:wsse=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd” xmlns:wsu=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd”>

diye belirtilen bölümün yazıldığı bölümdür.

Bu kısımda ise token oluşturuyoruz ve tokenın ismini UsernameToken olarak veriyoruz.

Bu bölümde biz username ve password  girip handler kısmını  tamamlıyoruz.

Burada yer alan kısımda ise biz oluşturduğumuz tokena yeni yeni childlar ekleyerek şifremizi ve usernamemizi güvenli bir şekilde server tarafına handler aracılığı ile göndermiş oluyoruz.

Sırada bu classı çağırma bölümü var.

WebServiceClientBean dediğimiz yer servise client oluyoruz ve port dediğimiz zaman hangi porttan yayın yapıyorsak web servisin o kısmını çağırıp işlemlerimizi tamamlıyoruz

Aşağıda bu kısmın nasıl kullanılacağına dair örnek bi servis mevcut olup wsimport ile servise client olunmuştur.