eclipse使用CXF3.1.*創建webservice服務端客戶端以及客戶端手機APP(一)


eclipse使用CXF3.1.*創建webservice服務端客戶端以及客戶端手機APP(一)

本篇博客主要包含五個內容:

1.CXF換將搭建以及eclipse配置CXF。

2.eclipse創建webservice服務端。

3.eclipse創建webservice客戶端訪問webservice服務端。

4.使用Android studio創建webservice客戶端APP訪問服務端。

5.開發過程中可能出現的一些錯誤。

(后兩個方面在下一篇博客中,詳情見末尾。)

各工具版本號:

Eclipse:Eclipse Java EE IDE for Web Developers. Version: Mars.2 Release (4.5.2)。

Jdk:1.7.0_60,64位,

Tomcat:apache-tomcat-7.0.47。

Android studio:目前最新版:Android studio 3.0.1。

閑話少敘,直奔主題。

1.CXF環境搭建以及eclipse配置CXF

從Apache官網 http://cxf.apache.org/download.html 下載CXF壓縮包,我下載的是3.1.14版本的,

這是下載鏈接:

http://www.apache.org/dyn/closer.lua/cxf/3.1.14/apache-cxf-3.1.14.zip

下載好之后配置CXF的環境變量,解壓下載的壓縮包,根據自己的路徑配置環境變量,樓主是下面的路徑,

在CLASSPATH中添加 D:\Java\apache-cxf-2.7.5\lib,

新建CXF_HOME,值為 D:\Java\apache-cxf-2.7.5,

在PATH中添加 D:\Java\apache-cxf-2.7.5\bin,

 

配置好之后,在eclipse的Windows->prerferences中找到webservice->CXF 2.*,然后配置,指向cxf文件夾的路徑,

環境配置完成。

 

2.Eclipse創建webservice服務端

先介紹操作,再介紹原理。

Eclipse中新建動態web項目,Dyanmic web modult version選擇2.5,3.0版本的好像后面使用cxf時會出現問題,Configuration選擇CXF***,然后下一步,

 

這里勾選創建web.xml文件,

 

再下一步,能看到剛才的CXF配置的環境,然后點擊完成。

動態項目創建完成之后,我的目錄結構為:

下面貼代碼:

接口SayHelloService.java

  1. package com.diy.dao;
  2.  
  3. import javax.jws.WebMethod;
  4. import javax.jws.WebParam;
  5. import javax.jws.WebResult;
  6. import javax.jws.WebService;
  7.  
  8. @WebService(targetNamespace = "http://dao.diy.com", serviceName = "SayHelloService")
  9. public interface SayHelloService {
  10.  
  11.    @WebResult(name = "return", targetNamespace = "http://dao.diy.com")
  12.    @WebMethod(action = "http://dao.diy.com/sayHello")
  13.    public String sayHello(@WebParam(name = "arg0", targetNamespace = "http://dao.diy.com") String arg0);
  14. }

實現類SayHelloServiceImpl.java

  1. package com.diy.dao;
  2.  
  3. public class SayHelloServiceImpl implements SayHelloService {
  4.  
  5.    public String sayHello(String arg0) {
  6.       return "Hello:" + arg0;
  7.    }
  8. }

主類Server.java

  1. package com.diy.dao;
  2.  
  3. import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
  4.  
  5. public class Server {
  6.    public static void main(String[] args) {
  7.       System.out.println("開啟webservice。。。");
  8.       SayHelloService sayHelloService = new SayHelloServiceImpl();
  9.       String address = "http://10.201.23.77:8080/web";
  10.       JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
  11.       factoryBean.setAddress(address); // 設置暴露地址
  12.       factoryBean.setServiceClass(SayHelloService.class); // 設置接口類
  13.       factoryBean.setServiceBean(sayHelloService); // 設置實現類
  14.       factoryBean.create();
  15.       System.out.println("開啟webservice成功。。。");
  16.    }
  17. }

在主類中右擊run as ->Java application,如果開啟失敗,在任務管理器中關閉已經開啟的Java進程,這是我的開啟webservice服務成功界面:

  1. 開啟webservice。。。
  2. 一月 03, 2018 1:05:02 下午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
  3. 信息: Creating Service {http://dao.diy.com}SayHelloService from class com.diy.dao.SayHelloService
  4. 一月 03, 2018 1:05:03 下午 org.apache.cxf.endpoint.ServerImpl initDestination
  5. 信息: Setting the server's publish address to be http://10.201.23.77:8080/web
  6. 一月 03, 2018 1:05:03 下午 org.eclipse.jetty.util.log.Log initialized
  7. 信息: Logging initialized @1590ms
  8. 一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.Server doStart
  9. 信息: jetty-9.2.22.v20170606
  10. 一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.handler.AbstractHandler doStart
  11. 警告: No Server set for org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine$1@88a3523
  12. 一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.AbstractConnector doStart
  13. 信息: Started ServerConnector@79de7e39{HTTP/1.1}{10.201.23.77:8080}
  14. 一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.Server doStart
  15. 信息: Started @1746ms
  16. 一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.handler.ContextHandler setContextPath
  17. 警告: Empty contextPath
  18. 一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.handler.ContextHandler doStart
  19. 信息: Started o.e.j.s.h.ContextHandler@5abe12e3{/,null,AVAILABLE}
  20. 一月 03, 2018 1:05:03 下午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL
  21. 信息: Creating Service {http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01}Discovery from WSDL: classpath:/org/apache/cxf/ws/discovery/wsdl/wsdd-discovery-1.1-wsdl-os.wsdl
  22. 一月 03, 2018 1:05:03 下午 org.apache.cxf.endpoint.ServerImpl initDestination
  23. 信息: Setting the server's publish address to be soap.udp://239.255.255.250:3702
  24. 一月 03, 2018 1:05:05 下午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
  25. 信息: Creating Service {http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01}DiscoveryProxy from class org.apache.cxf.jaxws.support.DummyImpl
  26. 開啟webservice成功。。。

開啟成功之后,在瀏覽器地址欄中輸入:服務發布地址+?wsdl,比如我這里就是 http://10.201.23.77:8080/web?wsdl ,回車之后,出現服務的wsdl描述。

出現這些描述信息之后,就表示webservice服務已經發布成功。

理論介紹:

Soapaction:在接口名上面,使用注解:

@WebService(targetNamespace = "http://dao.diy.com", serviceName = "SayHelloService"),targetnamespace的值就是包名倒寫,

指明這是一個webservice服務,

在方法名上使用注解:

@WebResult(name = "return", targetNamespace = "http://dao.diy.com")

@WebMethod(action = "http://dao.diy.com/sayHello") ,

webresult指明返回結果,webmethod指明這是一個服務端的方法,其中的action對應soapaction,如果這里不寫action,soapaction的值為空,客戶端運行時,會報錯,錯誤原因差不多是找不到方法名。接口中的每一個注解都不可缺少,否則客戶端運行報錯。

下面介紹eclipse創建webservice客戶端。

 

3.eclipse創建webservice客戶端來訪問服務端

先介紹操作,再介紹原理。

使用eclipse創建一個Java項目,命名為webservice2client,

然后進到這個Java項目的根目錄àsrc目錄下,我的是這樣的: D:\javaeeworkspace\webservice2client\src ,

進入之后,打開命令行,進到這個src目錄下,然后輸入 wsdl2java http://10.201.23.77:8080/web?wsdl ,(根據自己的發布地址修改代碼,最后加一個?wsdl即可),回車,稍等幾秒會生成一個文件夾,

即生成客戶端代碼,生成之后,在eclipse中刷新項目,查看那個接口類文件,可能targetnamespace會缺少信息,

在這里填寫圖中下面一行的targetNamespace值即可(我上一個demo項目中就不存在這個問題,這個不知道為什么),

新建一個Client類,代碼為:

  1. package com.diy.dao;
  2.  
  3. public class Client {
  4.  
  5.    public static void main(String[] args) {
  6.       System.out.println("開始獲取數據。。。");
  7.       SayHelloService_Service service = new SayHelloService_Service();
  8.       SayHelloService sayHelloService = service.getSayHelloServicePort();
  9.       System.out.println(sayHelloService.sayHello("1"));
  10.       System.out.println("獲取完成。");
  11.    }
  12.  
  13. }

右擊運行,

Webservice客戶端運行成功。

接下來是一些理論類描述:

關於命令行中使用wsdl2java 命令,打開一開始解壓的CXF文件夾的bin目錄,可以看到

這里是包含wsdl2Java命令的,所以在添加了cxf的環境變量之后,可以直接使用這個命令生成客戶端代碼,如果不使用wsdl2Java這個命令的話,也可以使用 jdk自帶的生成客戶端代碼的命令, wsimport.exe 工具,詳情可以參考 http://blog.csdn.net/tianma630/article/details/8231224 這個網址,介紹很詳細。

 

剩下的兩個方面,請查看個人的下一篇博客 : eclipse使用CXF3.1.*創建webservice服務端客戶端以及客戶端手機APP(二)

 

新增demo源碼下載地址:鏈接:https://pan.baidu.com/s/1sm1w3ud  密碼:0n40,鏈接失效的話,請評論區留言個人百度賬號,給你分享一下。

 

如果你能從這篇文章中獲得一丁點對自己有用的信息,那這篇文章就是值得的;如果確實幫助了你,麻煩動一下鼠標,請點擊推薦,

另外由於編者水平有限,文章中如有不妥之處或者有什么疑問,可直接在下面評論指出,不勝感激。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM