POJO के साथ अपाचे CXF

इस अध्याय में, आप सीखेंगे कि एक सरल वेब एप्लिकेशन कैसे विकसित किया जाए जो उपयोगकर्ता को शुभकामना संदेश भेजता है। एक वेब सेवा परियोजना WSDL मॉडल का उपयोग करती है । सीएक्सएफ आपको इस डब्ल्यूएसडीएल मॉडल को छिपाने के लिए अनुमति देता है ताकि अपाचे सीएक्सएफ एपीआई को अंतर्निहित डब्ल्यूएसडीएल को मैप करने के लिए एक सरल दृश्य प्रदान किया जा सके।

इस सरलतम परियोजना में, वेब सेवा का इंटरफ़ेस ग्राहक के सामने सीधे आ जाएगा और ग्राहक वेब सेवा को कॉल करने के लिए देशी अपाचे सीएक्सएफ एपीआई का उपयोग करेगा।

सबसे पहले, हम एक वेब सेवा बनाएंगे। प्रत्येक सेवा में एक इंटरफ़ेस होता है जो क्लाइंट के सामने आता है। हम इस इंटरफ़ेस को साधारण Apache CXF इंटरफ़ेस या WSDL दस्तावेज़ के रूप में लिख सकते हैं। इस अपाचे सीएक्सएफ-फर्स्ट एप्रोच में हम अपाचे सीएक्सएफ इंटरफेस के माध्यम से अपनी सेवा का खुलासा करेंगे।

वेब सेवा का विकास करना

वेब पर जो सेवा हम बनाने जा रहे हैं, उसमें एकल वेब विधि होगी greetings। विधि एक लेता हैstringतर्क टाइप करें जिसमें हम उपयोगकर्ता का नाम भेजेंगे। सेवा कॉल करने वाले को संदेश में शामिल उपयोगकर्ता नाम के साथ शुभकामना संदेश भेज देगी।

वेब सेवा इंटरफ़ेस

हमारी वेब सेवा के इंटरफ़ेस को उजागर करने के लिए, हम एक अपाचे सीएक्सएफ इंटरफ़ेस बनाएंगे जो निम्नानुसार है -

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

इंटरफ़ेस में केवल एक विधि है जिसे कॉल किया जाता है greetings। सर्वर इस इंटरफ़ेस को लागू करेगा। हमारे तुच्छ अनुप्रयोग में, यह इंटरफ़ेस क्लाइंट के लिए सीधे उजागर होता है। आमतौर पर, वेब सेवा एप्लिकेशन में, आप वेब सेवा इंटरफ़ेस का वर्णन करने के लिए WSDL का उपयोग करते हैं। इस सरल एप्लिकेशन में, हम क्लाइंट डेवलपर को यह प्रत्यक्ष इंटरफ़ेस प्रदान करेंगे। क्लाइंट तब कॉल करेगाgreetingsसर्वर ऑब्जेक्ट पर संदेश। तो पहले वेब सेवा बनाते हैं।

वेब सेवा कार्यान्वयन

HelloWorld में इंटरफ़ेस लागू किया गया है HelloWorldImpl नीचे दिए गए अनुसार अपाचे सीएक्सएफ क्लास -

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

greetings विधि का एक पैरामीटर प्राप्त करता है string प्रकार, इसे एक बधाई संदेश में जोड़ता है और कॉलर को परिणामी स्ट्रिंग देता है।

अगला, हम होस्ट करने के लिए सर्वर एप्लिकेशन लिखते हैं HelloWorld सेवा।

सर्वर बनाना

सर्वर एप्लिकेशन में दो भाग होते हैं -

  • पहला भाग हमारी वेब सेवा के लिए एक कारखाना बनाता है, और

  • दूसरा भाग a लिखता है main इसे तुरंत करने की विधि।

सर्वर का उपयोग करता है ServerFactoryBean सीएक्सएफ पुस्तकालयों द्वारा प्रदान की जाने वाली कक्षा हमारे सामने आने के लिए HelloWorldदूरदराज के ग्राहकों के लिए इंटरफ़ेस। इस प्रकार, हम पहले तुरंतServerFactoryBean वर्ग और फिर इसके विभिन्न गुण सेट करें -

ServerFactoryBean factory = new ServerFactoryBean();

हम कॉल करने के लिए कॉल करने के लिए सेवा वर्ग सेट करते हैं setServiceClass पर विधि factory वस्तु -

factory.setServiceClass(HelloWorld.class);

हम कारखाने की कॉल करके अपनी सेवा को कॉल करने के लिए URL सेट करते हैं setAddressतरीका। ध्यान दें कि सेवा इस URL पर प्रकाशित की जाएगी।

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

इस स्थिति में, सेवा एम्बेडेड सर्वर पर तैनात है और 5000 पोर्ट को सुन रही होगी। आप अपनी पसंद के किसी भी पोर्ट नंबर का विकल्प चुन सकते हैं।

कारखाना बनाने से पहले, आपको हमारे सेवा कार्यान्वयन वर्ग के बारे में कारखाने को बताना होगा। यह कॉल करके किया जाता हैsetServiceBean पर विधि factory वस्तु को यहाँ दिखाया गया है -

factory.setServiceBean(new HelloWorldImpl());

सेवा बीन हमारे सेवा कार्यान्वयन वर्ग के उदाहरण के लिए सेट है। अंत में, हम कारखाने को इसकी कॉल करके बनाते हैंcreate विधि -

factory.create();

अब, जैसा कि हमने अपनी वेब सेवा को चलाने के लिए कारखाना विकसित किया है, हम अगले एक लिखेंगे main इसे इंस्टेंट करने की विधि और इसे कुछ समय के लिए चालू रखें।

अब, एक लिखें main त्वरित करने की विधि HelloServer निम्नानुसार वर्ग -

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

एक बार तात्कालिक, ए HelloServerकक्षा अनिश्चित काल तक चलती रहेगी। उत्पादन परिनियोजन के लिए, आप निश्चित रूप से अपने सर्वर को हमेशा चालू रखेंगे। वर्तमान स्थिति में, हम एक पूर्व निर्धारित समय के बाद सर्वर को समाप्त कर देंगे -

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

के लिए पूरा कोड HelloServer कक्षा नीचे दी गई है -

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

सर्वर एप्लिकेशन जो हमने बनाया है वह उपयोग करता है ServerFactoryBeanसीएक्सएफ पुस्तकालयों से वर्ग। अब हमें इन पुस्तकालयों को सफलतापूर्वक संकलित करने के लिए अपनी परियोजना में शामिल करना चाहिएHelloServerकक्षा। हम इस्तेमाल करेंगेMaven परियोजना निर्भरता को स्थापित करने के लिए।

मावेन परियोजना की स्थापना

मावेन प्रोजेक्ट बनाने के लिए, अपनी कमांड-लाइन विंडो में निम्न कमांड टाइप करें। ध्यान दें कि हमने मैक मशीन पर इसका परीक्षण किया है। विंडोज और लिनक्स इंस्टॉलेशन के लिए, निर्देश कुछ स्थानों पर भिन्न हो सकते हैं।

mvn archetype:generate

गुणों के लिए पूछे जाने पर, निम्न मान इनपुट करें -

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

मावेन कमांड के पूरा होने पर, आपको अपने वर्तमान फ़ोल्डर में pom.xml फ़ाइल के साथ उपयुक्त फ़ोल्डर संरचना मिलेगी।

उत्पन्न निर्देशिका संरचना यहाँ दिखाई गई है -

आप सीएक्सएफ निर्भरता में जोड़ देंगे pom.xmlऔर मावेन निर्मित संरचना के उपयुक्त फ़ोल्डर में उपरोक्त बनाई गई अपाचे सीएक्सएफ फाइलों को भी कॉपी करें। आपके तैयार संदर्भ के लिए, हमने उस प्रोजेक्ट के लिए pom.xml फ़ाइल नीचे दी है जिसे हमने अपनी मशीन पर बनाया था।

<?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 में अतिरिक्त निर्भरताएं शामिल हो सकती हैं जो इस परियोजना के लिए अप्रासंगिक हैं, लेकिन इस ट्यूटोरियल में हमारी अगली परियोजना के लिए आवश्यक हैं। वैसे भी, अतिरिक्त निर्भरता सहित इस तरह की कोई हानि नहीं है।

प्रोजेक्ट फ़ोल्डर संरचना

सर्वर और क्लाइंट Apache CXF फाइलें रखने के बाद मेरी मशीन पर प्रोजेक्ट फ़ोल्डर संरचना आपके त्वरित संदर्भ के लिए नीचे दिखाई गई है -

चल रहा सर्वर

प्रोजेक्ट बनाने के लिए, अपनी कमांड-लाइन विंडो में निम्न कमांड का उपयोग करें -

mvn clean install

आप निम्न कमांड का उपयोग करके सर्वर शुरू कर सकते हैं -

mvn -Pserver

यह सर्वर को शुरू करेगा और आपको कंसोल पर निम्नलिखित संकेत दिखाई देगा -

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

अब, आपकी ब्राउज़र विंडो में हमारी प्रकाशित सेवा का URL निर्दिष्ट है। आप निम्न आउटपुट देखेंगे -

यह पुष्टि करता है कि हमारी सेवा किसी लोकलहोस्ट पर निर्दिष्ट पोर्ट पर चल रही है। चूंकि हमने निर्दिष्ट नहीं किया हैgreetings हमारे कॉल में संदेश, एक SOAP गलती संदेश ब्राउज़र पर वापस आ जाता है।

आप अपनी पसंद के SOAP क्लाइंट का उपयोग करके अपनी वेब सेवा का और परीक्षण कर सकते हैं। यहां हमने अपने सर्वर का परीक्षण करने के लिए पोस्टमैन का उपयोग किया है।

आउटपुट यहाँ दिखाया गया है -

उसका अवलोकन करो SOAP Requestहाथ से कोडित किया गया था। अनुरोध पोस्ट करने के बाद, सर्वर ने भेजाSOAP Response संदेश, जो स्क्रीन शॉट के निचले हिस्से में देखा जाता है।

इससे, आप समझ सकते हैं कि सीएक्सएफ़ आपको कई प्रकार की वेब प्रौद्योगिकियों के लिए एकीकृत दृष्टिकोण प्रदान करते हुए अनुरोध और प्रतिक्रिया दोनों के लिए SOAP प्रोटोकॉल का उपयोग करता है जो आज की दुनिया में मौजूद हैं। यह वेब अनुप्रयोग विकास को बहुत सरल करता है।

हमारा अगला काम एक ग्राहक बनाना है जो आपके द्वारा बनाई गई वेब सेवा का उपभोग करेगा।

ग्राहक बनाना

सर्वर एप्लिकेशन में HelloWorldवह इंटरफ़ेस है जो हमारी वेब सेवा को उजागर करता है। वेब सेवा ही ग्राहक को एक सादा ग्रीटिंग संदेश प्रदान करती है। आमतौर पर, वेब सेवा इंटरफ़ेस को WSDL (वेब ​​सेवा विवरण भाषा) का उपयोग करके बाहरी दुनिया के लिए उजागर किया जाता है। इस तुच्छ अनुप्रयोग में, हम सीधे सेवा इंटरफ़ेस को उजागर करके ग्राहक को हमारी वेब सेवा का खुलासा करेंगे और यह हैHelloWorld.class

इस उद्देश्य के लिए, सीएक्सएफ नामक एक कारखाना वर्ग प्रदान करता है ClientProxyFactoryBean जो हमें बनाए गए कारखाने के उदाहरण के लिए वांछित इंटरफ़ेस से जुड़ने की अनुमति देता है।

सबसे पहले, हम एक कारखाना सेम उदाहरण बनाते हैं -

ClientProxyFactoryBean factory = new ClientProxyFactoryBean();

हम कहते हैं setAddressURL सेट करने के लिए फ़ैक्टरी बीन इंस्टेंस पर विधि जिसके द्वारा हमारी वेब सेवा को लागू किया जा सकता है। हमारे मामले में, हम अपने पहले चरण में सर्वर बनाते समय उपयोग किए गए URL का उपयोग करेंगे -

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

इसके बाद, हम कॉल करते हैं create पर विधि factory उदाहरण हमारे सेवा इंटरफ़ेस को संलग्न करने के लिए HelloWorld.class यह करने के लिए।

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

अंत में, हम कहते हैं greetings दूरस्थ वेब सेवा को लागू करने की विधि।

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

यह आपके कंसोल पर बधाई संदेश प्रिंट करेगा।

ग्राहक आवेदन के लिए पूरा स्रोत नीचे दिखाया गया है -

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

चल रहा है ग्राहक

सुनिश्चित करें कि सर्वर अभी भी आपकी मशीन पर चल रहा है। यदि यह समय समाप्त हो गया है, तो मामले में, निम्नलिखित कमांड के साथ सर्वर को पुनरारंभ करें -

mvn -Pserver

आपको कंसोल पर निम्न संदेश दिखाई देगा -

Listening on port 5000 ...

अब, सर्वर समय से पहले जिसे हमने 5 मिनट के लिए सेट किया है, एक और कमांड लाइन विंडो खोलें और क्लाइंट को निम्न कमांड के साथ शुरू करें -

mvn -Pclient

आपको कमांड लाइन पर निम्न के जैसा एक संदेश दिखाई देगा -

Hi tutorialspoint

ध्यान दें कि tutorialspointहमारा उपयोगकर्ता नाम है। आपको अपने नाम के साथ ग्रीटिंग मिलेगा।

अगले अध्याय में, हम सीखेंगे कि एक JAX-WS (XML वेब सेवा के लिए Apache CXF API) परियोजना में CXF का उपयोग कैसे करें।