WebService教程詳解(二)
在上篇文章給大家介紹了WebService教程詳解(一)
使用工具的原因:
1、 使用工具可以更好的了解WebService請求的過程
2、 使用工具WsExplore可以獲取SOAP數據發(fā)送和接收的格式
3、 使用工具Tcp/Ip Monitor可以監(jiān)控攔截器請求頭和響應頭的具體數據
什么是SOAP?
SOAP是一種基于XML編碼規(guī)范的文本協議,簡單的說SOAP就是在HTTP的基礎上傳輸XML數據,以實現遠程調用【無論你的服務端是什么語言書寫的,只要接收SOAP協議的XML數據,并返回SOAP協議的XML數據,就可以被任何語言調用】
使用WsExplorer實例:驗證qq是否在線
采用qqOnlineWebServiceSoap中的qqCheckOnLine驗證時,返回的是
qqCheckOnlineResponse
qqCheckOnlineResult (string): N
點擊source可以看到詳細信息,信息如下:
1:這是發(fā)出的消息格式:
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請求和接收的頭信息。
1、位置:此工具位于:window>show view>other>MyEclipse Common(常用工具)>TCP/IP Monitor
2、此工具,相當于一個代理商,啟動后它將監(jiān)聽本地的某個端口,然后再將請求轉發(fā)給指定的目標IP和端口。
獲取到數據后,再將數據原封不動的返回給客戶。在客戶看來,永遠首先訪問的都應該是這個代理,否則我們將看不到數據傳輸的過程。
3、 配置選項:
在打開的TCP/IP Monitor界面上:view Menu(右上方向下的小箭頭)>Properties>Add(右側添加)
設置成以下屬性:
第一步:
1)local monitoring port(監(jiān)聽本地的端口號):9876,隨意設置一個4位的端口號,一會將通過http://127.0.0.1:9876的形式訪問
2)host name(要監(jiān)聽的服務器,如www.dbjr.com.cn):127.0.0.1 –因為本機發(fā)布了一個WebService所以監(jiān)聽本機IP.也可以是任意的主機。
3)Port(要監(jiān)聽的目標服務器的端口):6666 - 因為我們發(fā)布的WebService為http://127.0.0.1:6666/helloworld所以,6666是需要監(jiān)聽的端口號。
4)Type(監(jiān)聽的類型):
-- TCP/IP : 將使用原始地址繼續(xù)訪問下一個請求,如用戶輸入:http://127.0.0.1:9876/helloworld?wsdl此時將返回wsdl服務訪問地址同前。
-- HTTP :將使用目標地址繼續(xù)訪問下一個請求。如用戶輸入: http://127.0.0.1:9876/helloworld?wsdl在請求方法時將使用http://127.0.0.1:6666/helloworld來訪問sayHi方法。此種方式將不再會被代理。因為已經不是正在監(jiān)聽的端口號了。
在監(jiān)聽類型處,我選擇了TCP/IP,然后通過在地址欄輸入:http://127.0.0.1:9876/helloworld?wsdl,在返回的wsdl文件中查看:處地址的變化情況。
time out:設置訪問不成功的連接時間,保持為0,即不設置。
在設置好后,點OK按扭,然后再點右方的Start按扭,監(jiān)聽便已經啟動。
第二步:
在MyEclipse的WebService上配置WSDL URL為:http://127.0.0.1:9876/helloworld?wsdl,注意使用的是MyEclipse TCP/IP Monitor的端口。而不是直接去訪問我們發(fā)布的http://127.0.0.1:6666/helloworld?wsdl
如何修改wsdl文件的內容?
使用WebService的注解。
1、 @WebService-定義服務
2、 @WebMethod-定義方法
3、 @WebResult-定義返回值
4、@WebParam-定義參數
注意:對于注解,不同的版本支持程度不相同:
1、1.5不支持.
2、1.6.0_20前版本必須使用完整注解.
3、1.6.0_21以后可以只使用@WebService對類進行注解.
注釋的作用:
通過WebService的注解,可以更加形像的描述Web服務。從而生成WSDL文檔。
當修改了WebService注解之后,同時會影響客戶端生成的代碼。
調用的方法名和參數名也發(fā)生了變化。
示例:
@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"用于找到這個方法以執(zhí)行 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:將上面的程序對外發(fā)布以后,我們通過MyEclipse的WebService Explorer來訪問
你會發(fā)現和以前不一樣的提示信息,但其實,仍然還是調用的那同一個方法。
4:再次使用wsimport –s . http://127.0.0.1:6666/helloworld?wsdl生成java代碼然后調用
以下是調用代碼(可以用面目全非來形容,但完成的還是同樣的工作。)
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); } }
關于WebService教程詳解(二) 就先給大家介紹到這里,希望對大家有所幫助!
相關文章
java foreach循環(huán)為什么不能賦值的講解
這篇文章主要介紹了java foreach循環(huán)為什么不能賦值的講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09Spring?boot?自定義?Starter及自動配置的方法
Starter?組件是?Spring?boot?的一個核心特性,Starter組件的出現極大的簡化了項目開發(fā),這篇文章主要介紹了Spring?boot?自定義?Starter?及?自動配置,需要的朋友可以參考下2022-12-12Spring Boot使用Druid和監(jiān)控配置方法
Druid是Java語言中最好的數據庫連接池,并且能夠提供強大的監(jiān)控和擴展功能。下面來說明如何在 Spring Boot 中配置使用Druid2017-04-04詳解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)
這篇文章主要介紹了詳解JAVAEE——SSH三大框架整合(spring+struts2+hibernate),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07