WebService教程詳解(二)

使用工具的緣由:java

一、 使用工具能夠更好的瞭解WebService請求的過程服務器

二、 使用工具WsExplore能夠獲取SOAP數據發送和接收的格式工具

三、 使用工具Tcp/Ip Monitor能夠監控攔截器請求頭和響應頭的具體數據編碼

什麼是SOAP? spa

SOAP是一種基於XML編碼規範的文本協議,簡單的說SOAP就是在HTTP的基礎上傳輸XML數據,以實現遠程調用【不管你的服務端是什麼語言書寫的,只要接收SOAP協議的XML數據,並返回SOAP協議的XML數據,就能夠被任何語言調用】.net

使用WsExplorer實例:驗證qq是否在線代理

採用qqOnlineWebServiceSoap中的qqCheckOnLine驗證時,返回的是code

qqCheckOnlineResponse
qqCheckOnlineResult (string): Norm

點擊source能夠看到詳細信息,信息以下:xml

1:這是發出的消息格式:

 

複製代碼 代碼以下:


http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://WebXml.com.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-
870931520

 

2:如下是接收到的XML格式

 

複製代碼 代碼以下:


http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
- http://WebXml.com.cn/">
N

 

 

採用qqOnlineWebServiceHttpGet或qqOnlineWebServiceHttpPost中的qqCheckOnline驗證時,返回的都是

Nhttp://WebXml.com.cn/">N>

使用Tcp/Ip Monitor

TCP/IP Monitor不只能夠看到SOAP數據,還能夠獲取HTTP請求和接收的頭信息。

一、位置:此工具位於:window>show view>other>MyEclipse Common(經常使用工具)>TCP/IP Monitor

二、此工具,至關於一個代理商,啓動後它將監聽本地的某個端口,而後再將請求轉發給指定的目標IP和端口。
獲取到數據後,再將數據原封不動的返回給客戶。在客戶看來,永遠首先訪問的都應該是這個代理,不然咱們將看不到數據傳輸的過程。

三、 配置選項:

在打開的TCP/IP Monitor界面上:view Menu(右上方向下的小箭頭)>Properties>Add(右側添加)

設置成如下屬性:

第一步:

1)local monitoring port(監聽本地的端口號):9876,隨意設置一個4位的端口號,一會將經過http://127.0.0.1:9876的形式訪問

2)host name(要監聽的服務器,如www.jb51.net):127.0.0.1 –由於本機發布了一個WebService因此監聽本機IP.也能夠是任意的主機。

3)Port(要監聽的目標服務器的端口):6666 - 由於咱們發佈的WebService爲http://127.0.0.1:6666/helloworld因此,6666是須要監聽的端口號。

4)Type(監聽的類型):
-- TCP/IP : 將使用原始地址繼續訪問下一個請求,如用戶輸入:http://127.0.0.1:9876/helloworld?wsdl此時將返回wsdl服務訪問地址同前。

-- HTTP :將使用目標地址繼續訪問下一個請求。如用戶輸入: http://127.0.0.1:9876/helloworld?wsdl在請求方法時將使用http://127.0.0.1:6666 /helloworld來訪問sayHi方法。此種方式將再也不會被代理。由於已經不是正在監聽的端口號了。

在監聽類型處,我選擇了TCP/IP,而後經過在地址欄輸入:http://127.0.0.1:9876/helloworld?wsdl,在返回的wsdl文件中查看:處地址的變化狀況。

time out:設置訪問不成功的鏈接時間,保持爲0,即不設置。

在設置好後,點OK按扭,而後再點右方的Start按扭,監聽便已經啓動。

第二步:

在MyEclipse的WebService上配置WSDL URL爲:http://127.0.0.1:9876/helloworld?wsdl,注意使用的是MyEclipse TCP/IP Monitor的端口。而不是直接去訪問咱們發佈的http://127.0.0.1:6666/helloworld?wsdl

如何修改wsdl文件的內容?

使用WebService的註解。

一、 @WebService-定義服務

二、 @WebMethod-定義方法

三、 @WebResult-定義返回值

四、@WebParam-定義參數

注意:對於註解,不一樣的版本支持程度不相同:

一、1.5不支持.

二、1.6.0_20前版本必須使用完整註解.

三、1.6.0_21之後能夠只使用@WebService對類進行註解.

註釋的做用:

經過WebService的註解,能夠更加形像的描述Web服務。從而生成WSDL文檔。

當修改了WebService註解以後,同時會影響客戶端生成的代碼。

調用的方法名和參數名也發生了變化。

示例:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

@WebService(name="myName",//對應portType name="myName"

portName="myPort", //對應服務中的port name="myPort"

serviceName="myService",//對應service name="myService"

targetNamespace="http://leaf.com/mynamespace")//能夠隨意書寫相似於java中的package

public class HelloWorld{

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

@WebMethod(action="myAction",//定義一個soapAction="myAction"用於找到這個方法以執行

operationName="myOperationName")//定義能夠調用的方法,會生成相應類的具體方法,operation name=".."

public @WebResult(name="mySayHelloResult")String//定義返回值的名稱

sayHello(){

return "HelloWorld";

}

@WebMethod(action="mySayHiAction",operationName="mySayHiOperationName")

public @WebResult(name="mySayHiResult")String sayHi(@WebParam(name="myParaName",

//將參數放到頭信息中,用於保護參數,默認在body中

header=true,

mode=Mode.IN)

String name){

String str = "你好:"+name+",當前時間是:"+sdf.format(new Date());

return str;

}

public static void main(String[] args) {

Endpoint.publish("http://127.0.0.1:6666/helloworld",new HelloWorld());

}

}

3:將上面的程序對外發布之後,咱們經過MyEclipse的WebService Explorer來訪問

你會發現和之前不同的提示信息,但其實,仍然仍是調用的那同一個方法。

4:再次使用wsimport –s . http://127.0.0.1:6666/helloworld?wsdl生成java代碼而後調用
如下是調用代碼(能夠用面目全非來形容,但完成的仍是一樣的工做。)

?

1

2

3

4

5

6

7

8

9

10

package com.leaf.mynamespace;

public class Main {

public static void main(String[] args) {

//經過分析wsdl可知從myService中調用getMyPort返回myName

MyName myName = new MyService().getMyPort();

//經過myName的mySayHiOperationName來調用sayHi方法

String str = myName.mySayHiOperationName("王健");

System.err.println(str);

}

}

相關文章
相關標籤/搜索