Apache CXF實戰之一 Hello World Web Service

Apache的CXF現在幾乎成了Java領域構建Web Service的首選類庫,並且它也確實簡單易用,下面就通過幾篇系列文章做一下簡單介紹。

當然首先想到的當然還是那個Hello World示例。這個系列文章中用到的例子都是基於Maven構建的工程,下面是我的pom.xml文件內容

  1. <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
  3.     <modelVersion>4.0.0</modelVersion> 
  4.     <groupId>com.googlecode.garbagecan.cxfstudy</groupId> 
  5.     <artifactId>cxfstudy</artifactId> 
  6.     <packaging>war</packaging> 
  7.     <version>1.0-SNAPSHOT</version> 
  8.     <name>cxfstudy Maven Webapp</name> 
  9.     <url>http://maven.apache.org</url> 
  10.      
  11.     <properties> 
  12.         <cxf.version>2.2.7</cxf.version> 
  13.     </properties> 
  14.      
  15.     <dependencies> 
  16.         <dependency> 
  17.             <groupId>org.apache.cxf</groupId> 
  18.             <artifactId>cxf-rt-frontend-jaxws</artifactId> 
  19.             <version>${cxf.version}</version> 
  20.         </dependency> 
  21.         <dependency> 
  22.             <groupId>org.apache.cxf</groupId> 
  23.             <artifactId>cxf-rt-transports-http</artifactId> 
  24.             <version>${cxf.version}</version> 
  25.         </dependency> 
  26.         <dependency> 
  27.             <groupId>org.apache.cxf</groupId> 
  28.             <artifactId>cxf-rt-transports-http-jetty</artifactId> 
  29.             <version>${cxf.version}</version> 
  30.         </dependency> 
  31.         <dependency> 
  32.             <groupId>org.apache.cxf</groupId> 
  33.             <artifactId>cxf-rt-ws-security</artifactId> 
  34.             <version>${cxf.version}</version> 
  35.         </dependency> 
  36.         <dependency> 
  37.             <groupId>org.apache.cxf</groupId> 
  38.             <artifactId>cxf-rt-ws-policy</artifactId> 
  39.             <version>${cxf.version}</version> 
  40.         </dependency> 
  41.         <dependency> 
  42.             <groupId>org.apache.cxf</groupId> 
  43.             <artifactId>cxf-bundle-jaxrs</artifactId> 
  44.             <version>${cxf.version}</version> 
  45.         </dependency> 
  46.         <dependency> 
  47.             <groupId>javax.ws.rs</groupId> 
  48.             <artifactId>jsr311-api</artifactId> 
  49.             <version>1.1.1</version> 
  50.         </dependency> 
  51.         <dependency> 
  52.             <groupId>org.slf4j</groupId> 
  53.             <artifactId>slf4j-api</artifactId> 
  54.             <version>1.5.8</version> 
  55.         </dependency> 
  56.         <dependency> 
  57.             <groupId>org.slf4j</groupId> 
  58.             <artifactId>slf4j-jdk14</artifactId> 
  59.             <version>1.5.8</version> 
  60.         </dependency> 
  61.         <dependency> 
  62.             <groupId>commons-httpclient</groupId> 
  63.             <artifactId>commons-httpclient</artifactId> 
  64.             <version>3.0</version> 
  65.         </dependency> 
  66.         <dependency> 
  67.             <groupId>commons-io</groupId> 
  68.             <artifactId>commons-io</artifactId> 
  69.             <version>2.3</version> 
  70.         </dependency> 
  71.         <dependency> 
  72.             <groupId>junit</groupId> 
  73.             <artifactId>junit</artifactId> 
  74.             <version>4.8.1</version> 
  75.             <scope>test</scope> 
  76.         </dependency> 
  77.     </dependencies> 
  78.      
  79.     <build> 
  80.         <finalName>cxfstudy</finalName> 
  81.         <resources> 
  82.             <resource> 
  83.                 <directory>src/main/resources</directory> 
  84.             </resource> 
  85.             <resource> 
  86.                 <directory>src/main/java</directory> 
  87.                 <includes> 
  88.                     <include>**</include> 
  89.                 </includes> 
  90.                 <excludes> 
  91.                     <exclude>**/*.java</exclude> 
  92.                 </excludes> 
  93.             </resource> 
  94.         </resources> 
  95.         <plugins> 
  96.             <plugin> 
  97.                 <groupId>org.mortbay.jetty</groupId> 
  98.                 <artifactId>maven-jetty-plugin</artifactId> 
  99.                 <configuration> 
  100.                     <contextPath>/</contextPath> 
  101.                     <connectors> 
  102.                         <connectorimplementation="org.mortbay.jetty.nio.SelectChannelConnector"> 
  103.                             <port>9000</port> 
  104.                         </connector> 
  105.                     </connectors> 
  106.                 </configuration> 
  107.             </plugin> 
  108.             <plugin> 
  109.                 <groupId>org.apache.maven.plugins</groupId> 
  110.                 <artifactId>maven-compiler-plugin</artifactId> 
  111.                 <configuration> 
  112.                     <source>1.5</source> 
  113.                     <target>1.5</target> 
  114.                 </configuration> 
  115.             </plugin> 
  116.         </plugins> 
  117.     </build> 
  118.  
  119. </project> 
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.googlecode.garbagecan.cxfstudy</groupId>
    <artifactId>cxfstudy</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>cxfstudy Maven Webapp</name>
    <url>http://maven.apache.org</url>
    
    <properties>
        <cxf.version>2.2.7</cxf.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-ws-security</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-ws-policy</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-bundle-jaxrs</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>jsr311-api</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.5.8</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>1.5.8</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <build>
        <finalName>cxfstudy</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**</include>
                </includes>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <configuration>
                    <contextPath>/</contextPath>
                    <connectors>
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                            <port>9000</port>
                        </connector>
                    </connectors>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
下面來看看HelloWorld的具體例子。

1.創建HelloWorld 接口類

  1. package com.googlecode.garbagecan.cxfstudy.helloworld; 
  2.  
  3. import javax.jws.WebMethod; 
  4. import javax.jws.WebParam; 
  5. import javax.jws.WebResult; 
  6. import javax.jws.WebService; 
  7.  
  8. @WebService 
  9. public interface HelloWorld { 
  10.     @WebMethod 
  11.     @WebResult String sayHi(@WebParam String text); 
package com.googlecode.garbagecan.cxfstudy.helloworld;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService
public interface HelloWorld {
    @WebMethod
    @WebResult String sayHi(@WebParam String text);
}
2.創建HelloWorld實現類

  1. package com.googlecode.garbagecan.cxfstudy.helloworld; 
  2.  
  3. public class HelloWorldImplimplements HelloWorld { 
  4.  
  5.     public String sayHi(String name) { 
  6.         String msg = "Hello " + name +"!"
  7.         return msg; 
  8.     } 
package com.googlecode.garbagecan.cxfstudy.helloworld;

public class HelloWorldImpl implements HelloWorld {

    public String sayHi(String name) {
        String msg = "Hello " + name + "!";
        return msg;
    }
}
3.創建Server端測試類

  1. package com.googlecode.garbagecan.cxfstudy.helloworld; 
  2.  
  3. import org.apache.cxf.jaxws.JaxWsServerFactoryBean; 
  4.  
  5. // http://localhost:9000/HelloWorld?wsdl 
  6. public class Server { 
  7.     public staticvoid main(String[] args) throws Exception { 
  8.         JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); 
  9.         factory.setServiceClass(HelloWorldImpl.class); 
  10.          
  11.         factory.setAddress("http://localhost:9000/ws/HelloWorld"); 
  12.         factory.create(); 
  13.  
  14.         System.out.println("Server start..."); 
  15.         Thread.sleep(60 *1000); 
  16.         System.out.println("Server exit..."); 
  17.         System.exit(0); 
  18.     } 
package com.googlecode.garbagecan.cxfstudy.helloworld;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

// http://localhost:9000/HelloWorld?wsdl
public class Server {
    public static void main(String[] args) throws Exception {
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
        factory.setServiceClass(HelloWorldImpl.class);
        
        factory.setAddress("http://localhost:9000/ws/HelloWorld");
        factory.create();

        System.out.println("Server start...");
        Thread.sleep(60 * 1000);
        System.out.println("Server exit...");
        System.exit(0);
    }
}
4.創建Client端測試類

  1. package com.googlecode.garbagecan.cxfstudy.helloworld; 
  2.  
  3. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; 
  4.  
  5. public class Client { 
  6.     public staticvoid main(String[] args) { 
  7.         JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
  8.         factory.setServiceClass(HelloWorld.class); 
  9.         factory.setAddress("http://localhost:9000/ws/HelloWorld"); 
  10.         HelloWorld helloworld = (HelloWorld) factory.create(); 
  11.         System.out.println(helloworld.sayHi("kongxx")); 
  12.         System.exit(0); 
  13.     } 
package com.googlecode.garbagecan.cxfstudy.helloworld;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class Client {
    public static void main(String[] args) {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(HelloWorld.class);
        factory.setAddress("http://localhost:9000/ws/HelloWorld");
        HelloWorld helloworld = (HelloWorld) factory.create();
        System.out.println(helloworld.sayHi("kongxx"));
        System.exit(0);
    }
}
5.測試

首先運行Server類來啓動Web Service服務,然後訪問http://localhost:9000/ws/HelloWorld?wsdl地址來確定web service啓動正確。

運行Client測試類,會在命令行輸出Hello kongxx!的message。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章