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