日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

使用SOAP開發(fā)java web服務(wù)--Axis開發(fā)方案

 figol 2006-04-22

使用SOAP開發(fā)java web服務(wù)--Axis開發(fā)方案 - -

Tagjava    web    Axis                                          

本文的預(yù)定讀者首先要對j2ee有所了解,熟悉xml,tomcat等基本內(nèi)容,本文主要是簡單介紹一下web服務(wù)的基本內(nèi)容,怎樣在java web開發(fā)中構(gòu)建SOAP服務(wù):
 一、SOAP(Simple Object Access Protocol)簡單對象訪問協(xié)議,要了解SOAP,首先就需要了解分布式計算的由來,隨著下一代的分布式計算體系web服務(wù)的出現(xiàn),SOAP成為了創(chuàng)建和調(diào)用通過網(wǎng)絡(luò)發(fā)布的應(yīng)用程序的實際通信標(biāo)準(zhǔn)。SOAP類似傳統(tǒng)的二進制協(xié)議IIOP(CORBA)和JRMP(RMI),但它不采用二進制數(shù)據(jù)表示法,而是采用使用XML的,基于文本的數(shù)據(jù)表示法。
        通過XML表示法,SOAP定義了一種小型有線連接協(xié)議和編碼格式,以表示數(shù)據(jù)類型、編程語言和數(shù)據(jù)庫,還可以使用各種Internet標(biāo)準(zhǔn)協(xié)議作為其消息傳輸工具,還可以提供表示RPC和文檔驅(qū)動的消息交換等通信模型的約定。請注意,W3C正致力于SOAP的研究,http://www./2000/xp/Group/ ,并得到了主流供應(yīng)商的積極響應(yīng),以便對于基于XML的協(xié)議相關(guān)的重要任務(wù)達成共識,并定義其關(guān)鍵要求和使用場景。
        SOAP1.2的基本規(guī)范定義了以下基本內(nèi)容:
       1)用于將XML文檔表示為結(jié)構(gòu)化SOAP消息的語法和語義
       2)在SOAP消息中表示數(shù)據(jù)的編碼標(biāo)準(zhǔn)
       3)用于交換SOAP消息的通信模型
       4)SOAP傳輸?shù)鹊讓訁f(xié)議的綁定
      SOAP消息主要包括了信封頭,消息頭,主體,附件幾部分
      一個簡單的SOAP消息表示:
      POST   /StudentInfo   HTTP/1.1
      Host:anthropology.
      Content-Type: text/xml;charset="utf-8"
      Content-Length: 640
      SOAPAction:  "GetStudentInfo"

     <SOAP-ENV:Envelop xmlns:SOAP-ENV="http://www./2001/06/soap-envelope"
              xmlns:xsi="http://www./2001/XMLSchema-instance"
              xmlns:xsd="http://www./2001/XMLSchema"
             SOAP-ENV:encodingStyle="http://www./2001/06/soap-encoding">
        <SOAP-ENV:Header>
            <person:mail xmlns:person="http://www./Header">xyz@
        </SOAP-ENV:Header> 

        <SOAP-ENV:Body>
            <m:GetStudentInfo   xmlns:m="http://www./jws.student.studentInfo">
                 <student_name xsi:type=‘xsd:string‘>
                        Wang wen yin
                 </student>
             </m:GetStudentInfo>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelop>
   以上是1.2版本命名空間,1.1的命名空間 SOAP ENVELOPE:http://schemas./soap/envelop/ ,SOAP ENCODING: http://schemas./soap/encoding/ 
   關(guān)于SOAP編碼規(guī)范請參閱www./TR/xmlschema-2/ 定義的編碼值,其他的一些規(guī)范可以上www. 上具體查看。
二、以下從實際例子來學(xué)習(xí),這里我使用的是Apache的一個子項目Axis的具體例子,便于深入了解soap的運行:
    1)下載Axis的相關(guān)內(nèi)容http://ws./axis/
    2)建立一個實例程序(遵守j2ee的web程序規(guī)范),如(WebServiceTest目錄)
          把axis中l(wèi)ib文件夾的內(nèi)容拷到你的WebServiceTest/WEB-INF/lib下,同時上網(wǎng)下載xerces(下載地點:http://xml./xerces-j/)解釋器的包文件xerces.jar,也拷到WebServiceTest/WEB-INF/lib文件夾下,(若要配置log4j,請把屬性文件log4j.properties拷到WebServiceTest/WEB-INF/classes文件夾下)
    3)修改應(yīng)用程序WebServiceTest/WEB-INF中的web.xml文件:主要servlet設(shè)置如下
       <servlet>
              <servlet-name>TestServlet</servlet-name>
              <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
      </servlet>
      <servlet-mapping>
              <servlet-name>TestServlet</servlet-name>
              <url-pattern>*.jws</url-pattern>
     </servlet-mapping>
     <servlet-mapping>
              <servlet-name>TestServlet</servlet-name>
              <url-pattern>/servlet/TestServlet</url-pattern>
    </servlet-mapping>
  
    <servlet-mapping>
              <servlet-name>TestServlet</servlet-name>
              <url-pattern>/services/*</url-pattern>
     </servlet-mapping>


     <servlet>
          <servlet-name>AdminServlet</servlet-name>
          <servlet-class>
               org.apache.axis.transport.http.AdminServlet
          </servlet-class>
          <load-on-startup>100</load-on-startup>
     </servlet>
 
     <servlet-mapping>
          <servlet-name>AdminServlet</servlet-name>
          <url-pattern>/servlet/AdminServlet</url-pattern>
     </servlet-mapping>
 
     <mime-mapping>
          <extension>wsdl</extension>
          <mime-type>text/xml</mime-type>
     </mime-mapping>
 
     <mime-mapping>
          <extension>xsd</extension>
          <mime-type>text/xml</mime-type>
     </mime-mapping>
    你現(xiàn)在可以在網(wǎng)址里輸入http://localhost/WebServiceTest/servlet/TestServlet 看到了嗎?Axis是使用axis.jar包里的org.apache.axis.transport.http.AxisServlet對應(yīng)用程序進行處理的,基本配置就講到這里。
三、接著我們來說Axis中的內(nèi)核。
1)不使用Tomcat引擎運行Axis。
       先建立一個腳步文件,對環(huán)境變量classpath進行設(shè)置要把lib下的那些包文件的路徑全都包括進去,運行:java  org.apache.axis.transport.http.SimpleAxisServer  <port>
 2)內(nèi)部服務(wù)處理程序是org.apache.axis.providers.java.RPCProvider,標(biāo)志出服務(wù)所需的方法,然后提供從SOAP請求消息組成部分的參數(shù)。
 3)Axis的應(yīng)用程序端管理功能:
       java  org.apache.axis.client.AdminClient 就會列出參數(shù),可供你選擇。我們的例子是:java  org.apache.axis.client.AdminClient  -l http://localhost/WebserviceTest/servlet/TestServlet  list 就會顯示出服務(wù)列表,返回的是xml文件
4)wsdl2java應(yīng)用程序可以把wsdl文件創(chuàng)建基于java的程序,如占位程序等
     java  org.apache.axis.wsdl.WSDL2java  <url>
Axis的基本內(nèi)容說到這里
四、具體例子
 1)編寫邏輯程序,簡單如:SoapTest.java
    public class SoapTest{
        public String getStr(String name){
            return "Hello,"+name;
        }
    }
  2) 部署服務(wù),編寫wsdd文件SoapTest_deploy.wsdd:
     <deployment name="SimapleTest" xmlns="http://xml./axis/wsdd/"
         xmlns:java="http://xml./axis/wsdd/providers/java"
         xmlns:xsd="http://www./2000/10/XMLSchema"
         xmlns:xsi="http://www./2000/10/XMLSchema-instance">
             <service name="SoapTest" provider="java:RPC">
                  <parameter name="className" value="SoapTest"/>
                  <parameter name="allowedMethods" value="getStr"/>
             </service>
    </deployment>
    其中className參數(shù)是你的想部署的類名(全名),allowedMethods是調(diào)用的服務(wù)的方法,如果有多個方法的話可以用空格分開(如: <parameter name="allowedMethods" value="getStr  getMoney"/>),當(dāng)用*的時候表示全部。
     好了現(xiàn)在準(zhǔn)備部署了,確保環(huán)境路徑classpath設(shè)置正確,運行:
        java  org.apache.axis.client.AdminClient  -l  http://localhost/WebserviceTest/servlet/TestServlet  SoapTest_deploy.wsdd
     (這里不懂的話,請參考以上的說明) 
 ok,呵呵,至此,我們已經(jīng)完成了一個web服務(wù)的部署:測試http://localhost/WebServiceTest/servlet/TestServlet  看里面是否多了一個選擇SoapTest服務(wù)?
      如果不想要服務(wù)了那重新編寫一個wsdd文件,內(nèi)容改為:
<deployment name="SimapleTest" xmlns="http://xml./axis/wsdd/"
         xmlns:java="http://xml./axis/wsdd/providers/java"
         xmlns:xsd="http://www./2000/10/XMLSchema"
         xmlns:xsi="http://www./2000/10/XMLSchema-instance">
            <service name="SoapTest"/>
</deployment>
和上面一樣,對比一下就ok了。
五、客戶端測試:
     客戶端我們也可以使用java來進行測試,網(wǎng)上也有資料的,你可以去學(xué)習(xí),很簡單的?,F(xiàn)在為了體現(xiàn)web服務(wù)的魅力,我用.NET平臺來測試吧,客戶端使用c#編寫(先要安裝.net framework sdk):
    1)通過wsdl生成web服務(wù)代理,在net平臺下運行:
      wsdl  /l:CS  /protocol:SOAP  /out:SoapTestClient.cs  http://localhost/WebserviceTest/services/SoapTest?wsdl  
        我們通過wsdl得到了一個cs文件SoapTestClient.cs(當(dāng)前目錄),你可以打開cs文件,研究一下里面的代碼,那個getStr(string name)就是我們需要調(diào)用的方法,我們的客戶端通過調(diào)用該方法就可以調(diào)用服務(wù)器端的方法,內(nèi)部的轉(zhuǎn)化wsdl.exe工具已經(jīng)幫我們完成了,axis下的WSDL2Java工具也是一樣的功能,可以參考我上面所說的關(guān)于Axis的內(nèi)核內(nèi)容
   2)編譯cs文件成程序集dll:
      csc /target:library /r:System.Web.Services.dll  /r:System.Xml.dll SoapTestClient.cs
      最后我們等到了一個dll文件SoapTestClient.dll,客戶端程序通過調(diào)用它就行了
   3)編寫客戶端應(yīng)用程序SoapTestClientApp.cs
      using System;
      
      namespache  jws.client{
         public class SoapTestClientApp{
            public SoapTestClientApp(){
            }
            public static void Main(string[] args){
                if(args.Length!=1){
                    Console.WriteLine("Usage:SoapTestClientApp <name>");
                    Environment.Exit(1);
                }
                SoapTestService  st_service=new SoapTestService();
                st_service.getStr("Wang wenyin");
           }
        } 
     }
4)編譯文件csc  /r:SoapTestClient.dll  SoapTestClientApp.cs
    運行SoapTestClientApp
輸出結(jié)果:
     Hello,Wang wenyin
與預(yù)期結(jié)果相符。

好了,關(guān)于soap開發(fā)web服務(wù)就說到這里了,希望這篇文章能對大家有所幫助,謝謝了:)有問題的話可以留言,也可以跟我聯(lián)系 gdanthrowwy@126.com

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多