1. 程式人生 > >WebService系列二:使用JDK和CXF框架開發WebService

WebService系列二:使用JDK和CXF框架開發WebService

method IT ebean pri build 實例 cxf 地址 result

一、使用JDK開發WebService

服務端程序創建:

1.新建一個JDK開發webservice的服務端maven項目JDKWebServiceServer

技術分享圖片

2. 定義一個接口,使用@WebService註解標註接口,使用@WebMethod註解標註接口中定義的所有方法

 1 package com.study.webservice.ws;
 2 
 3 import javax.jws.WebMethod;
 4 import javax.jws.WebService;
 5 
 6 /**
 7  * 定義一個接口,使用@WebService註解標註接口,使用@WebMethod註解標註接口中定義的所有方法
8 * 9 */ 10 //使用@WebService註解標註IWebService接口 11 @WebService 12 public interface IWebService { 13 14 //使用@WebMethod註解標註IWebService接口中的方法 15 @WebMethod 16 String sayHello(String name); 17 18 @WebMethod 19 String save(String name,String pwd); 20 }

3. 編寫接口的實現類,使用@WebService註解標註實現類,實現接口中定義的所有方法

package com.study.webservice.ws.impl;

import javax.jws.WebService;

import com.study.webservice.ws.IWebService;

/**
 * 編寫接口的實現類,使用@WebService註解標註實現類,實現接口中定義的所有方法
 *
 */
//使用@WebService註解標註IWebService接口的實現類WebServiceImpl
@WebService
public class WebServiceImpl implements IWebService {

    @Override
    
public String sayHello(String name) { System.out.println("WebService sayHello "+name); return "sayHello "+name; } @Override public String save(String name, String pwd) { System.out.println("WebService save "+name+", "+pwd); return "save Success"; } }

4. 使用Endpoint(終端)類發布webservice

package com.study.webservice.ws.publish;

import javax.xml.ws.Endpoint;

import com.study.webservice.ws.impl.WebServiceImpl;

/**
 * 使用Endpoint(終端)類發布webservice
 *
 */
public class WebServicePublish {

    public static void main(String[] args) {
        //定義WebService的發布地址,這個地址就是提供給外界訪問Webervice的URL地址,URL地址格式為:http://ip:端口號/xxxx
        //String address = "http://192.168.152.1:8989/";這個WebService發布地址的寫法是合法的
        //String address = "http://192.168.152.1:8989/Webservice";這個WebService發布地址的是合法的
        String address = "http://192.168.152.1:8989/WS_Server/Webservice";
        //使用Endpoint類提供的publish方法發布WebService,發布時要保證使用的端口號沒有被其他應用程序占用
        Endpoint.publish(address , new WebServiceImpl());
        System.out.println("發布webservice成功!");
    }
}

6. 啟動主程序WebServicePublish,效果如下

技術分享圖片

7.在瀏覽器中輸入地址http://192.168.152.1:8989/WS_Server/Webservice?wsdl,可看到webservice發布成功

技術分享圖片

客戶端程序創建:

1. 新建一個JDK開發webservice的客戶端maven項目JDKWebServiceClient

技術分享圖片

2. 借助jdk的wsimort.exe工具生成客戶端代碼,wsimort.exe工具位於Jdk的bin目錄下

技術分享圖片

3. 執行命令:wsimport -keep url(url為wsdl文件的路徑)生成客戶端代碼。

打開命令行窗口,切換到src/main/java目錄,執行"wsimport -keep http://192.168.152.1:8989/WS_Server/Webservice?wsdl"生成客戶端代碼,如下圖所示:技術分享圖片

技術分享圖片

4. 借助生成的代碼編寫調用WebService對外提供的方法

package com.study.webservice.ws.client;

import com.study.webservice.ws.impl.WebServiceImpl;
import com.study.webservice.ws.impl.WebServiceImplService;

/**
 * 調用WebService的客戶端
 *
 */
public class WSClient {
    public static void main(String[] args) {
        //創建一個用於產生WebServiceImpl實例的工廠,WebServiceImplService類是wsimport工具生成的
        WebServiceImplService factory = new WebServiceImplService();
        //通過工廠生成一個WebServiceImpl實例,WebServiceImpl是wsimport工具生成的
        WebServiceImpl wsImpl = factory.getWebServiceImplPort();
        //調用WebService的sayHello方法
        String resResult = wsImpl.sayHello("小不點");
        System.out.println("調用WebService的sayHello方法返回的結果是:"+resResult);
        System.out.println("---------------------------------------------------");
        //調用WebService的save方法
        resResult = wsImpl.save("小不點","123");
        System.out.println("調用WebService的save方法返回的結果是:"+resResult);
    }
}

5. 啟動客戶端主程序WSClient,效果如下

技術分享圖片

二、使用CXF框架開發WebService

服務端程序創建:

1.新建一個使用CXF框架開發webservice的服務端maven項目CXFWebServiceServer

技術分享圖片

2. 在pom.xml中引入相關依賴

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <cxf.version>3.1.4</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>  
              
              
    <!-- 使用cxf內置的jetty服務器發布WebService -->  
    <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-rt-transports-http-jetty</artifactId>  
            <version>${cxf.version}</version>  
    </dependency> 

2. 定義一個接口,使用@WebService註解標註接口

package com.study.webservice.ws;

import javax.jws.WebService;

/**
 * 定義一個接口,使用@WebService註解標註接口
 *
 */
//使用@WebService註解標註IWebService接口
@WebService
public interface IWebService {

    String sayHello(String name);
    
    String save(String name,String pwd);
}

3. 編寫接口的實現類,使用@WebService註解標註實現類,實現接口中定義的所有方法,註意代碼標紅色的地方

package com.study.webservice.ws.impl;

import javax.jws.WebService;

import com.study.webservice.ws.IWebService;

/**
 * 編寫接口的實現類,使用@WebService註解標註實現類,實現接口中定義的所有方法
 *
 */
//使用@WebService註解標註IWebService接口的實現類WebServiceImpl
@WebService(serviceName = "IWebService",
endpointInterface = "com.study.webservice.ws.IWebService"
)
public class WebServiceImpl implements IWebService {

    @Override
    public String sayHello(String name) {
        System.out.println("WebService sayHello "+name);
        return "sayHello "+name;
    }

    @Override
    public String save(String name, String pwd) {
        System.out.println("WebService save "+name+", "+pwd);
        return "save Success";
    }

}

4. 使用CXF的JaxWsServerFactoryBean發布webservice

package com.study.webservice.ws.publish;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.study.webservice.ws.IWebService;
import com.study.webservice.ws.impl.WebServiceImpl;

/**
 * 使用CXF的JaxWsServerFactoryBean發布webservice
 *
 */
public class WebServicePublish {

    public static void main(String[] args) {
        //定義WebService的發布地址,這個地址就是提供給外界訪問Webervice的URL地址,URL地址格式為:http://ip:端口號/xxxx
        //String address = "http://192.168.152.1:8989/";這個WebService發布地址的寫法是合法的
        //String address = "http://192.168.152.1:8989/Webservice";這個WebService發布地址的是合法的
        String address = "http://192.168.152.1:8989/WS_Server/Webservice";
        //使用Endpoint類提供的publish方法發布WebService,發布時要保證使用的端口號沒有被其他應用程序占用
        /*Endpoint.publish(address , new WebServiceImpl());*/
        
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
        factory.setServiceClass(IWebService.class);
        //服務發布地址
        factory.setAddress(address);
        factory.setServiceBean(new WebServiceImpl());
        factory.create();
        
        System.out.println("發布webservice成功!");
    }
}

5. 啟動服務端主程序WebServicePublish

技術分享圖片

6. 在瀏覽器中輸入地址http://192.168.152.1:8989/WS_Server/Webservice?wsdl,可看到webservice發布成功

技術分享圖片

客戶端程序創建:

1. 新建一個使用CXF框架開發webservice的客戶端maven項目CXFWebServiceClient

技術分享圖片

2. 在pom.xml中引入相關依賴

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <cxf.version>3.1.4</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>  

3. 借助jdk的wsimort.exe工具生成客戶端代碼,wsimort.exe工具位於Jdk的bin目錄下

技術分享圖片

4. 執行命令:wsimport -keep url(url為wsdl文件的路徑)生成客戶端代碼。

打開命令行窗口,切換到src/main/java目錄,執行"wsimport -keep http://192.168.152.1:8989/WS_Server/Webservice?wsdl"生成客戶端代碼,如下圖所示:

技術分享圖片

技術分享圖片

5. 使用CXF的JaxWsProxyFactoryBean調用WebService的服務端

package com.study.webservice.ws.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.study.webservice.ws.IWebService;

/**
 * 使用CXF的JaxWsProxyFactoryBean調用WebService的服務端
 *
 */
public class WSClient {
    public static void main(String[] args) {
        JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean();
        jwpfb.setServiceClass(IWebService.class);
        String address = "http://192.168.152.1:8989/WS_Server/Webservice";
        jwpfb.setAddress(address);
        IWebService hs = (IWebService) jwpfb.create();
        //調用WebService的sayHello方法
        String resResult = hs.sayHello("小不點");
        System.out.println("調用WebService的sayHello方法返回的結果是:"+resResult);
        System.out.println("---------------------------------------------------");
        //調用WebService的save方法
        resResult = hs.save("小不點","123");
        System.out.println("調用WebService的save方法返回的結果是:"+resResult);
    }
}

6.啟動客戶端主程序,效果如下:

技術分享圖片

源代碼獲取地址:

https://github.com/leeSmall/WebService

參考文章:

http://www.cnblogs.com/xdp-gacl/p/4259481.html

https://www.cnblogs.com/luangeng/p/6575061.html

WebService系列二:使用JDK和CXF框架開發WebService