Apache CXF dengan POJO

Dalam bab ini, Anda akan belajar bagaimana mengembangkan aplikasi web sederhana yang mengirimkan pesan salam kepada pengguna. Proyek layanan web menggunakan model WSDL . CXF memungkinkan Anda menyembunyikan model WSDL ini dengan menyediakan antarmuka sederhana untuk memetakan Apache CXF API ke WSDL yang mendasarinya.

Dalam proyek paling sederhana ini, antarmuka layanan web akan langsung diekspos ke klien dan klien akan menggunakan Apache CXF API asli untuk memanggil layanan web.

Pertama, kami akan membuat layanan web. Setiap layanan memiliki antarmuka yang diekspos ke klien. Kami dapat menulis antarmuka ini sebagai antarmuka Apache CXF sederhana atau sebagai dokumen WSDL. Dalam pendekatan Apache CXF-First ini, kami akan mengekspos layanan kami melalui antarmuka Apache CXF.

Mengembangkan Layanan Web

Layanan yang akan kita buat di web akan memiliki metode web tunggal yang disebut greetings. Metode tersebut membutuhkan astringketik argumen di mana kami akan mengirimkan nama pengguna. Layanan akan mengirim kembali pesan salam ke pemanggil dengan nama pengguna yang diterima termasuk dalam pesan tersebut.

Antarmuka Layanan Web

Untuk mengekspos antarmuka layanan web kami, kami akan membuat antarmuka Apache CXF sebagai berikut -

//HelloWorld.java
package com.tutorialspoint.cxf.pojo;
public interface HelloWorld {
   String greetings(String text);
}

Antarmuka hanya memiliki satu metode yang dipanggil greetings. Server akan mengimplementasikan antarmuka ini. Dalam aplikasi sepele kami, antarmuka ini langsung diekspos ke klien. Biasanya, dalam aplikasi layanan web, Anda menggunakan WSDL untuk menjelaskan antarmuka layanan web. Dalam aplikasi sederhana ini, kami akan menyediakan antarmuka langsung ini ke pengembang klien. Klien kemudian akan memanggilgreetingspesan di objek server. Jadi pertama mari kita buat layanan web.

Implementasi Layanan Web

Itu HelloWorld antarmuka diterapkan di HelloWorldImpl Kelas Apache CXF seperti yang ditunjukkan di bawah ini -

//HelloWorldImpl.java
package com.tutorialspoint.cxf.pojo;
public class HelloWorldImpl implements HelloWorld {
   @Override
   public String greetings(String text) {
      return "Hi " + text;
   }
}

Itu greetings metode menerima parameter string type, menambahkannya ke pesan salam dan mengembalikan string yang dihasilkan ke pemanggil.

Selanjutnya, kami menulis aplikasi server untuk menghosting HelloWorld layanan.

Membuat Server

Aplikasi server terdiri dari dua bagian -

  • Bagian pertama membuat pabrik untuk layanan web kami, dan

  • Bagian kedua menulis a main metode untuk membuat instance itu.

Server menggunakan ServerFactoryBean kelas yang disediakan oleh perpustakaan CXF untuk mengekspos HelloWorldantarmuka ke klien jarak jauh. Jadi, pertama-tama kami membuat instanceServerFactoryBean kelas dan kemudian mengatur berbagai propertinya -

ServerFactoryBean factory = new ServerFactoryBean();

Kami mengatur kelas layanan untuk dipanggil dengan memanggil setServiceClass metode di factory objek -

factory.setServiceClass(HelloWorld.class);

Kami menetapkan URL untuk memanggil layanan kami dengan menghubungi pabrik setAddressmetode. Perhatikan bahwa layanan akan dipublikasikan di URL ini.

factory.setAddress("http://localhost:5000/Hello");

Dalam hal ini, layanan diterapkan pada server tertanam dan akan mendengarkan port 5000. Anda dapat memilih nomor port apa pun yang Anda pilih.

Sebelum membuat pabrik, Anda perlu memberi tahu pabrik tentang kelas implementasi layanan kami. Ini dilakukan dengan memanggilsetServiceBean metode di factory objek seperti yang ditunjukkan di sini -

factory.setServiceBean(new HelloWorldImpl());

Kacang layanan disetel ke instance kelas implementasi layanan kami. Akhirnya, kami membuat pabrik dengan menyebutnyacreate metode -

factory.create();

Sekarang, karena kami telah mengembangkan pabrik untuk menjalankan layanan web kami, selanjutnya kami akan menulis file main metode untuk membuat instance dan membuatnya tetap berjalan selama beberapa waktu.

Sekarang, tulis a main metode untuk membuat instance HelloServer kelas sebagai berikut -

public static void main(String[] args) throws Exception {
   new HelloServer();
   System.out.println("Listening on port 5000 ...");
}

Setelah dipakai, file HelloServerkelas akan terus berjalan tanpa batas. Untuk penerapan produksi, Anda pasti akan menjaga server Anda berjalan selamanya. Dalam situasi saat ini, kami akan menghentikan server setelah waktu yang ditentukan sebagai berikut -

Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting ...");
System.exit(0);

Seluruh kode untuk HelloServer kelas diberikan di bawah -

//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);
   }
}

Aplikasi server yang telah kami buat menggunakan ServerFactoryBeankelas dari perpustakaan CXF. Sekarang kita harus menyertakan pustaka ini dalam proyek kita agar berhasil mengkompilasiHelloServerkelas. Kami akan menggunakanMaven untuk menyiapkan dependensi proyek.

Menyiapkan Proyek Maven

Untuk membuat proyek Maven, ketik perintah berikut di jendela baris perintah Anda. Perhatikan bahwa kami telah menguji ini di mesin Mac. Untuk penginstalan Windows dan Linux, petunjuknya mungkin berbeda di beberapa tempat.

mvn archetype:generate

Ketika ditanya tentang properti, masukkan nilai berikut -

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

Setelah menyelesaikan perintah maven, Anda akan menemukan struktur folder yang sesuai dibuat di folder Anda saat ini bersama dengan file pom.xml.

Struktur direktori yang dihasilkan ditampilkan di sini -

Anda akan menambahkan dependensi CXF di file pom.xmldan juga salin file Apache CXF yang dibuat di atas ke dalam folder yang sesuai dari struktur yang dibuat maven. Untuk referensi siap Anda, kami telah memberikan di bawah file pom.xml untuk proyek yang kami buat di mesin kami.

<?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>

Pom.xml di atas mungkin menyertakan dependensi tambahan yang tidak relevan dengan proyek ini, tetapi diperlukan untuk proyek kami berikutnya dalam tutorial ini. Pokoknya tidak ada salahnya seperti memasukkan tambahan dependensi.

Struktur Folder Proyek

Struktur folder proyek di mesin saya setelah menempatkan file Apache CXF server dan klien ditampilkan di bawah ini untuk referensi cepat Anda -

Menjalankan Server

Untuk membangun proyek, gunakan perintah berikut di jendela baris perintah Anda -

mvn clean install

Anda dapat memulai server menggunakan perintah berikut -

mvn -Pserver

Ini akan memulai server dan Anda akan melihat prompt berikut di konsol -

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 ...

Sekarang, di jendela browser Anda tentukan URL dari layanan yang kami terbitkan. Anda akan melihat output berikut -

Ini menegaskan bahwa layanan kami berjalan di port yang ditentukan di localhost. Karena kami tidak menentukangreetings pesan dalam panggilan kami, pesan kesalahan SOAP dikembalikan ke browser.

Anda selanjutnya dapat menguji layanan web Anda menggunakan klien SOAP pilihan Anda. Di sini kami menggunakan Postman untuk menguji server kami.

Outputnya seperti yang ditunjukkan di sini -

Perhatikan itu SOAP Requestadalah kode tangan. Setelah memposting permintaan, server mengirim fileSOAP Response pesan, yang terlihat di bagian bawah tangkapan layar.

Dari sini, Anda dapat memahami bahwa CXF mempertahankan penggunaan protokol SOAP untuk permintaan dan respons sambil memberi Anda pandangan terpadu ke berbagai teknologi web yang ada di dunia saat ini. Ini sangat menyederhanakan pengembangan aplikasi web.

Tugas kita selanjutnya adalah membuat klien yang akan menggunakan layanan web yang telah Anda buat.

Membuat Klien

Dalam aplikasi server HelloWorldadalah antarmuka yang menampilkan layanan web kami. Layanan web itu sendiri hanya memberikan pesan ucapan biasa kepada klien. Biasanya, antarmuka layanan web diekspos ke dunia luar menggunakan WSDL (Bahasa Deskripsi Layanan Web). Dalam aplikasi sepele ini, kami akan mengekspos layanan web kami ke klien dengan mengekspos langsung antarmuka layanan dan itu adalahHelloWorld.class.

Untuk tujuan ini, CXF menyediakan kelas pabrik yang disebut ClientProxyFactoryBean yang memungkinkan kita untuk melampirkan ke antarmuka yang diinginkan ke instance pabrik yang dibuat.

Pertama, kami membuat instance kacang pabrik sebagai berikut -

ClientProxyFactoryBean factory = new ClientProxyFactoryBean();

Kami menyebutnya setAddressmetode pada instance bean pabrik untuk menyetel URL yang dengannya layanan web kami dapat dipanggil. Dalam kasus kami, kami akan menggunakan URL yang digunakan saat membuat server di langkah sebelumnya -

factory.setAddress("http://localhost:5000/Hello");

Selanjutnya, kami menyebutnya create metode di factory contoh untuk melampirkan antarmuka layanan kami HelloWorld.class untuk itu.

HelloWorld helloServer = factory.create(HelloWorld.class);

Akhirnya, kami menyebutnya greetings metode untuk memanggil layanan web jarak jauh.

System.out.println(helloServer.greetings(System.getProperty("user.name")));

Ini akan mencetak pesan salam di konsol Anda.

Seluruh sumber untuk aplikasi klien ditampilkan di bawah -

//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")));
   }
}

Menjalankan Klien

Pastikan server masih berjalan di komputer Anda. Jika waktunya habis, mulai ulang server dengan perintah berikut -

mvn -Pserver

Anda akan melihat pesan berikut di konsol -

Listening on port 5000 ...

Sekarang, sebelum waktu server habis yang telah kita setel menjadi 5 menit, buka jendela baris perintah lain dan mulai klien dengan perintah berikut -

mvn -Pclient

Anda akan melihat pesan yang mirip dengan berikut ini di baris perintah -

Hi tutorialspoint

Catat itu tutorialspointadalah nama pengguna kami. Anda akan mendapatkan salam dengan nama Anda sendiri.

Di bab berikutnya, kita akan mempelajari cara menggunakan CXF dalam proyek JAX-WS (Apache CXF API for XML Web Services).