POJO ile Apache CXF
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 hizmetinin arayüzü doğrudan istemciye gösterilecek ve müşteri web hizmetini ç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 üzerinde oluşturacağımız hizmetin adı verilen tek bir web yöntemi olacaktır. greetings. Yöntem birstringkullanıcının adını göndereceğimiz bağımsız değişken yazın. 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 -
//HelloWorld.java
package com.tutorialspoint.cxf.pojo;
public interface HelloWorld {
String greetings(String text);
}
Arayüzün adı verilen tek bir yöntem vardır greetings. 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. Müşteri daha sonra arayacaktırgreetingssunucu nesnesinde mesaj. Öyleyse önce web servisini oluşturalım.
Web Servis Uygulaması
HelloWorld arayüz, HelloWorldImpl Apache CXF sınıfı aşağıda gösterildiği gibi -
//HelloWorldImpl.java
package com.tutorialspoint.cxf.pojo;
public class HelloWorldImpl implements HelloWorld {
@Override
public String greetings(String text) {
return "Hi " + text;
}
}
greetings yöntem bir parametre alır string yazın, bir karşılama mesajına ekler ve ortaya çıkan dizeyi arayana geri döndürür.
Ardından, sunucu uygulamasını barındırmak için yazıyoruz. HelloWorld hizmet.
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 bir yazıyor main örnekleme yöntemi.
Sunucu kullanır ServerFactoryBean CXF kitaplıkları tarafından sağlanan sınıf, HelloWorlduzak istemcilere arayüz. Böylece, ilk önceServerFactoryBean sınıfını seçin ve ardından çeşitli özelliklerini ayarlayın -
ServerFactoryBean factory = new ServerFactoryBean();
Çağrılacak hizmet sınıfını setServiceClass yöntemi factory nesne -
factory.setServiceClass(HelloWorld.class);
Fabrikamızı arayarak servisimizi aramak için URL belirledik. setAddressyöntem. Hizmetin bu URL'de yayınlanacağını unutmayın.
factory.setAddress("http://localhost:5000/Hello");
Bu durumda, hizmet katıştırılmış sunucuda dağıtılır ve 5000 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. Bunu arayarak yapılır.setServiceBean yöntemi factory burada gösterildiği gibi nesne -
factory.setServiceBean(new HelloWorldImpl());
Hizmet çekirdeği, hizmet uygulama sınıfımızın örneğine ayarlanır. Son olarak fabrikayı kendi adını vererek oluşturuyoruz.create yöntem -
factory.create();
Şimdi, fabrikayı web hizmetimizi çalıştırmak için geliştirdiğimiz için, bundan sonra bir main onu somutlaştırmak ve bir süre çalışmasını sağlamak için yöntem.
Şimdi bir yaz main örnekleme yöntemi HelloServer aşağıdaki gibi sınıf -
public static void main(String[] args) throws Exception {
new HelloServer();
System.out.println("Listening on port 5000 ...");
}
Örneklendiğinde, HelloServersınıf süresiz olarak çalışmaya devam edecek. Ü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 -
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting ...");
System.exit(0);
İçin kodun tamamı HelloServer sınıf aşağıda verilmiştir -
//HelloServer.java
//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ı, ServerFactoryBeanCXF kitaplıklarından sınıf. Şimdi bu kitaplıkları başarıyla derlemek için projemize dahil etmeliyizHelloServersınıf. KullanacağızMaven proje bağımlılıklarını kurmak için.
Maven Projesini Kurmak
Bir Maven projesi oluşturmak için komut satırı pencerenize aşağıdaki komutu yazın. Bunu bir Mac makinesinde test ettiğimizi unutmayın. Windows ve Linux kurulumları için talimatlar birkaç yerde farklılık gösterebilir.
mvn archetype:generate
Özellikler sorulduğunda, aşağıdaki değerleri girin -
Define value for property 'groupId': : com.tutorialspoint
Define value for property 'artifactId': : cxf-pojo
Define value for property 'version': 1.0-SNAPSHOT: : 1.0
Define value for property 'package': com.tutorialspoint: : com.tutorialspoint.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.xmlve ayrıca yukarıda oluşturulan Apache CXF dosyalarını maven tarafından oluşturulan yapının uygun klasörüne kopyalayın. Hazır referansınız için makinemizde oluşturduğumuz projeye ait pom.xml dosyasını aşağıda verdik.
<?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 dosyası, 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ın dahil edilmesinin hiçbir zararı yoktur.
Proje Klasör Yapısı
Sunucu ve istemci Apache CXF dosyalarını yerleştirdikten sonra makinemdeki proje klasörü yapısı, hızlı başvuru için aşağıda gösterilmiştir -
Çalışan Sunucu
Projeyi oluşturmak için komut satırı pencerenizde aşağıdaki komutu kullanın -
mvn clean install
Sunucuyu aşağıdaki komutu kullanarak başlatabilirsiniz -
mvn -Pserver
Bu, sunucuyu başlatacak ve konsolda aşağıdaki istemi göreceksiniz -
INFO: Creating Service {http://pojo.cxf.tutorialspoint.com/}HelloWorld from class com.tutorialspoint.cxf.pojo.HelloWorld
INFO: Setting the server's publish address to be http://localhost:5000/Hello
Listening on port 5000 ...
Şimdi, tarayıcı pencerenizde yayınlanan hizmetimizin URL'sini belirtin. Aşağıdaki çıktıyı göreceksiniz -
Bu, hizmetimizin bir localhost üzerinde belirtilen bağlantı noktasında çalıştığını doğrular. Belirtmediğimiz içingreetings Çağrımızda mesaj, tarayıcıya bir SOAP hata mesajı geri dönüyor.
Web hizmetinizi, seçtiğiniz bir SOAP istemcisini kullanarak daha fazla test edebilirsiniz. Burada sunucumuzu test etmek için Postman kullandık .
Çıktı burada gösterildiği gibidir -
Bunu gözlemleyin SOAP Requestelle kodlandı. İsteği gönderdikten sonra, sunucu birSOAP Response Ekran görüntüsünün alt kısmında görülen mesaj.
Buradan, CXF'in, günümüz dünyasında var olan çeşitli web teknolojilerine birleşik bir görünüm sağlarken, hem istek hem de yanıt için SOAP protokollerinin kullanımını sürdürdüğünü anlayabilirsiniz. Bu, web uygulaması geliştirmeyi büyük ölçüde basitleştirir.
Bir sonraki görevimiz, oluşturduğunuz web hizmetini kullanacak bir istemci oluşturmaktır.
İstemci Oluşturma
Sunucu uygulamasında HelloWorldweb servisimizi ortaya çıkaran arayüzdür. Web hizmetinin kendisi sadece müşteriye basit bir karşılama mesajı sağlar. Genellikle, web hizmeti arabirimi WSDL (Web Hizmetleri Açıklama Dili) kullanılarak dış dünyaya sunulur. Bu önemsiz uygulamada, web hizmetimizi doğrudan hizmet arayüzünü göstererek müşteriye sunacağız ve bu,HelloWorld.class.
Bu amaçla, CXF adı verilen bir fabrika sınıfı sağlar ClientProxyFactoryBean bu, oluşturulan fabrika örneğine istenen arabirime bağlanmamıza olanak tanır.
İlk olarak, aşağıdaki gibi bir fabrika fasulyesi örneği oluşturuyoruz -
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
Biz arıyoruz setAddressweb hizmetimizin çağrılabileceği URL'yi ayarlamak için fabrika fasulyesi örneğinde yöntem. Bizim durumumuzda, önceki adımımızda sunucuyu oluştururken kullanılan URL'yi kullanacağız -
factory.setAddress("http://localhost:5000/Hello");
Sonra biz diyoruz create yöntemi factory hizmet arayüzümüzü eklemek için örnek HelloWorld.class ona.
HelloWorld helloServer = factory.create(HelloWorld.class);
Son olarak diyoruz greetings uzak web hizmetini çağırma yöntemi.
System.out.println(helloServer.greetings(System.getProperty("user.name")));
Bu, konsolunuza bir selam mesajı yazdırır.
İstemci uygulamasının tüm kaynağı aşağıda gösterilmektedir -
//HelloClient.java
package com.tutorialspoint.cxf.pojo;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
public class HelloClient {
public static void main(String[] args) throws Exception {
ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
factory.setAddress("http://localhost:5000/Hello");
HelloWorld helloServer = factory.create(HelloWorld.class);
System.out.println(helloServer.greetings(System.getProperty("user.name")));
}
}
Çalışan İstemci
Makinenizde sunucunun hala çalıştığından emin olun. Zaman aşımına uğramışsa, aşağıdaki komutla sunucuyu yeniden başlatın -
mvn -Pserver
Konsolda aşağıdaki mesajı göreceksiniz -
Listening on port 5000 ...
Şimdi, 5 dakikaya ayarladığımız sunucu zaman aşımına uğramadan önce, başka bir komut satırı penceresi açın ve istemciyi aşağıdaki komutla başlatın -
mvn -Pclient
Komut satırında aşağıdakine benzer bir mesaj göreceksiniz -
Hi tutorialspoint
Bunu not et tutorialspointbizim kullanıcı adımızdır. Kendi adınızla bir selamlama alacaksınız.
Sonraki bölümde, CXF'yi bir JAX-WS (XML Web Hizmetleri için Apache CXF API) projesinde nasıl kullanacağımızı öğreneceğiz.