在我們真實的項目中,經常會調用別人提供給我們的接口,或者在自己的團隊中,
restful風格的前后端分離也經常會提供一個后端接口暴露出去供app,或者.net/C/C++程序員去調用,此時就需要使用到一個工具或者一套程序來調用暴露的接口。
而今天我要說的就是其中的一個方式,使用apache的cxf調用以及暴露接口,讓我們直接開始代碼
1、首先我們需要去下載cxf,cxf是apache的一個產品,下載鏈接附上:http://www.apache.org/dyn/closer.lua/cxf/3.2.5/apache-cxf-3.2.5.zip
建議大家下載這個
下載完成之后解壓放在一個目錄下,需要去環境變量的path路徑下配置一下,這里請看圖解:
(這個是下載解壓好的cxf,版本是3.2.5)
環境變量配置:
新建一個CXF_HOME的環境變量,指向你的CXF解壓后存放的路徑
然后在path中添加這個bin
此時在cmd命令中輸入wsdl2java -help,可以看到輸出下面這些內容,此時你已經配置好了cxf
打開idea,我們可以開始編寫代碼了
2、idea中配置cxf
一次打開File--settings--左側輸入cxf--選擇Tools下面的WebServices
如圖的cxf配置即可。
3、新建項目就不介紹了,直接開始寫一個要暴露的接口:
package com.cxfdemo.hello; import javax.jws.WebService; @WebService public interface MyWebService { int add(int a, int b); int minus(int a, int b); }
寫這個接口的實現類
1 package com.cxfdemo.hello; 2 3 import javax.jws.WebService; 4 5 @WebService(endpointInterface = "com.cxfdemo.hello.MyWebService") 6 public class MyWebServiceImpl implements MyWebService{ 7 @Override public int add(int a, int b) { 8 System.out.println(a+"+"+b+"="+(a+b)); return a+b; 9 } 10 @Override public int minus(int a, int b) { 11 System.out.println(a + "-" + b + "=" + (a - b)); 12 return a - b; 13 } 14 }
這時候可以寫一個暴露的Server端:
package com.cxfdemo.hello; import javax.xml.ws.Endpoint; public class MyServer { public static void main(String[] args) { String address = "http://localhost:8888/ms"; Endpoint.publish(address,new MyWebServiceImpl()); } }
Client測試端:
1 package com.cxfdemo.hello; 2 3 import javax.xml.namespace.QName; 4 import javax.xml.ws.Service; 5 import java.net.MalformedURLException; 6 import java.net.URL; 7 8 public class MyClient { 9 public static void main(String args[]) { 10 try { URL url = new URL("http://localhost:8888/ms?wsdl"); 11 //命名空間 及 名稱 12 QName qName = new QName("http://hello.cxfdemo.com/","MyWebServiceImplService"); 13 Service service = Service.create(url, qName); MyWebService myWebservice = service.getPort(MyWebService.class); 14 System.out.println(myWebservice.add(2, 3)); System.out.println(myWebservice.minus(2, 3)); 15 } catch (MalformedURLException e) { 16 e.printStackTrace(); 17 } 18 } 19 }
這個時候我們就可以啟動項目了,首先運行啟動MyServer,項目啟動成功后,我們可以通過這個鏈接訪問:http://localhost:8888/ms?wsdl
此時可以看到暴露的接口的內容:
此時即暴露接口成功,我們再來啟動Client測試端:
看到控制台輸出:
此時你就可以開始寫一個基於WebService的暴露接收demo了