Android開發之SOAP學習筆記介紹

來源:互聯網
上載者:User

簡易物件存取通訊協定 (SOAP)(Simple Object Access Protocol,SOAP)是一種標準化的通訊規範,主要用於Web服務(Web service)。SOAP的出現可以使網頁伺服器(Web Server)從XML資料庫中提取資料時,無需花時間去格式化頁面,並能夠讓不同應用程式之間通過HTTP協議,以XML格式互相交換彼此的資料,使這個交換過程與程式設計語言、平台和硬體無關。此標準由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,並得到IBM、Lotus(蓮花)、Compaq(康柏)等公司的支援,於2000年提交給全球資訊網聯盟(World Wide Web Consortium,W3C)。目前SOAP 1.1版是業界共同的標準。

SOAP基於XML標準,用於在分布式環境中發送訊息,並執行遠端程序呼叫。使用SOAP,不用考慮任何特定的傳輸協議(儘管通常選用HTTP協議),就能使資料序列化。

SOAP的優點如下:

SOAP是可擴充的。SOAP無需中斷已有的應用程式,SOAP用戶端、伺服器和協議自身都能發展。而且SOAP能極好地支援中間介質和層次化的體繫結構。

SOAP是簡單的。用戶端發送一個請求,調用相應的對象,然後伺服器返回結果。這些訊息是XML格式的,並且封裝成符合HTTP協議的訊息。因此,它符合任何路由器、防火牆或Proxy 伺服器的要求。

SOAP是完全和廠商無關的。SOAP可以相對於平台、作業系統、目標模型和程式設計語言獨立實現。另外,傳輸和語言綁定以及資料編碼的參數選擇都是由具體的實現決定的。

SOAP與程式設計語言無關。SOAP可以使用任何語言來完成,只要用戶端發送正確SOAP請求(也就是說,傳遞一個合適的參數給一個實際的遠端伺服器)。SOAP沒有物件模型,應用程式可以捆綁在任何物件模型中。

SOAP–訊息

SOAP使用Internet應用程式層協議作為其傳輸協議。SMTP以及HTTP協議都可以用來傳輸SOAP訊息,SOAP亦可以通過HTTPS傳輸。一條SOAP訊息就是一個普通的XML文檔,包含下列元素:

必需的Envelope元素,可把此XML文檔標識為一條SOAP訊息。

可選的Header元素,包含頭部資訊。

必需的Body元素,包含所有的調用和響應資訊。

可選的Fault元素,提供有關在處理此訊息時發生錯誤的資訊。

SOAP訊息的重要的文法規則如下:

SOAP訊息必須使用XML來編碼。

SOAP訊息必須使用SOAP Envelope命名空間。

SOAP訊息必須使用SOAP Encoding命名空間。

SOAP訊息不能包含DTD引用。

SOAP訊息不能包含XML處理指示。

執行個體:

請求時候發送的訊息內容如下:
<soapenv:Envelope
xmlns:soapenv=”http:// schemas.xmlsoap.org/soap/envelope/”
xmlns:xsd=”http:// www.w3.org/2001/XMLSchema”
xmlns:xsi=”http:// www.w3.org/2001/XMLSchema-instance”>
<soapenv:Body>
<req:echo xmlns:req=”http:// localhost:8080/axis2/services/MySer-vice/”>
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>

響應時候發送的訊息內容如下:
<soapenv:Envelope
xmlns:soapenv=”http:// schemas.xmlsoap.org/soap/envelope/”
xmlns:wsa=”http:// schemas.xmlsoap.org/ws/2004/08/addressing”>
<soapenv:Header>
<wsa:ReplyTo><wsa:Address>http:// schemas.xmlsoap.org/ws/2004/08/
addressing/role/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:From><wsa:Address>http:// localhost:8080/axis2/
services/MyService</wsa:Address>
</wsa:From>
<wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>
</soapenv:Header>
<soapenv:Body>
<req:echo xmlns:req=”http:// localhost:8080/axis2/services/MyService/”>
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>

SOAP–調用WebService

SOAP調用WebService的具體步驟如下。

步驟1 添加ksoap2包。WebService是一種基於SOAP協議的遠程調用標準,通過WebService可以將不同作業系統平台、不同語言、不同技術整合到一塊。在Android SDK中並沒有提供調用WebService的庫,因此,需要使用第三方的SDK來調用WebService。PC版本的WebService用戶端庫非常豐富,例如Axis2、CXF等,但這些開發包對於Android系統來說過於龐大,也未必很容易移植到Android系統中。因此,這些開發包並不在我們考慮範圍內。適合手機的WebService用戶端的SDK有一些,比較常用的是Ksoap2,可以從網址http://code.google.com/p/ksoap2-android/下載,然後將下載的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包複製到Eclipse工程的lib目錄中,當然也可以放在其他的目錄裡。在Eclipse工程中引用這個jar包。

步驟2 指定WebService的命名空間和調用的方法名,如:
SoapObject request =new SoapObject(http:// service,”getName”);

SoapObject類的第一個參數表示WebService的命名空間,可以從WSDL文檔中找到WebService的命名空間;第二個參數表示要調用的WebService方法名。

步驟3 設定調用方法的參數值,如果沒有參數,可以省略。設定方法的參數值的代碼如下:
Request.addProperty(“param1″,”value”);
Request.addProperty(“param2″,”value”);

要注意的是,addProperty方法的第1個參數雖然表示調用方法的參數名,但該參數值並不一定與服務端的WebService類中的方法參數名一致,只要設定參數的順序一致即可。

步驟4 產生調用WebService方法的SOAP請求資訊。該資訊由SoapSerializationEnvelope對象描述,代碼如下:
SoapSerializationEnvelope envelope=
new SoapSerializationEnvelope(SoapEnvelope.VER11);
Envelope.bodyOut = request;

建立SoapSerializationEnvelope對象時需要通過SoapSerializationEnvelope類的構造方法設定SOAP協議的版本號碼。該版本號碼需要根據服務端WebService的版本號碼設定。在建立SoapSerializationEnvelope對象後,不要忘了設定SOAPSoapSerializationEnvelope類的bodyOut屬性,該屬性的值就是在步驟2建立的SoapObject對象。

步驟5 建立HttpTransportsSE對象。通過HttpTransportsSE類的構造方法可以指定WebService的WSDL文檔的URL。
HttpTransportSE ht=new HttpTransportSE
(“http:// fy.webxml.com.cn/webservices/EnglishChinese.asmxwsdl”);

步驟6 使用call方法調用WebService方法,代碼如下:
ht.call(null,envelope);

call方法的第一個參數一般為null,第2個參數就是在步驟4建立的SoapSerialization-Envelope對象。

步驟7 使用getResponse方法獲得WebService方法的返回結果,代碼如下:
SoapObject soapObject =(SoapObject)envelope.getResponse();

步驟8 解析返回的內容。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.