圖4:創建客戶端程序包。
客戶端的代碼
首先,創建一個用於客戶端的新的程序包。從菜單選擇File - > New - > Package。在New Package對話框中輸入名為com.systinet.simplechat.client的程序包,並且按下finish按鈕。
WASP Developer需要WSDL文件存在於工程中以便生成客戶端類。下載聊天服務的WSDL文檔到工程中。選擇com.systinet.simplechat.client程序包,並且從菜單選擇File - > New - > Other...。New對話框現在打開了。在左邊的工具欄中選擇Systinet Web Services。所有可用的向導現在出現在右邊的工具欄中。選擇WSDL from Internet條目並且轉到下一窗囗。
在第二個窗口中填入WSDL文件的位置並且選擇Next。ChatService的WSDL文件位於http://localhost:6060/ChatService/wsdl。
在最後一個窗口中,填充下載的WSDL文件的名稱。設置它為ChatService並且點擊finish。
WSDL文件現在在你的工程中了。為了生成客戶端類,從它的上下文菜單選擇Generate Client...條目。
當Generate Client from WSDL向導打開的時候,所有的值都設置為它們的默認值並且結束向導。
現在你在兩個新程序包中創建了幾個文件;com.systinet.simplechat.client.iface和com.systinet.simplechat.client.iface.struct。前一個程序包包含接口定義,ChatService.java和一個被WASP框架使用的支持文件ChatService.xmap。後一個程序包包含使用在ChatService.java接口- ChatMessage.java和ChatPerson.java的附加的結構。如果你檢查這個生成的類,它們應該為你所熟知。它們不是原始的ChatService接口類準確無誤的副本,但是它們精確地描述它的應用編程接口。
還有一個WASP Developer從WSDL文件創建的類。看看com.systinet.simplechat.client程序包。那裏有一個新的文件,ChatServiceClient.java。這是一個客戶端應用程序生成的骨架。列表1顯示了這個文件中的類。
首先,幾個WASP類被導入,然後你看看ChatService接口的導入的內容和從WSDL文件中生成的結構。這段代碼的有意思的部分在main()方法中:
ServiceClient serviceClient = ServiceClient.create
(wsdlURI, ChatService.class);
serviceClient.setServiceURL(serviceURI);
serviceClient.setWSDLServiceName(new QName
("http://systinet.com/wsdl/com/systinet/simplechat/server/impl/", "ChatService"));
serviceClient.setWSDLPortName("ChatService");
service = (ChatService) Registry.lookup(serviceClient);
這些代碼創建客戶端使用來遠程調用聊天服務的代理。WASP Developer生成比簡單客戶端需要的更多代碼。因為WSDL文件可以包含有關多數的Web服務的信息,生成的代碼有些複雜,所以它能用於任何WSDL文件。然而,下麵的一行代碼將以同樣的方法用在我們的簡單的例子:
service = (ChatService) Registry.lookup
("http://localhost:6060/ChatService/wsdl/", ChatService);
服務對象現在準備調用。它的方法的每個調用導致聊天服務的遠程調用。結束客戶端來調用聊天服務。列表2顯示了擴展的自生成的代碼。
構造和運行客戶端既然客戶端被實現,你需要構造並且運行它。為了構造代碼,從菜單運行Project - > Build All命令。
為了運行客戶端,你將需要它的Web服務運行器。
選擇工程中的ChatServiceClient類並且從菜單選擇Run - > Run...。雙擊WASP Java Application條目。一個稱為ChatServiceClient的新的運行器被創建並且隨時可使用客戶端。總是使用這個運行客戶端。按下Run按鈕來啟動客戶端。
客戶端連接到聊天服務並且調用它的兩個方法。在客戶端的兩次執行之後到控製台的輸出應該如圖5所示。
圖5:聊天客戶端的輸出。