欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          使用axis開發(fā)webservice詳解

          摘要:本節(jié)主要用于介紹使用axis開發(fā)webservice,包括服務(wù)端的創(chuàng)建、webservice的部署、客戶端的調(diào)用。

          preparation:

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

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

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

          之前介紹沒有說明本機的環(huán)境,現(xiàn)在把本機環(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

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

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

                                                                                                                                                                           
          1. package com.asiainfo.b2p.soap.impl;
          2. import org.apache.commons.logging.Log;
          3. import org.apache.commons.logging.LogFactory;
          4. import com.asiainfo.b2p.soap.interfaces.IBbossGroupInfoService;
          5. /**
          6. * @Product esop_dev
          7. * @FileName IBbossGroupInfoServiceImpl.java
          8. * @History TODO 根據(jù)集團編號,查詢集團基本信息、集團用戶信息、集團訂購歷史
          9. * @Version 1.0.0
          10. * @Date Nov 22, 2011
          11. * @Author pantaipeng
          12. * @Content 最初版本
          13. */
          14. public class IBbossGroupInfoServiceImpl implements IBbossGroupInfoService {
          15. private static transient Log log = LogFactory
          16. .getLog(IBbossGroupInfoServiceImpl.class);
          17. // 根據(jù)集團編號查詢集團基本信息
          18. public String groupInfo(long groupNo) throws Exception, RemoteException {
          19. log.info(“>>>>>>>>>>>>>>>>>>>>>>>>>>>集團編號=” + groupNo);
          20. //方法體我省略了,為了測試我僅加入一句打印語句
          21. System.out.println(“我是一個公共的方法,作用是根據(jù)集團編號查詢集團基本信息”);
          22. String xml=“<message>public_groupInfo</message>”;//為了測試,返回的信息我也是隨便寫的一個字符串
          23. return xml;
          24. }
          25. // 根據(jù)集團編號查詢集團訂購歷史
          26. public String groupSubHistoryInfo(long groupNo) throws Exception {
          27. log.info(“>>>>>>>>>>>>>>>>>>>>>>>>>>>集團編號=” + groupNo);
          28. //方法體我省略了,為了測試我僅加入一句打印語句
          29. System.out.println(“我是一個公共的方法,作用是根據(jù)集團編號查詢集團訂購歷史”);
          30. String xml=“<message>public_groupSubHistoryInfo</message>”;//為了測試,返回的信息我也是隨便寫的一個字符串
          31. return xml;
          32. }
          33. }
           

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

          (2)wsdd文件

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

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
          1. <service name=“GroupInfoService” type=“” provider=“java:RPC”>
          2. <parameter name=“className” value=“com.asiainfo.b2p.soap.impl.IBbossGroupInfoServiceImpl” ></parameter>
          3. <parameter name=“allowedMethods” value=“*”/>
          4. </service>
           

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

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
          1. <servlet>
          2. <servlet-name>AxisServlet</servlet-name>
          3. <display-name>Apache-Axis Servlet</display-name>
          4. <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
          5. </servlet>
          6. <servlet-mapping>
          7. <servlet-name>AxisServlet</servlet-name>
          8. <url-pattern>/services/*</url-pattern>
          9. </servlet-mapping>
           

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

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

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

          代碼如下:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
          1. package test.webserviceclient;
          2. import java.net.MalformedURLException;
          3. import java.net.URL;
          4. import java.rmi.RemoteException;
          5. import javax.xml.rpc.ParameterMode;
          6. import javax.xml.rpc.ServiceException;
          7. import org.apache.axis.client.Call;
          8. import org.apache.axis.encoding.XMLType;
          9. public class Test {
          10. /**
          11. * 通過genClient.bat文件生成的webservice客戶端調(diào)用webservice服務(wù)的步驟如下:
          12. * 1.創(chuàng)建service對象
          13. * 2.創(chuàng)建url對象
          14. * 3.創(chuàng)建call對象,
          15. * 4.調(diào)用webservice的方法
          16. */
          17. public static void test1() {
          18. try {
          19. // 1.創(chuàng)建service對象,通過axis自帶的類創(chuàng)建
          20. org.apache.axis.client.Service service = new org.apache.axis.client.Service();
          21. // 2.創(chuàng)建url對象
          22. String wsdlUrl = “http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl”;//請求服務(wù)的URL
          23. URL url = new URL(wsdlUrl);//通過URL類的構(gòu)造方法傳入wsdlUrl地址創(chuàng)建URL對象
          24. // 2.創(chuàng)建服務(wù)方法的調(diào)用者對象call,設(shè)置call對象的屬性
          25. Call call = (Call) service.createCall();
          26. call.setTargetEndpointAddress(url);//給call對象設(shè)置請求的URL屬性
          27. String serviceName = “groupInfo”;
          28. call.setOperationName(serviceName);//給call對象設(shè)置調(diào)用方法名屬性
          29. call.addParameter(“groupNo”, XMLType.XSD_LONG, ParameterMode.IN);// 給call對象設(shè)置方法的參數(shù)名、參數(shù)類型、參數(shù)模式
          30. call.setReturnType(XMLType.SOAP_STRING);// 設(shè)置調(diào)用方法的返回值類型
          31. //4.通過invoke方法調(diào)用webservice
          32. long groupNo = 2100000014L;
          33. String res = (String) call.invoke(new Object[] { groupNo });//調(diào)用服務(wù)方法
          34. System.out.println(res);
          35. } catch (MalformedURLException e) {
          36. e.printStackTrace();
          37. } catch (ServiceException e) {
          38. e.printStackTrace();
          39. } catch (RemoteException e) {
          40. e.printStackTrace();
          41. }
          42. }
          43. public static void main(String[] args) {
          44. test1();
          45. }
          46. }
           

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

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

          第一步:配置genclient.bat文件

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

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

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

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

          使用axis開發(fā)webservice詳解

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

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
          1. package test.webserviceclient;
          2. import java.net.MalformedURLException;
          3. import java.net.URL;
          4. import java.rmi.RemoteException;
          5. import javax.xml.rpc.ParameterMode;
          6. import javax.xml.rpc.ServiceException;
          7. import org.apache.axis.client.Call;
          8. import org.apache.axis.encoding.XMLType;
          9. public class Test {
          10. /**
          11. * 通過genClient.bat文件生成的webservice客戶端調(diào)用webservice服務(wù)的步驟如下:
          12. * 先介紹創(chuàng)建的四個文件分別為:
          13. * IBbossGroupInfoServiceImpl 定義了web服務(wù)接口,
          14. * IBbossGroupInfoServiceImplService 定義了用戶獲取web服務(wù)接口的方法
          15. * IBbossGroupInfoServiceImplServiceLocator 接口IBbossGroupInfoServiceImplService的具體實現(xiàn)
          16. * GroupInfoServiceSoapBindingStub web服務(wù)客戶端樁,通過該類與服務(wù)器交互,該類實現(xiàn)了IBbossGroupInfoServiceImpl接口
          17. * 1.創(chuàng)建service對象
          18. * 2.創(chuàng)建url對象
          19. * 3.創(chuàng)建client對象
          20. * 4.調(diào)用webservice的方法
          21. */
          22. public static void test1() {
          23. // 1.創(chuàng)建一個service對象
          24. IBbossGroupInfoServiceImplService service = new IBbossGroupInfoServiceImplServiceLocator();
          25. try {
          26. // 2.創(chuàng)建一個URL對象,傳入wsdl的地址夠過URL的構(gòu)造方法創(chuàng)建
          27. String wsdlUrl = “http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl”;
          28. URL url = new URL(wsdlUrl);
          29. // 3創(chuàng)建一個client對象
          30. IBbossGroupInfoServiceImpl client = service
          31. .getGroupInfoService(url);
          32. // 4調(diào)用webservice的方法
          33. long groupNo = 2100000014L;
          34. String res = client.groupInfo(groupNo);
          35. System.out.println(res);
          36. } catch (MalformedURLException e) {
          37. e.printStackTrace();
          38. } catch (ServiceException e) {
          39. e.printStackTrace();
          40. } catch (RemoteException e) {
          41. e.printStackTrace();
          42. }
          43. }
          44. public static void main(String[] args) {
          45. test1();
          46. }
          47. }
           

          對這種生成客戶端四個類的情況我要說明下,還有通過wsdltojava命令的方式生成客戶端類,但是這個都是一種通過axis調(diào)用webservice的方式,既然有工具我們?yōu)槭裁床挥媚兀?/p>

          所以能使用wsdltojava命令的方式,我就不介紹了。

          test result:

          代碼的測試截圖我就不貼了,感興趣的可以試試看。

          《!–好久沒有上來活動了,今天寫的是最近用到的一個東東,本人也是個菜鳥,剛剛在項目中用到webservice,如果有不對的,請各位大俠指正。–》

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號