<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 1,  comments - 25,  trackbacks - 0
       本文主要描述如何使用Apache開源項(xiàng)目Axis提供的API來實(shí)現(xiàn)Web Services。本文中的提到的例子只為了方便本文的描述而提出,有不妥之處請(qǐng)見諒。

        本文的讀者應(yīng)有JAVA web 應(yīng)用開發(fā)基礎(chǔ)。應(yīng)該具有看過WSDLSOAPXML等的基本規(guī)范。熟悉Eclipse+MyEclipse開發(fā)環(huán)境。

        本文可以隨意轉(zhuǎn)載使用,但是要保留作者的署名。

    一、環(huán)境準(zhǔn)備

    使用Axis來開發(fā)Web services 需要準(zhǔn)備 web 服務(wù)器,Axis API。本文使用的Web container Tomcat5.5, Axis API 采用版本2

    1.1軟件下載準(zhǔn)備

    Tomcat下載地址:http://tomcat.apache.org/download-55.cgi#5.5.20

    Axis標(biāo)準(zhǔn)包:

    http://ftp.wayne.edu/apache/ws/axis2/1_0/axis2-std-1.0-bin.zip

    Axis War包:

    http://ftp.wayne.edu/apache/ws/axis2/1_0/axis2.war

    Axis Eclipse plug-in(代碼生成工具和打包工具):

    http://apache.justdn.org/ws/axis2/tools/1_0/Axis2_Code_Generator.zip

    http://apache.justdn.org/ws/axis2/tools/1_0/Axis2_Service_Archiver.zip

    Eclipse+MyEclipse可以到官方網(wǎng)站下載(本文為3.25.0GA

    1.2安裝

    A.首先搭建開發(fā)環(huán)境,需要將下載到的Eclipse解壓縮到一個(gè)目錄。

    B.將下載到的Axis 的兩個(gè)plug-in解壓縮到Eclipse安裝目錄下的plug-in子目錄。

    C.安裝MyEclipse5.0GA。然后啟動(dòng)MyEclipse,并選擇“File->New->Other”可以找到下面的這些Wizards,這些將是本文中用到的很重要的工具。

     

    eclipse安裝Axis插件后的情況

                                 D.下面開始搭建Web Services的部署環(huán)境。將下載的

              tomcat報(bào)解壓縮到一個(gè)目錄。完成web container

              的安裝。

            E.axis2.war包拷貝到tomcat安裝目錄下的webapps

              目錄中。

     F.啟動(dòng)Tomcat(windows 下為TOMCA_HOME/bin中的startup.batLinuxunix環(huán)境為startup.sh文件),打開瀏覽器輸入并訪問:http://ip:port/axis2來查看。(如果沒有進(jìn)行陪孩子文件的修改此地址應(yīng)該為http://localhost:8080/axis2,如果能看到下面的頁面則說明已經(jīng)安裝完成。

     

     

     

    驗(yàn)證Axis2 web應(yīng)用部署

    二、Quick Start

    環(huán)境準(zhǔn)備好后,先從一個(gè)簡單的例子開始。以便對(duì)使用Axis來開發(fā)Web services的大致流程有個(gè)了解。這個(gè)例子就是SayHello,請(qǐng)求端輸入一個(gè)名字字符串,返回的將是一個(gè)問候語。

    例如:輸入了Tom,那么返回的事HiTom.How are you

    2.1編寫WSDL

    A.啟動(dòng)MyEclipse,新建立一個(gè)WebAppsFile->New->Project->Web Project,Project Name SayHello,其他保持不改變。

    B.選擇File->New-Other菜單,進(jìn)入后找到MyEclipse->Web Services并選擇WSDL.

    C. 選擇“src”目錄作為“Enter or select the parent folder”的值,“File name”值給定為SayHello.wsdl。點(diǎn)擊“Next”進(jìn)入下一步。

    新建wsdl 

     

    D.將目標(biāo)命名空間設(shè)置為“http://ws.tonyzhangcn.org/SayHello/”.在生成代碼的時(shí)候一般以這個(gè)命名空間為package的名字,例如:org.tonyzhangcn.ws.sayhello。這些值可以按需要設(shè)置。

    設(shè)置wsdl屬性

     

    E.點(diǎn)擊“Finish”按鈕就可以看到MyEclipse提供的WSDL 設(shè)計(jì)器的界面了。可以看到設(shè)計(jì)器為WSDL默認(rèn)的添加了一個(gè)現(xiàn)操作。

      設(shè)計(jì)器-1

    即圖中的“NewOperation”。現(xiàn)在將其改名為SayHello,如下圖:

     設(shè)計(jì)器-2

             之后點(diǎn)擊設(shè)計(jì)界面中的“Source”Tab來查看其代碼。如下:可以看到我們定義了一個(gè)SayHelloWeb Services,她提供了一個(gè)SayHello的方法,她能夠接受一個(gè)String(事實(shí)上是tns:SayHelloRequest對(duì)象,她對(duì)String進(jìn)行了封裝)類型的輸入?yún)?shù)SayHelloRequest并返回一個(gè)String(事實(shí)上是tns:SayHelloResponse對(duì)象,她對(duì)String進(jìn)行了封裝)類型的SayHelloResponse結(jié)果。更多關(guān)于WSDL的信息,請(qǐng)參考W3C的規(guī)范文檔。

     

    <?xml version="1.0" encoding="UTF-8"?>

    <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.tonyzhangcn.org/SayHello/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="SayHello" targetNamespace="http://ws.tonyzhangcn.org/SayHello/">

    <wsdl:types>

    <xsd:schema targetNamespace="http://ws.tonyzhangcn.org/SayHello/">

    <xsd:element name="SayHelloResponse" type="xsd:string" />

    <xsd:element name="SayHelloRequest" type="xsd:string" />

    </xsd:schema>

    </wsdl:types>

    <wsdl:message name="SayHelloResponse">

    <wsdl:part element="tns:SayHelloResponse" name="SayHelloResponse" />

    </wsdl:message>

    <wsdl:message name="SayHelloRequest">

    <wsdl:part element="tns:SayHelloRequest" name="SayHelloRequest" />

    </wsdl:message>

    <wsdl:portType name="SayHello">

    <wsdl:operation name="SayHello">

    <wsdl:input message="tns:SayHelloRequest" />

    <wsdl:output message="tns:SayHelloResponse" />

    </wsdl:operation>

    </wsdl:portType>

    <wsdl:binding name="SayHelloSOAP" type="tns:SayHello">

    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />

    <wsdl:operation name="SayHello">

    <soap:operation soapAction="http://ws.tonyzhangcn.org/SayHello/NewOperation" />

    <wsdl:input>

    <soap:body use="literal" />

    </wsdl:input>

    <wsdl:output>

    <soap:body use="literal" />

    </wsdl:output>

    </wsdl:operation>

    </wsdl:binding>

    <wsdl:service name="SayHello">

    <wsdl:port binding="tns:SayHelloSOAP" name="SayHelloSOAP">

    <soap:address location="http://www.example.org/" />

    </wsdl:port>

    </wsdl:service>

    </wsdl:definitions>

    至此WSDL的編寫已經(jīng)完成。

    2.2WSDL生成Java代碼

    A.選擇菜單“File->New->Other”,從對(duì)話框中選取“Axis2 Wizards”下面的“Axis2 Code Generator”.點(diǎn)擊“Next”進(jìn)入下一個(gè)頁面,保持“Generate java source code from WSDL file”被選中,點(diǎn)擊“Next”進(jìn)入下一步。

    B.點(diǎn)擊“Browse”來選取存放在src目錄下的SayHello.wsdl文件,“Next”進(jìn)入下一步。設(shè)置如下:

    Axis2 code generator

     C.點(diǎn)擊“next”進(jìn)入下一個(gè)頁面,設(shè)置“Output path”為本Projectsrc目錄。點(diǎn)擊“finish”后代在SayHello項(xiàng)目上按F5刷新就可以看到有代碼生成好了。但是能看到一堆紅“x”,這是由于沒有將Axis2jar包放入class path 中以及源代碼的package不為org.tonyzhangcn.ws.sayhello引起的。

    代碼1

     

    下面解決這個(gè)問題,首先選擇“SayHello”項(xiàng)目,并右擊選擇“Build path->Add External Archives..”,選擇上面部署在tomcat中的axis2 web應(yīng)用WEB-INF/lib目錄中的所有jar包。之后右擊“src.org.tonyzhangcn.ws.sayhello”項(xiàng)目,選擇“Refactor->rename”,做如下修改,并選擇OK完成。

    代碼2

     

    這個(gè)時(shí)候發(fā)現(xiàn)test.org.tonyzhangcn.ws.sayhello下面的SayHelloTest.java仍然存在問題。點(diǎn)擊此文件中package 關(guān)鍵子前面的紅“x”,會(huì)提示有兩個(gè)選項(xiàng),我們選擇下面的那個(gè)。

    code4

     

    選擇public class SayHelloTest前的紅“x”,選擇第一項(xiàng)。

    code5

     

    進(jìn)行完這幾個(gè)改動(dòng)之后,生成的代碼就沒有問題了。其中

    SayHelloRequestSayHelloResponse是輸入輸出參數(shù)對(duì)象。

    SayHelloSkeleton是服務(wù)端對(duì)象,用來編寫業(yè)務(wù)邏輯調(diào)用。

    SayHelloStub是客戶端用來定位endpoint(就是發(fā)布的Web Services的地址)的類,客戶端根據(jù)其提供的方法定位Web服務(wù)并發(fā)起調(diào)用

    SayHelloMessageReceiverInOut是一個(gè)實(shí)現(xiàn)同步調(diào)用的web服務(wù)信息轉(zhuǎn)換處理類。

    Resources目錄下的services.xml文件是webservices的描述文件。

    SayHelloTest是一個(gè)客戶端的TestCase示例,用戶可以根據(jù)這個(gè)示例來編寫自己的客戶端調(diào)用類。

    2.3編寫業(yè)務(wù)代碼

    打開SayHelloSKeleton.java文件將其中的實(shí)現(xiàn)方法

     

    public org.tonyzhangcn.ws.sayhello.SayHelloResponse SayHello(org.tonyzhangcn.ws.sayhello.SayHelloRequest param0)

    {

    // Todo fill this with the necessary business logic

    throw new java.lang.UnsupportedOperationException();

    }

     

    改為

    public org.tonyzhangcn.ws.sayhello.SayHelloResponse SayHello(org.tonyzhangcn.ws.sayhello.SayHelloRequest request)

    {

    // Todo fill this with the necessary business logic

    try

    {

    SayHelloResponse response = new SayHelloResponse();

    response.setSayHelloResponse("Hi,"+request.getSayHelloRequest()+".How are you?");

    return response;

    }catch(UnsupportedOperationException e)

    {

    throw e;

    }

    }

    2.4打包

    A.選擇菜單“File->New->Other”,從對(duì)話框中選取“Axis2 Wizards”下面的“Axis2 Services Archive”.點(diǎn)擊“Next”進(jìn)入下一個(gè)頁面

    B.選擇編譯好的class文件所在目錄(本項(xiàng)目應(yīng)該是WebRoot下面WEB-INF/classes),“Next”進(jìn)入下一步。

    C.選擇WSDL文件所在目錄,此處為src目錄下的SayHello.wsdl文件。“Next”,再“Next”。選擇services.xm文件,本文應(yīng)該是生成再src/resources下面的services.xml文件。之后選取“Generate the services.xml automatically”,然后再點(diǎn)擊一下使其變?yōu)榉沁x中狀態(tài),之后點(diǎn)擊“Back”按鈕,再點(diǎn)擊一次“Next”。(注意:這里本應(yīng)該不是這么來回折騰的,但是我的機(jī)器上只有這樣操作finish按鈕才能生效。懷疑這是一個(gè)bug,如果讀到此文的用戶沒有這種情況,忽略此提示

    D.點(diǎn)擊“Next”,將記入最后一個(gè)頁面,此處有兩個(gè)選項(xiàng),一個(gè)是輸出目錄一個(gè)是處處文件名稱。我這里的輸出文件名稱給的是SayHello。點(diǎn)擊“Finish”完成。

     2.5部署

    A.將打包好的文件SayHello.jar(或者可以改名為SayHello.aar),拷貝到Tomcat中已經(jīng)部署的Axis2應(yīng)用的WEB-INF/services目錄下面。

    B.啟動(dòng)Tomcat(即點(diǎn)擊Tomcat安裝目錄下的startup.batlinuxunix下執(zhí)行startup.sh)。

    C.打開瀏覽器,輸入http://ipaddress:port/axis2(一般為http://localhost:8080/axis2,并點(diǎn)擊其中的“services”鏈接

    testservices

       可以看到SayHello已經(jīng)被部署。點(diǎn)擊SayHello提供的連接可以看到與之對(duì)應(yīng)的WSDL

    2.6調(diào)用測(cè)試

    A.修改SayHelloTest.java文件中的方法testSayHello的內(nèi)容為:

    public void testSayHello() throws java.lang.Exception

    {

    String url="http://localhost:8080/axis2/services/SayHello";

    org.tonyzhangcn.ws.sayhello.SayHelloStub stub = new org.tonyzhangcn.ws.sayhello.SayHelloStub(url); // the

    org.tonyzhangcn.ws.sayhello.SayHelloRequest request = (org.tonyzhangcn.ws.sayhello.SayHelloRequest) getTestObject(org.tonyzhangcn.ws.sayhello.SayHelloRequest.class);

    request.setSayHelloRequest("tonyzhangcn");

    System.out.println(stub.SayHello(request).getSayHelloResponse());

    // todo Fill in the param14 here

    assertNotNull(stub.SayHello(request));

    }

    B.從菜單中選擇“Run>Run as->JUnit Test”

    testcase

         可以看到web 服務(wù)已經(jīng)正確的返回了結(jié)果。那么,不用TestCase類可以調(diào)用WebServices嗎?答案是肯定的,我們可以隨便些一個(gè)帶有main方法的類,并仿照SayHelloTest.java中的testSayHello()方法就可以達(dá)到調(diào)用Web Services的目的了。

     

    在我實(shí)際操作工程中,還遇到了兩個(gè)問題:

    一個(gè)是缺少xalan包中的jar文件,

    解決辦法:從官網(wǎng)(http://apache.mirror.phpchina.com/xml/xalan-j/binaries/)下載xalan-j_2_7_0-bin.zip,將xalan-j_2_7_0-bin.zip\xalan-j_2_7_0 目錄下的Jar包全都添加進(jìn)Tomcat的webapps\axis2\WEB-INF\lib目錄中就好了

    一個(gè)是在自動(dòng)產(chǎn)生的JUnit Test類中有兩個(gè)方法,都要實(shí)現(xiàn),

    解決辦法:可以去掉一個(gè)方法。

    posted on 2008-03-10 18:44 Daniel 閱讀(3768) 評(píng)論(1)  編輯  收藏

    FeedBack:
    # re: Myeclipse+AXIS develop webservice[未登錄]
    2012-04-30 21:37 | han
    有個(gè)問題老出現(xiàn) 2. 2 B之后 axis java.lang.reflect.InvocationTargetException
    出現(xiàn),無法繼續(xù)下一步  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    搜索

    •  

    最新評(píng)論

    主站蜘蛛池模板: 亚洲第一永久在线观看| 久久久久久久久亚洲| 亚洲欧洲中文日韩av乱码| 亚洲精品视频在线看| 国产av无码专区亚洲av桃花庵| 亚洲五月激情综合图片区| 亚洲乱码一二三四区麻豆| 亚洲av日韩av永久在线观看| 免费无码国产V片在线观看| 麻豆精品不卡国产免费看| 亚洲精品免费在线视频| 扒开双腿猛进入爽爽免费视频| 亚洲精品国产高清嫩草影院| 亚洲AV美女一区二区三区| 亚洲制服丝袜第一页| 永久免费观看黄网站| 91麻豆国产免费观看| 国产美女无遮挡免费网站| 国产亚洲A∨片在线观看| 亚洲免费电影网站| 免费无码国产V片在线观看| 99视频精品全部免费观看| 永久免费bbbbbb视频| 国产亚洲3p无码一区二区| 亚洲日韩中文字幕一区| 国产成人1024精品免费| 精品香蕉在线观看免费| 亚洲综合另类小说色区色噜噜| 亚洲毛片基地日韩毛片基地| 美女被暴羞羞免费视频| 2019中文字幕在线电影免费 | 男人进去女人爽免费视频国产| 日本免费一区二区在线观看| 亚洲AⅤ永久无码精品AA| 4480yy私人影院亚洲| 羞羞网站在线免费观看| 国产成人精品免费视| 亚洲国模精品一区| 亚洲国产精品日韩在线| 久青草视频97国内免费影视| 毛片免费在线观看网站|