溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用axis開發(fā)webservice

發(fā)布時間:2021-11-03 17:54:03 來源:億速云 閱讀:141 作者:小新 欄目:編程語言

小編給大家分享一下如何使用axis開發(fā)webservice,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

preparation:

說明:相關(guān)的可能要了解SOAP(簡單對象訪問協(xié)議)、WSDL(web服務(wù)描述語言)、XML(可擴(kuò)展標(biāo)記語言)、axis(阿帕奇可擴(kuò)展交互系統(tǒng))等相關(guān)知識。

1.下載axis的jar包,請到apache官網(wǎng)或者在百度自行下載,然后導(dǎo)入jar包,不清楚的話導(dǎo)入所有的jar包就好了。(本人用的是axis1的版本,因為項目中用的是axis1的版本)

2.webservice客戶端生成工具genclient.bat(后面會對這個工具做一個簡單的說明)

之前介紹沒有說明本機(jī)的環(huán)境,現(xiàn)在把本機(jī)環(huán)境羅列一下:

系統(tǒng):XP  myeclipse:6.5  tomcat:5.X  JDK:1.5

生成webservice的方式有XFire、Jax-WS、axis等,使用axis調(diào)用webservi有三種方式:動態(tài)調(diào)用接口、使用動態(tài)代理Dynamic Proxy、使用從WSDL生成的存根generated Stubs from Service WSDL description,由于本人工作中使用的是axis,調(diào)用webservice的方式用到的有動態(tài)調(diào)用接口、使用從WSDL生成的存根generated Stubs from Service WSDL description,故本節(jié)只介紹用axis調(diào)用webservice的這兩種方式。后續(xù)的拓展部分根據(jù)需要再說。

start:

***步:服務(wù)器端的開發(fā)

(1)開發(fā)java文件

代碼如下:

接口文件:IBbossGroupInfoService.java

package com.asiainfo.b2p.soap.interfaces;     import java.rmi.RemoteException;  public interface IBbossGroupInfoService {        // 根據(jù)集團(tuán)編號查詢集團(tuán)基本信息      /**       * 集團(tuán)編號 GROUP_NUM 集團(tuán)名稱 GROUP_NAME 公司地址 CO_ADDR 集團(tuán)狀態(tài) GROUP_STATE 集團(tuán)開戶時間       * START_TIME 傳真 FAX 企業(yè)網(wǎng)址 WEB_URL 證件類型 CARD_TYPE 證件號碼 CARD_CODE       * 公司郵編CO_POSTCODE 聯(lián)系電話 TEL_NUM 法人代表名稱 PERSON_NAME 發(fā)展類型 DEVELOP_TYPE       * 地區(qū)編碼REGION_ID regionId       *        * @throws Exception  */      public abstract String groupInfo(long groupNo) throws Exception,              RemoteException;       // 根據(jù)集團(tuán)編號查詢集團(tuán)訂購歷史      public abstract String groupSubHistoryInfo(long groupNo) throws Exception;  }

實現(xiàn)類:IBbossGroupInfoServiceImpl.java

package com.asiainfo.b2p.soap.impl;  import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.asiainfo.b2p.soap.interfaces.IBbossGroupInfoService;  /**  * @Product esop_dev  * @FileName IBbossGroupInfoServiceImpl.java  * @History TODO 根據(jù)集團(tuán)編號,查詢集團(tuán)基本信息、集團(tuán)用戶信息、集團(tuán)訂購歷史  * @Version 1.0.0  * @Date Nov 22, 2011  * @Author pantaipeng  * @Content 最初版本 */ public class IBbossGroupInfoServiceImpl implements IBbossGroupInfoService {     private static transient Log log = LogFactory             .getLog(IBbossGroupInfoServiceImpl.class);       // 根據(jù)集團(tuán)編號查詢集團(tuán)基本信息     public String groupInfo(long groupNo) throws Exception, RemoteException {         log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集團(tuán)編號=" + groupNo);         //方法體我省略了,為了測試我僅加入一句打印語句         System.out.println("我是一個公共的方法,作用是根據(jù)集團(tuán)編號查詢集團(tuán)基本信息");         String xml="<message>public_groupInfo</message>";//為了測試,返回的信息我也是隨便寫的一個字符串         return xml;     }      // 根據(jù)集團(tuán)編號查詢集團(tuán)訂購歷史     public String groupSubHistoryInfo(long groupNo) throws Exception {          log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集團(tuán)編號=" + groupNo);         //方法體我省略了,為了測試我僅加入一句打印語句         System.out.println("我是一個公共的方法,作用是根據(jù)集團(tuán)編號查詢集團(tuán)訂購歷史");         String xml="<message>public_groupSubHistoryInfo</message>";//為了測試,返回的信息我也是隨便寫的一個字符串         return xml;     } }

說明:為了更加的接近實際的開發(fā),這個是本機(jī)上運(yùn)行的程序,實現(xiàn)的功能是通過一個編號查詢相關(guān)信息拼成一個字符串,方法體的部分我刪除了,你需要用這個代碼的話,直接拷貝修改包名稱就可以直接用了。

(2)wsdd文件

wsdd文件只需加入一列幾行(前提是你之前已經(jīng)有wsdd文件了,沒有的話可以在下載的apache的demo中拷貝一個):

<service name="GroupInfoService" type=""  provider="java:RPC"> <parameter name="className" value="com.asiainfo.b2p.soap.impl.IBbossGroupInfoServiceImpl" ></parameter> <parameter name="allowedMethods" value="*"/> </service>

這個文件放在項目的WEB-INF下面。<service>標(biāo)簽的name屬性是發(fā)布的webservice的名稱,可以自己命名,***個<parameter>標(biāo)簽的value屬性指定實現(xiàn)類的完整路徑,包括類名。其他的地方默認(rèn)就好。
(3)配置web.xml文件

<servlet>   <servlet-name>AxisServlet</servlet-name>   <display-name>Apache-Axis Servlet</display-name>   <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping>   <servlet-name>AxisServlet</servlet-name>   <url-pattern>/services/*</url-pattern> </servlet-mapping>

指定處理類以及映射就好,如果像這樣配置的話,后面再寫webservice的話,這個文件就不用再配置了。

第二步:客戶端的開發(fā)

(1).動態(tài)調(diào)用接口

代碼如下:

package test.webserviceclient;  import java.net.MalformedURLException; import java.net.URL; import java.rmi.RemoteException; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.encoding.XMLType;  public class Test {     /**      * 通過genClient.bat文件生成的webservice客戶端調(diào)用webservice服務(wù)的步驟如下:      * 1.創(chuàng)建service對象       * 2.創(chuàng)建url對象       * 3.創(chuàng)建call對象,      * 4.調(diào)用webservice的方法 */     public static void test1() {         try {             // 1.創(chuàng)建service對象,通過axis自帶的類創(chuàng)建             org.apache.axis.client.Service service = new org.apache.axis.client.Service();              // 2.創(chuàng)建url對象             String wsdlUrl = "http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl";//請求服務(wù)的URL             URL url = new URL(wsdlUrl);//通過URL類的構(gòu)造方法傳入wsdlUrl地址創(chuàng)建URL對象  // 2.創(chuàng)建服務(wù)方法的調(diào)用者對象call,設(shè)置call對象的屬性             Call call = (Call) service.createCall();             call.setTargetEndpointAddress(url);//給call對象設(shè)置請求的URL屬性             String serviceName = "groupInfo";             call.setOperationName(serviceName);//給call對象設(shè)置調(diào)用方法名屬性             call.addParameter("groupNo", XMLType.XSD_LONG, ParameterMode.IN);// 給call對象設(shè)置方法的參數(shù)名、參數(shù)類型、參數(shù)模式             call.setReturnType(XMLType.SOAP_STRING);// 設(shè)置調(diào)用方法的返回值類型  //4.通過invoke方法調(diào)用webservice             long groupNo = 2100000014L;             String res = (String) call.invoke(new Object[] { groupNo });//調(diào)用服務(wù)方法             System.out.println(res);         } catch (MalformedURLException e) {             e.printStackTrace();         } catch (ServiceException e) {             e.printStackTrace();         } catch (RemoteException e) {             e.printStackTrace();         }     }      public static void main(String[] args) {         test1();     } }

代碼中的注釋很詳細(xì),我就不介紹了。

(2).使用從WSDL生成的存根generated Stubs from Service WSDL description

***步:配置genclient.bat文件

右鍵單擊“編輯”打開bat文件如下(為了便于說明,每行的意思我就直接寫在后面了):

set Axis_Lib=E:\esop\lib -----指定工程的lib目錄
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% -----默認(rèn)
set Output_Path=E:\esop\src -----指定工程的src目錄
set Package=com.asiainfo.maks.webservices.pbosswebclient -----指定生成的四個文件的存放位置
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% ----- 默認(rèn)http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl -----指定wsdl文件的路徑

第二步:用genclient.bat生成四個客戶端類

雙擊編譯好的bat文件,執(zhí)行后生成的四個java類如下:

如何使用axis開發(fā)webservice

第三步:寫測試類調(diào)用webservice

package test.webserviceclient;  import java.net.MalformedURLException; import java.net.URL; import java.rmi.RemoteException; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.encoding.XMLType;  public class Test {     /**      * 通過genClient.bat文件生成的webservice客戶端調(diào)用webservice服務(wù)的步驟如下:      * 先介紹創(chuàng)建的四個文件分別為:      * IBbossGroupInfoServiceImpl 定義了web服務(wù)接口,      * IBbossGroupInfoServiceImplService 定義了用戶獲取web服務(wù)接口的方法      * IBbossGroupInfoServiceImplServiceLocator 接口IBbossGroupInfoServiceImplService的具體實現(xiàn)      * GroupInfoServiceSoapBindingStub web服務(wù)客戶端樁,通過該類與服務(wù)器交互,該類實現(xiàn)了IBbossGroupInfoServiceImpl接口      * 1.創(chuàng)建service對象       * 2.創(chuàng)建url對象       * 3.創(chuàng)建client對象       * 4.調(diào)用webservice的方法 */     public static void test1() {         // 1.創(chuàng)建一個service對象         IBbossGroupInfoServiceImplService service = new IBbossGroupInfoServiceImplServiceLocator();          try {             // 2.創(chuàng)建一個URL對象,傳入wsdl的地址夠過URL的構(gòu)造方法創(chuàng)建             String wsdlUrl = "http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl";             URL url = new URL(wsdlUrl);              // 3創(chuàng)建一個client對象             IBbossGroupInfoServiceImpl client = service                     .getGroupInfoService(url);              // 4調(diào)用webservice的方法             long groupNo = 2100000014L;             String res = client.groupInfo(groupNo);              System.out.println(res);          } catch (MalformedURLException e) {             e.printStackTrace();         } catch (ServiceException e) {             e.printStackTrace();         } catch (RemoteException e) {             e.printStackTrace();         }      }      public static void main(String[] args) {         test1();     } }

以上是“如何使用axis開發(fā)webservice”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI