Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!
POJO ile Apache CXF Rehberi Türkçe - 2020
Bu bölümde, kullanıcıya bir selamlama mesajı gönderen basit bir web uygulamasının nasıl geliştirileceğini öğreneceksiniz. Bir web hizmeti projesi WSDL modelini kullanır. CXF, Apache CXF API'lerini temeldeki WSDL ile eşlemek için basit bir ön uç sağlayarak bu WSDL modelini gizlemenize olanak tanır.
Bu en basit projede, web servisinin arayüzü doğrudan istemciye gösterilecek ve müşteri web servisini çağırmak için yerel Apache CXF API'lerini kullanacaktır.
İlk önce bir web servisi oluşturacağız. Her hizmetin istemciye açık bir arabirimi vardır. Bu arayüzü basit bir Apache CXF arayüzü veya WSDL belgesi olarak yazabiliriz. Bu Apache CXF-First yaklaşımında, hizmetimizi bir Apache CXF arayüzü aracılığıyla ortaya koyacağız.
Web Hizmeti Geliştirme
Web üzerinden oluşturacağımız hizmetin selamlar adı verilen tek bir web yöntemi olacaktır. Yöntem, kullanıcının adını göndereceğimiz bir dize türü argümanı alır. Servis, arayan kişiye mesajda bulunan alınan kullanıcı adı ile bir selam mesajı gönderecektir.
Web Servis Arayüzü
Web hizmetimizin arayüzünü ortaya çıkarmak için aşağıdaki gibi bir Apache CXF arayüzü oluşturacağız -
Kod:
//HelloWorld.java
package com.tutorialspoint.cxf.pojo;
public interface HelloWorld {
String greetings(String text);
}
Arayüzde selamlar adı verilen tek bir yöntem vardır. Sunucu bu arayüzü uygulayacaktır. Önemsiz uygulamamızda, bu arayüz doğrudan müşteriye sunulur. Genellikle, bir web hizmeti uygulamasında, web hizmeti arabirimini açıklamak için WSDL kullanırsınız. Bu basit uygulamada, bu doğrudan arayüzü müşteri geliştiricisine sağlayacağız. İstemci daha sonra sunucu nesnesindeki karşılama mesajını çağırır. Öyleyse önce web servisini oluşturalım.
Web Servis Uygulaması
HelloWorld arayüzü, aşağıda gösterildiği gibi HelloWorldImpl Apache CXF sınıfında uygulanmıştır -
Kod:
//HelloWorldImpl.java
package com.tutorialspoint.cxf.pojo;
public class HelloWorldImpl implements HelloWorld {
@Override
public String greetings(String text) {
return "Hi " + text;
}
}
Greetings yöntemi, dize türünde bir parametre alır, bunu bir karşılama mesajına ekler ve sonuçta ortaya çıkan dizeyi arayana döndürür.
Ardından, HelloWorld hizmetini barındırmak için sunucu uygulamasını yazıyoruz.
Sunucu Oluşturma
Sunucu uygulaması iki bölümden oluşur -
İlk bölüm, web servisimiz için bir fabrika oluşturur ve
İkinci bölüm, onu somutlaştırmak için bir ana yöntem yazar.
Sunucu, HelloWorld arayüzümüzü uzak istemcilere göstermek için CXF kitaplıkları tarafından sağlanan ServerFactoryBean sınıfını kullanır. Bu nedenle, önce ServerFactoryBean sınıfını başlatıyoruz ve ardından çeşitli özelliklerini ayarlıyoruz -
Kod:
ServerFactoryBean factory = new ServerFactoryBean();
Factory nesnesi üzerinde setServiceClass metodunu çağırarak çağrılacak servis sınıfını ayarladık -
Kod:
factory.setServiceClass(HelloWorld.class);
Fabrikanın setAddress yöntemini arayarak servisimizi aramak için URL'yi ayarladık. Hizmetin bu URL'de yayınlanacağını unutmayın.
Kod:
factory.setAddress("http://localhost:5000/Hello");
Bu durumda, hizmet katıştırılmış sunucuya dağıtılır ve 5000 numaralı bağlantı noktasını dinleyecektir. İstediğiniz herhangi bir bağlantı noktası numarasını seçebilirsiniz.
Fabrikayı oluşturmadan önce fabrikaya servis uygulama sınıfımızı anlatmanız gerekmektedir. Bu, burada gösterildiği gibi fabrika nesnesinde setServiceBean yöntemini çağırarak yapılır -
Kod:
factory.setServiceBean(new HelloWorldImpl());
Hizmet çekirdeği, hizmet uygulama sınıfımızın örneğine ayarlanır. Son olarak, oluşturma yöntemini çağırarak fabrikayı yaratıyoruz -
Kod:
factory.create();
Şimdi, fabrikayı web hizmetimizi çalıştırmak için geliştirdiğimiz için, bundan sonra onu başlatmak ve bir süre çalışır durumda tutmak için bir ana yöntem yazacağız.
Şimdi, HelloServer sınıfını başlatmak için aşağıdaki gibi bir ana yöntem yazın -
Kod:
public static void main(String[] args) throws Exception {
new HelloServer();
System.out.println("Listening on port 5000 ...");
}
Bir kez somutlaştırıldığında, HelloServer sınıfı süresiz olarak çalışmaya devam edecektir. Üretim dağıtımları için, sunucunuzu kesinlikle sonsuza kadar çalışır durumda tutacaksınız. Mevcut durumda, önceden belirlenmiş bir süre sonra aşağıdaki gibi sunucuyu sonlandırırız -
Kod:
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting ...");
System.exit(0);
HelloServer sınıfı için kodun tamamı aşağıda verilmiştir -
Kod:
//HelloServer.java
Kod:
//HelloServer.java
package com.tutorialspoint.cxf.pojo;
import org.apache.cxf.frontend.ServerFactoryBean;
public class HelloServer {
protected HelloServer() throws Exception {
ServerFactoryBean factory = new ServerFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:5000/Hello");
factory.setServiceBean(new HelloWorldImpl());
factory.create();
}
public static void main(String[] args) throws Exception {
new HelloServer();
System.out.println("Listening on port 5000 ...");
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting ...");
System.exit(0);
}
}
Oluşturduğumuz sunucu uygulaması CXF kütüphanelerinden ServerFactoryBean sınıfını kullanmaktadır. HelloServer sınıfını başarılı bir şekilde derlemek için şimdi bu kitaplıkları projemize dahil etmeliyiz. Proje bağımlılıklarını kurmak için Maven'i kullanacağız.
Maven Projesini Kurmak
Bir Maven projesi oluşturmak için, komut satırı pencerenize aşağıdaki komutu yazın. Bunu bir Mac makinede test ettiğimizi unutmayın. Windows ve Linux kurulumları için talimatlar birkaç yerde farklılık gösterebilir.
Kod:
mvn archetype:generate
Özellikler sorulduğunda, aşağıdaki değerleri girin -
Kod:
Define value for property 'groupId': : com.turkmmo
Define value for property 'artifactId': : cxf-pojo
Define value for property 'version': 1.0-SNAPSHOT: : 1.0
Define value for property 'package': com.turkmmo: : com.turkmmo.cxf.pojo
Maven komutunun tamamlanmasının ardından, pom.xml dosyası ile birlikte mevcut klasörünüzde oluşturulan uygun klasör yapısını bulacaksınız.
Oluşturulan dizin yapısı burada gösterilmektedir -
CXF bağımlılıklarını pom.xml dosyasına ekleyeceksiniz ve ayrıca yukarıda oluşturulan Apache CXF dosyalarını maven tarafından oluşturulan yapının uygun klasörüne kopyalayacaksınız. Hazır referansınız için makinemizde oluşturduğumuz projeye ait pom.xml dosyasını aşağıda verdik.
Kod:
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint</groupId>
<artifactId>cxf-pojo</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<profiles>
<profile>
<id>server</id>
<build>
<defaultGoal>test</defaultGoal>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>
com.tutorialspoint.cxf.pojo.HelloServer
</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>client</id>
<build>
<defaultGoal>test</defaultGoal>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>
com.tutorialspoint.cxf.pojo.HelloClient
</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-features-logging</artifactId>
<version>3.3.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-simple</artifactId>
<version>3.3.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.3.0</version>
</dependency>
<!-- Jetty is needed if you're using the CXFServlet -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
Yukarıdaki pom.xml, bu projeyle ilgisi olmayan, ancak bu eğitimdeki bir sonraki projemiz için gerekli olan ek bağımlılıklar içerebilir. Her neyse, ek bağımlılıkları dahil etmenin hiçbir zararı yoktur.
