使用SOAP開發java web服務–Axis開發方案

來源:互聯網
上載者:User

        本文的預定讀者首先要對j2ee有所瞭解,熟悉xml,tomcat等基本內容,本文主要是簡單介紹一下web服務的基本內容,怎樣在java web開發中構建SOAP服務:
 一、SOAP(Simple Object Access Protocol)簡易物件存取通訊協定 (SOAP),要瞭解SOAP,首先就需要瞭解分散式運算的由來,隨著下一代的分散式運算體系web服務的出現,SOAP成為了建立和調用通過網路發布的應用程式的實際通訊標準。SOAP類似傳統的二進位協議IIOP(CORBA)和JRMP(RMI),但它不採用位元據標記法,而是採用使用XML的,基於文本的資料標記法。
        通過XML標記法,SOAP定義了一種小型有線連線協定和編碼格式,以表示資料類型、程式設計語言和資料庫,還可以使用各種Internet標準協議作為其訊息傳輸工具,還可以提供表示RPC和文檔驅動的訊息交換等通訊模型的約定。請注意,W3C正致力於SOAP的研究,http://www.w3c.org/2000/xp/Group/ ,並得到了主流供應商的積極響應,以便對於基於XML的協議相關的重要任務達成共識,並定義其關鍵要求和使用情境。
        SOAP1.2的基本規範定義了以下基本內容:
       1)用於將XML文檔表示為結構化SOAP訊息的文法和語義
       2)在SOAP訊息中表示資料的編碼通訊協定
       3)用於交換SOAP訊息的通訊模型
       4)SOAP傳輸等底層協議的綁定
      SOAP訊息主要包括了信封頭,訊息頭,主體,附件幾部分
      一個簡單的SOAP訊息表示:
      POST   /StudentInfo   HTTP/1.1
      Host:anthropology.cun.edu
      Content-Type: text/xml;charset="utf-8"
      Content-Length: 640
      SOAPAction:  "GetStudentInfo"

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

        <SOAP-ENV:Body>
            <m:GetStudentInfo   xmlns:m="http://www.cun.edu/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.xmlsoap.org/soap/envelop/ ,SOAP ENCODING: http://schemas.xmlsoap.org/soap/encoding/ 
   關於SOAP編碼規範請參閱www.w3c.org/TR/xmlschema-2/ 定義的編碼值,其他的一些規範可以上www.w3c.org 上具體查看。
二、以下從實際例子來學習,這裡我使用的是Apache的一個子項目Axis的具體例子,便於深入瞭解soap的運行:
    1)下載Axis的相關內容http://ws.apache.org/axis/:
    2)建立一個執行個體程式(遵守j2ee的web程式規範),如(WebServiceTest目錄)
          把axis中lib檔案夾的內容拷到你的WebServiceTest/WEB-INF/lib下,同時上網下載xerces(下載地點:http://xml.apache.org/xerces-j/)解譯器的包檔案xerces.jar,也拷到WebServiceTest/WEB-INF/lib檔案夾下,(若要配置log4j,請把屬性檔案log4j.properties拷到WebServiceTest/WEB-INF/classes檔案夾下)
    3)修改應用程式WebServiceTest/WEB-INF中的web.xml檔案:主要servlet設定如下
       <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>
    你現在可以在網址裡輸入http://localhost/WebServiceTest/servlet/TestServlet 看到了嗎?Axis是使用axis.jar包裡的org.apache.axis.transport.http.AxisServlet對應用程式進行處理的,基本配置就講到這裡。
三、接著我們來說Axis中的核心。
1)不使用Tomcat引擎運行Axis。
       先建立一個腳步檔案,對環境變數classpath進行設定要把lib下的那些包檔案的路徑全都包括進去,運行:java  org.apache.axis.transport.http.SimpleAxisServer  <port>
 2)內部服務處理常式是org.apache.axis.providers.java.RPCProvider,標誌出服務所需的方法,然後提供從SOAP請求訊息組成部分的參數。
 3)Axis的應用程式端管理功能:
       java  org.apache.axis.client.AdminClient 就會列出參數,可供你選擇。我們的例子是:java  org.apache.axis.client.AdminClient  -l http://localhost/WebserviceTest/servlet/TestServlet  list 就會顯示出服務列表,返回的是xml檔案
4)wsdl2java應用程式可以把wsdl檔案建立基於java的程式,如佔位程式等
     java  org.apache.axis.wsdl.WSDL2java  <url>
Axis的基本內容說到這裡
四、具體例子
 1)編寫邏輯程式,簡單如:SoapTest.java
    public class SoapTest{
        public String getStr(String name){
            return "Hello,"+name;
        }
    }
  2) 部署服務,編寫wsdd檔案SoapTest_deploy.wsdd:
     <deployment name="SimapleTest" xmlns="http://xml.apache.org/axis/wsdd/"
         xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
         xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
         xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
             <service name="SoapTest" provider="java:RPC">
                  <parameter name="className" value="SoapTest"/>
                  <parameter name="allowedMethods" value="getStr"/>
             </service>
    </deployment>
    其中className參數是你的想部署的類名(全名),allowedMethods是調用的服務的方法,如果有多個方法的話可以用空格分開(如: <parameter name="allowedMethods" value="getStr  getMoney"/>),當用*的時候表示全部。
     好了現在準備部署了,確保環境路徑classpath設定正確,運行:
        java  org.apache.axis.client.AdminClient  -l  http://localhost/WebserviceTest/servlet/TestServlet  SoapTest_deploy.wsdd
     (這裡不懂的話,請參考以上的說明) 
 ok,呵呵,至此,我們已經完成了一個web服務的部署:測試http://localhost/WebServiceTest/servlet/TestServlet  看裡面是否多了一個選擇SoapTest服務?
      如果不想要服務了那重新編寫一個wsdd檔案,內容改為:
<deployment name="SimapleTest" xmlns="http://xml.apache.org/axis/wsdd/"
         xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
         xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
         xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
            <service name="SoapTest"/>
</deployment>
和上面一樣,對比一下就ok了。
五、用戶端測試:
     用戶端我們也可以使用java來進行測試,網上也有資料的,你可以去學習,很簡單的。現在為了體現web服務的魅力,我用.NET平台來測試吧,用戶端使用c#編寫(先要安裝.net framework sdk):
    1)通過wsdl產生web服務代理,在net平台下運行:
      wsdl  /l:CS  /protocol:SOAP  /out:SoapTestClient.cs  http://localhost/WebserviceTest/services/SoapTest?wsdl  
        我們通過wsdl得到了一個cs檔案SoapTestClient.cs(目前的目錄),你可以開啟cs檔案,研究一下裡面的代碼,那個getStr(string name)就是我們需要調用的方法,我們的用戶端通過調用該方法就可以調用伺服器端的方法,內部的轉化wsdl.exe工具已經幫我們完成了,axis下的WSDL2Java工具也是一樣的功能,可以參考我上面所說的關於Axis的核心內容
   2)編譯cs檔案成程式集dll:
      csc /target:library /r:System.Web.Services.dll  /r:System.Xml.dll SoapTestClient.cs
      最後我們等到了一個dll檔案SoapTestClient.dll,用戶端程式通過調用它就行了
   3)編寫用戶端應用程式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
輸出結果:
     Hello,Wang wenyin
與預期結果相符。

好了,關於soap開發web服務就說到這裡了,希望這篇文章能對大家有所協助,謝謝了:)

對這篇文章有什麼疑問的話,請留言給作者。作者聯絡地址:Sidney.J.Yellow@gmail.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.