亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

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

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

    preparation:

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

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

    2.webservice客戶端生成工具genclient.bat(后面會(huì)對(duì)這個(gè)工具做一個(gè)簡(jiǎn)單的說明)

    之前介紹沒有說明本機(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有三種方式:動(dòng)態(tài)調(diào)用接口、使用動(dòng)態(tài)代理Dynamic
    Proxy、使用從WSDL生成的存根generated Stubs from Service WSDL
    description,由于本人工作中使用的是axis,調(diào)用webservice的方式用到的有動(dòng)態(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ù)集團(tuán)編號(hào)查詢集團(tuán)基本信息
    5. /**
    6. * 集團(tuán)編號(hào) GROUP_NUM 集團(tuán)名稱 GROUP_NAME 公司地址 CO_ADDR 集團(tuán)狀態(tài) GROUP_STATE 集團(tuán)開戶時(shí)間
    7. * START_TIME 傳真 FAX 企業(yè)網(wǎng)址 WEB_URL 證件類型 CARD_TYPE 證件號(hào)碼 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ù)集團(tuán)編號(hào)查詢集團(tuán)訂購歷史
    16. public abstract String groupSubHistoryInfo(long groupNo) throws Exception;
    17. }
     

    實(shí)現(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ù)集團(tuán)編號(hào),查詢集團(tuán)基本信息、集團(tuán)用戶信息、集團(tuán)訂購歷史
    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ù)集團(tuán)編號(hào)查詢集團(tuán)基本信息
    18. public String groupInfo(long groupNo) throws Exception, RemoteException {
    19. log.info(“>>>>>>>>>>>>>>>>>>>>>>>>>>>集團(tuán)編號(hào)=” + groupNo);
    20. //方法體我省略了,為了測(cè)試我僅加入一句打印語句
    21. System.out.println(“我是一個(gè)公共的方法,作用是根據(jù)集團(tuán)編號(hào)查詢集團(tuán)基本信息”);
    22. String xml=“<message>public_groupInfo</message>”;//為了測(cè)試,返回的信息我也是隨便寫的一個(gè)字符串
    23. return xml;
    24. }
    25. // 根據(jù)集團(tuán)編號(hào)查詢集團(tuán)訂購歷史
    26. public String groupSubHistoryInfo(long groupNo) throws Exception {
    27. log.info(“>>>>>>>>>>>>>>>>>>>>>>>>>>>集團(tuán)編號(hào)=” + groupNo);
    28. //方法體我省略了,為了測(cè)試我僅加入一句打印語句
    29. System.out.println(“我是一個(gè)公共的方法,作用是根據(jù)集團(tuán)編號(hào)查詢集團(tuán)訂購歷史”);
    30. String xml=“<message>public_groupSubHistoryInfo</message>”;//為了測(cè)試,返回的信息我也是隨便寫的一個(gè)字符串
    31. return xml;
    32. }
    33. }
     

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

    (2)wsdd文件

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

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    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>
     

    這個(gè)文件放在項(xiàng)目的WEB-INF下面。<service>標(biāo)簽的name屬性是發(fā)布的webservice的名稱,可以自己命名,第一個(gè)<parameter>標(biāo)簽的value屬性指定實(shí)現(xiàn)類的完整路徑,包括類名。其他的地方默認(rè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的話,這個(gè)文件就不用再配置了。

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

    (1).動(dòng)態(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對(duì)象
    13. * 2.創(chuàng)建url對(duì)象
    14. * 3.創(chuàng)建call對(duì)象,
    15. * 4.調(diào)用webservice的方法
    16. */
    17. public static void test1() {
    18. try {
    19. // 1.創(chuàng)建service對(duì)象,通過axis自帶的類創(chuàng)建
    20. org.apache.axis.client.Service service = new org.apache.axis.client.Service();
    21. // 2.創(chuàng)建url對(duì)象
    22. String wsdlUrl = “http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl”;//請(qǐng)求服務(wù)的URL
    23. URL url = new URL(wsdlUrl);//通過URL類的構(gòu)造方法傳入wsdlUrl地址創(chuàng)建URL對(duì)象
    24. // 2.創(chuàng)建服務(wù)方法的調(diào)用者對(duì)象call,設(shè)置call對(duì)象的屬性
    25. Call call = (Call) service.createCall();
    26. call.setTargetEndpointAddress(url);//給call對(duì)象設(shè)置請(qǐng)求的URL屬性
    27. String serviceName = “groupInfo”;
    28. call.setOperationName(serviceName);//給call對(duì)象設(shè)置調(diào)用方法名屬性
    29. call.addParameter(“groupNo”, XMLType.XSD_LONG, ParameterMode.IN);// 給call對(duì)象設(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. }
     

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

    (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% -----默認(rèn) set Output_Path=E:esopsrc -----指定工程的src目錄 set Package=com.asiainfo.maks.webservices.pbosswebclient -----指定生成的四個(gè)文件的存放位置 %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生成四個(gè)客戶端類

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

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

    第三步:寫測(cè)試類調(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)建的四個(gè)文件分別為:
    13. * IBbossGroupInfoServiceImpl 定義了web服務(wù)接口,
    14. * IBbossGroupInfoServiceImplService 定義了用戶獲取web服務(wù)接口的方法
    15. * IBbossGroupInfoServiceImplServiceLocator 接口IBbossGroupInfoServiceImplService的具體實(shí)現(xiàn)
    16. * GroupInfoServiceSoapBindingStub web服務(wù)客戶端樁,通過該類與服務(wù)器交互,該類實(shí)現(xiàn)了IBbossGroupInfoServiceImpl接口
    17. * 1.創(chuàng)建service對(duì)象
    18. * 2.創(chuàng)建url對(duì)象
    19. * 3.創(chuàng)建client對(duì)象
    20. * 4.調(diào)用webservice的方法
    21. */
    22. public static void test1() {
    23. // 1.創(chuàng)建一個(gè)service對(duì)象
    24. IBbossGroupInfoServiceImplService service = new IBbossGroupInfoServiceImplServiceLocator();
    25. try {
    26. // 2.創(chuàng)建一個(gè)URL對(duì)象,傳入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)建一個(gè)client對(duì)象
    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. }
     

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

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

    test result:

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

    《!–好久沒有上來活動(dòng)了,今天寫的是最近用到的一個(gè)東東,本人也是個(gè)菜鳥,剛剛在項(xiàng)目中用到webservice,如果有不對(duì)的,請(qǐng)各位大俠指正。–》

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