java呼叫webservice,比較簡單方便的方法。
首先,請同學們自行了解webservice的基礎知識。
個人理解,webservice約等於使用http+xml技術進行跨平臺的資料互動。
http和xml我們都很熟悉了,把他們兩個組合到一起就是webservice了,http負責資訊傳輸,xml負責資訊的組織。這麼理解雖然說簡單了一點,但如果你只需要呼叫webservice服務,而不需要去建立並維護話,這樣理解也就夠了。
1.用xml組織資訊
好了,那麼我們就先從xml說起,我們需要把一些請求的資訊傳送給webservice伺服器,而伺服器又需要把響應的訊息反饋給我們。因為xml的跨平臺特性,在webservice裡使用了xml作為資訊的組織形式。也就是說客戶端與伺服器之間說話的方式,是互相傳遞xml檔案。
2.用http傳送資訊
那麼傳送xml檔案的任務就交給http來做了,我們把http請求中HttpURLConnection的Content-Type設定成text/xml;charset=UTF-8,那麼我們的http就可以傳送xml檔案了。
3.傳送的xml長啥樣?
很好,那我們就傳送一個xml給伺服器就好,然後伺服器把要說的話也放到一個xml裡返回給我們。可是,可是,我們怎麼知道要對伺服器說什麼?伺服器可以提供哪些服務?這些服務又需要提供哪些引數?這些我們統統不知道啊。
對了,我們的wsdl登場了,wsdl相當於一個諮詢臺,它可以告訴你,伺服器都提供了哪些服務,哪個服務要提供哪些引數。我們怎麼找到wsdl呢?原來webservice服務都會把wsdl釋出到網上,有需要的朋友們就可以自取啦。
感謝網友們的力量,這是一些開放的webservice,大家可以進去看一下。
https://my.oschina.net/CraneHe/blog/183471
像這樣,伺服器會提供一個wsdl的連結給你,你可以嘗試在瀏覽器裡開啟這個連結(比如http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl),那就可以看到以下這些資訊了:
這裡面的資訊好複雜,看不懂啊。。。要學習wsdl又很費時間,所以博主就從網上找了個工具,自動把這個wsdl諮詢臺裡諮詢員的方言翻譯成了普通話~博主用的這個叫做storm的軟體(http://www.cr173.com/soft/12037.html),當然類似的工具有很多(比如這些:http://www.codeceo.com/article/12-great-webservice-test-tool.html
這個服務就是你輸入一個qq號,它就告訴你這個qq號的線上狀態,所以需要你提供一個qq號作為引數。上圖中,樹形結構裡展示了需要我們填寫的引數qqCode。點選raw view按鈕,就看到完整的xml內容了,下圖中,左邊是傳送的請求xml內容,右邊是伺服器返回的xml內容。
(原來xml的複雜格式都是套路)
4.開始編碼啦
好的,準備工作完成!現在我們總結一下,我們要用http傳送一個xml到伺服器上去,然後把伺服器返回的xml內容拿來用。傳送給伺服器的xml的內容,就用我們軟體從wsdl解析出來的樣式。那麼,我們開始愉快的編碼吧,這裡我用的java語言,大家也可以借鑑文末的文章裡提到的其他語言。
try {
String urlStr = "http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx";
URL url = new URL(urlStr);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
OutputStream oStream = con.getOutputStream();
//下面這行程式碼是用字串拼出要傳送的xml,xml的內容是從測試軟體裡拷貝出來的
//需要注意的是,有些空格不要弄丟哦,要不然會報500錯誤的。
//引數什麼的,你可以封裝一下方法,自動生成對應的xml指令碼
String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
"<soap:Envelope "+
"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" "+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"+
"<soap:Body>"+
"<qqCheckOnline xmlns=\"http://WebXml.com.cn/\">"+
"<qqCode>12345678</qqCode>"+ //你的qq號填到裡邊
"</qqCheckOnline> "+
"</soap:Body>"+
"</soap:Envelope>";
oStream.write(soap.getBytes());
oStream.close();
InputStream iStream = con.getInputStream();
Reader reader = new InputStreamReader(iStream);
int tempChar;
String str = new String();
while((tempChar = reader.read()) != -1){
str += (char) tempChar;
}
//下面這行輸出返回的xml到控制檯,相關的解析操作大家自己動手嘍。
//如果想要簡單的話,也可以用正則表示式取結果出來。
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>returnedxmlstr:"+str);
iStream.close();
oStream.close();
con.disconnect();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}