Axis2 ile Json Web Servisleri

Önceki yazımızda Axis2 ile, Eclipse ortamı ve Tomcat kullanarak nasıl web servis oluşturacağımızı incelemiştik. Oluşturduğumuz web servisleri bize SOAP mesajlarını XML formatında göndermektedir. Daha sonra bu XML formatındaki bilgi yorumlanarak gerekli kısımları kullanılmaktadır. Her ne kadar JAVA, C# ya da muadili başka bir programlama dili sizin için bu işlemlerin çoğunu otomatik olarak yapsa da her zaman XML yorumlama işlemi bu kadar kolay olmayabiliyor. Özellikle bazı mobil platformlarda ve script dillerinde Json objeleriyle iş yapmak çok daha kolay olabiliyor.

İşte bu yazımızın konusunu bu JSon objeleri oluşturmaktadır. Axis2 web servis framework’ü kullanılarak JSON objesi üreten web servislerinin nasıl yazılacağına bakacağız.

GereksinimlerJson Axis2

  • Axis2 Uygulaması: Axis2 ile geliştirdiğiniz bir uygulama. Hatta axis2.war bile olur. Tabi tercihimiz önceki yazımızda geliştirdiğimiz uygulama.
  • DynamicResponseHandler Modülü: İndiriniz. Bildiğiniz üzere axis2’nin çeşitli modulleri mevcut. Bu modüller size axis2’nin kullanılabilirliğini arttrıyor. Bu modül ise geri dönecek datanın ne olduğunu url üzerinden seçmemize olanak tanıyor. Böylelikle seçtiğimiz “response” tipine göre istediğimiz cevabı alabiliyoruz. Tahmin ettiğiniz gibi biz Json tipinde cevap döndürmesini isteyeceğiz
  • Jettison: En güncel versiyonunuı indirip projenizin WEB-INF/lib yoluna eklemeniz yeterli olacaktır. Bu JSon’a dönüştürme işlemi sırasında Axis2’nin kullandığı bir kütüphane.

Kurulum

Aslında kurulum sırasında yapacağımız çok fazla birşey yok. Kısaca, DynamicResponseHandler modülünü ayağa kaldıracağız ve axis2.xml dosyası içerisinde gerekli ayarlamaları yapacağız. Ardından test edip sonucumuzu göreceğiz. Şimdiden belirtmekte fayda var normal Java nesnelerinizi JSon’a dönüştürdüğünüz kadar temiz JSon objeleri beklemeyin. Sonuçta JSon’a dönüştürülecek olan XML dosyasıdır. Eğer daha önce SOAP mesajı içeren XML dosyalarını okuduysanız ne kadar temiz(!) dönüştürüleceğinide az çok tahmin edersiniz.

Modülün Kurulması

Modülümüzü indirdikten sonra, WEB-INF/modules, klasörünün altına kopyalıyoruz. Ardından axis2.xml dosyasına aşağıdaki satırı ekliyoruz. axis2.xml dosyası WEB-INF/conf klasöründe bulunuyor. Zaten addressing modülü yüklenmiş olacaktır. Tek yapmanız gereken addressing modülünün altına gerekli satırı eklemek olacaktır.

axis2.xml

...
    <!-- ================================================= -->
    <!-- Global Modules  -->
    <!-- ================================================= -->
    <!-- Comment this to disable Addressing -->
    <module ref="addressing"/>
    <!-- JSON -->
    <module ref="DynamicResponseHandler"/>
....

XML’den JSon’a

Şimdi ise sırada XML cevaplarını JSon cevaplerına dönüştürecek olan işlemcilerin tanımlanması var. Bunun için temel olarak iki sınıfı işleme dahil etmemiz gerekecek. Bunlardan ilki messageFormatter. Normal olarak bu istemciler SOAP mesajlarını XML olarak formatlamak için bulunuyorlar. Fakat biz JSon şeklinde formatlanmasını istediğimizden JSon’a ait messageFormatter sınıfını ekleyeceğiz.

axis2.xml

...
    <!-- ================================================= -->
    <!-- Message Formatter -->
    <!-- ================================================= -->
    <!--Following content type to message formatter mapping can be used to implement support for different message -->
    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
    <messageFormatters>
        ....
        <messageFormatter contentType="application/json"
                          class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/>
        ....
        </messageFormatters>
....

Bir sonra ekleyeceğim istemci ise messageBuilder. Bu da formatlanan mesajların build edilme işlemini yapıyor. Bunun içinde yine axis2.xml dosyasının içerisine aşağıdaki satırı ekliyoruz.

axis2.xml

...
    <!-- ================================================= -->
    <!-- Message Builders -->
    <!-- ================================================= -->
    <!--Following content type to builder mapping can be used to implement support for different message -->
    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
    <messageBuilders>
        ....
        <messageBuilder contentType="application/json"
                        class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/>
        ....
    </messageBuilders>
....

messageBuilder ve messageFormatter kısımlarını ayarlarken dikkat etmeniz gereken iki kısım var. Öncelikli olarak ben Badgerfish notasyonunu kullanacak şekilde ayarladım. Siz isterseniz sizin seçtiğiniz başka bir JSon notasyonu kullanabilirsiniz. İkinci dikkat etmeniz gereken kısım ise contentType değişkeninin her iki kısım içinde “application/json” olarak ayarlanmış olduğudur. Bunu kendinizin istediği bişeyde yapabilirsiniz. Fakat daha sonra servisimizi test ederken http isteğimizde contentType‘ımızı belirteceğiz.

Test

Test etmemiz gayet basit. Projemizi çalıştırdıktan sonra aşağıdaki kodlardan birini ya da sizin projenize uygun olan versiyonunu çalıştırmanız yeterli olacaktır.

Sonuç olarak ise aşağıdaki JSon objesini göreceksiniz.

End Of Line