Axis2 ve Maven Uyumu

Axis2 kullanması güzel bir Web servis çatısı olsa da maven ile uyumlu çalışamıyorsa benim için çok bir anlamı olmayacaktır. Öyle düşünüyorum ki bu sadece benim için geçerli değil. Günümüzde birçok firma kendi geliştirdikleri kodları, geliştirme süreçlerini ve test süreçlerini maven döngüsüne uyumlu şekilde planlıyorlar. Tabi bunların hepsini maven hayat döngüsüne uydurmak öyle zor bir işlem değil. Fakat ne yazık ki bazı firmalar bırakın kendi süreçlerini maven hayat döngüsüne uydurmayı, her hangi bir süreç izlemekten bile uzaklar.Axis2 + Maven = Axis2m

Şunu belirteyim maven ile Axis2 web servisleri geliştirmenin temelde iki yolu var. Tabi ki de bunlardan biri kolay yolu ve biri göreceli olarak zor yolu. Kolay yolu maven için geliştirilmiş Axis2m “archetype”’ını kullanmak. Zor yolu ise kendi dinamik web projenizi Axis2’yi destekler hale getirmek. Benim tavsiyem öncelikle zor yolu görün. Zor yoldan gittiğinizde neyin ne için yapıldığını biliyorsunuz ve böylelikle Axis2m archetype’ını kullanırken hiç zorluk çekmiyorsunuz.

Gereksinimler

Çok fazla dosyaya gereksiniminiz olmayacaktır. Genel olarak Tomcat 7.0, Maven ve Axis2.war dosyasına gereksiniminiz olacaktır. Her iki durumda da web servisten AAR dosyası oluşturulacak ve Axis2 projesi üzerine yüklenecektir. Axis2 ve AAR dosyalarının nasıl yüklenmesi gerektiğine önceki yazılarımdan bakabilirsiniz.

Zor Yoldan

Zor yoldan diye başlık atmam gözünüzü korkutmasın. Temel olarak web uygulaması olarak başlayacağız, servis sınıfımızı yazacağız. Ardından servis sınıfımızı ayağa kaldıracak services.xml dosyasını yazacak ve servislerimizi içerisine tanımlayacağız. Ardından AAR olarak çıktısını alıp axis2 projesine yükleyeceğiz.

Projenin Olusturulması

Projemizi maven-archetype-webapp archetype’ını kullanarak aşağıdaki bilgilerle oluşturuyoruz.

  • Group Id: com.bahadirakin
  • Artifact Id: Axis2MavenService
  • Package: com.bahadirakin.service

Servis Sınıfının Yazılması

Önceki yazılarımdaki gibi burada da toplama işlemi yapan basit bir servis sınıfı yazalım. Bunun için öncelikle eksik olan maven klasörlerini oluşturalım. Şimdilik sadece “src/main/java” ve “src/main/webapp” yeterli olacaktır.  Şimdi ise java klasörünün içerisine SimpleService.java dosyamızı oluşturup, içerisini aşağıdaki gibi dolduralım.

package com.bahadirakin.service;

public class SimpleService {
public int add(int first, int second) {
return first + second;
}
}

Axis2 Servislerinin Hazırlanmasımaven

Öncelikle maven bağımlılıklarımızı halledelim. Maven bağımlılıklarınızı aşağıdaki kod satırlarını maven içerisine yerleştirerek halledebilirsiniz.

pom.xml

<dependencies>
        ...
<!-- Axis2 Dependencies -->
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2</artifactId>
<version>${axis2.version}</version>
</dependency>

<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-http</artifactId>
<version>${axis2.version}</version>
</dependency>

<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-local</artifactId>
<version>${axis2.version}</version>
</dependency>
    ...
</dependencies>

Ben proje genelinde “axis2.version” olarak en güncel sürümünü yani 1.6.2’yi kullandım. Eğer 1.6’dan eski bir sürüm kullanırsanız bağımlılıklarınız değişebilir.

Şimdi ise web.xml dosyamıza başlangıçta axis2 ile ilgili servlet’leri ayağa kaldırması gerektiğini söyleyelim. Bunun için aşağıdaki kod parçasını web.xml dosyamıza ekliyoruz.

web.xml

<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

Son olarak axis2 çatısının hangi web servisi oluşturacağını ve bu oluşturma işlemi sırasında hangi sınıfın hangi metodunu kullanması gerektiğini belirtmemiz gerekiyor. Bunun için öncelikle WEB-INF klasörünün altına “services/SimpleService/META-INF/ “ klasörünü oluşturuyoruz. Daha sonra ise bu klasörün altına “services.xml” dosyasını oluşturuyoruz.

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
<service name="SimpleService">
<parameter name="ServiceClass">com.bahadirakin.service.SimpleService
</parameter>
<operation name="add">
<messageReceiver />
</operation>
</service>
</serviceGroup>

Burada servis sınıfını, servis adını ve web servis olarak açacağımız metodları belirtiyoruz.  Bu işlemi de tamamladığımızda projemiz çalıştırmaya hazır hale geliyor. Projemizi Tomcat üzerine yükledikten sonra çalıştırıp aşağıdaki linke girerek servisimizi test edebiliriz.

AAR Olarak Paketleme

Projemizi AAR olarak paketlemek için öncelikle pom.xml dosyamıza aşağıdaki satırları ekliyoruz.

pom.xml

<build>
<finalName>Axis2MavenService</finalName>
<plugins>
<plugin>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-aar-maven-plugin</artifactId>
<version>1.4.1</version>
<configuration>
<servicesXmlFile>
src/main/webapp/WEB-INF/services/SimpleService/META-INF/services.xml</servicesXmlFile>
</configuration>
</plugin>
</plugins>
</build>

Buradan sonra tek yapmanız gereken aşağıdaki komutu çalıştırıp oluşan dosyayı, axis2.war uygulamasına yüklemek.

  • mvn axis2-aar:aar

Kolay Yoldan

Şimdi ise kolay yolu anlatacağım. Sonuç olarak sizde göreceksiniz ki tek farkı bizden çok daha fazla paket yüklüyor oluşu. Eğer ne yaptığınızı biliyorsanız bu paketlerin bazılarına ihtiyacınız olmayacaktır. Fakat kendinizi garantiye almak istiyorsanız fazladan eklenilen kütüphaneleri bırakmanız sorun olmayacaktır.axis2m

Öncelikle axis2 ile uyumlu olan hiçbir archetype varsayılan maven kataloglarında bulunmuyor. Bundan dolayı bize istediğimiz archetype’ı sağlayacak katalogu eklememiz gerekiyor. Bunu ister eclipse üzerinden “Window->Preferences->Maven->Add Remote Catalog” şeklinde yaparsınız isterseniz de maven’ın “%M2_HOME%/archetype-catalog.xml” üzerinden kendi elinizle eklersiniz. Bu kısmı tamamen size bırakıyorum. Buradan sonra yapmanız gereken org.axis2m ‘ye ait olan quickstart archetype’ını kullanarak projenizi yaratmaktır. Proje yaratırken aşağıdaki bilgileri kullanıyoruz.

  •  Group Id: com.bahadirakin
  • Artifact Id: Axis2ArchetypeService
  • Package: com.bahadirakin.service

Projeniz yaratılırken içerisinde bir “HelloWorld” web servisi ile yaratılacaktır. Bundan dolayı doğrudan test etme kısmına geçebiliriz. Projenizi üç türlü test edebilirsiniz. İlk olarak bizimde az önce yaptığımız gibi servlet container üzerinde çalıştırabilirsiniz. İkinci olarak isterseniz axis2 uygulaması üzerine yüklenmiş gibi çalıştırabilirsiniz. Son olarakta AAR dosyası haline getirip projenizi çalıştırabilirsiniz.

  1. Jetty Üzerinde
  2. Axis2 Üzerinde
  3. AAR Olarak
    • Komut: mvn axis2-aar:aar
    • Aldığınız AAR dosyasını Axis2 üzerine yükleyip 2. Seçenekteki link ile deneyebilirsiniz.

Sonuç

İster kolay yolu isterseniz zor yolu kullanın vardığınız nokta hep aynı oluyor. Kolay yolda kullanılan tüm eklentileri isterseniz kendi zor projenizde de kullanabilirsiniz. Ama eğer ne yaptığınızı biliyorsanız benim size tavsiyem zor yolu kullanmanızdır. Çünkü her zaman kolay yol ile gelen kütüphanelerin hepsini kullanmıyorsunuz. Tabi hangi yolu seçerseniz seçin doğrudan eclipse kullandığınız zamanki kadar kütüphaneye hiçbir zaman ulaşamıyorsunuz.

Eğer daha ayrıntılı test etmek istiyorsanız aşağıdaki komutu ve axis2 kullanarak istemci kodlarını oluşturabilirsiniz. Tabi isterseniz axis, JAX-WS(metro) gibi başka tür istemcilerde kullanabilirsiniz.

  • wsdl2java –uri http://localhost:8080/Axis2MavenService/services/SimpleService?wsdl

End Of Line