webservice快速入門-使用wsimport生成ws服務端(二)


    上個例子演示的是在當前項目下發布的Webservice Server,而實際應用中和Client是分離的,本文介紹兩種客戶端開發方式:

1.導出WebService服務端服務接口到jar包,客戶端引入jar包即可,Client開發步驟詳見上一篇博客。

2.通過wsimport工具導出webservice服務,同時簡化Client開發。

本文主要介紹通過wsimport導出webservice:

wsimport有幾個很重要的參數,

-d 表示輸出的目錄,目錄必須事先存在,否則導出失敗。

 -keep表示導出webservice的class文件時是否也導出源代碼java文件。

-verbose表示詳細信息。

看我們的導出命令。我們直接導在d盤中。

 

我們直接把生成的目錄放在第2個建好的項目中去。這樣我們客戶端的項目就可以直接使用服務端的接口IMyservice了。順便我們把前一章的client訪問類也拷過來測試一下。目錄結構如下【注意這是一個新的項目】:

直接運行MyClient測試一下。

 1 package org.WebService.ws.annotation;
 2 
 3 import java.net.MalformedURLException;
 4 import java.net.URL;
 5 
 6 import javax.xml.namespace.QName;
 7 import javax.xml.ws.Service;
 8 
 9 public class Client {
10 
11     public static void main(String[] args) throws MalformedURLException {
12         // TODO Auto-generated method stub
13         URL url=new URL("http://localhost:9998/hw?wsdl");
14         QName qname = new QName("http://annotation.ws.WebService.org/", "CalculatorImplService");
15         Service service = Service.create(url, qname);
16         ICalculator cal = service.getPort(ICalculator.class);
17         cal.add(1, 2);
18         cal.minus(2, 1);
19         
20     }
21 
22 }

和之前我們在服務端測試的效果是一樣的,不同的是文件不一樣。wsimport生成的文件將服務端的webservice折成若干文件了。每一個方法和請求分別對應2個文件。你會發現其中有個類CalculatorImpl:

@WebServiceClient(name="CalculatorImplService", targetNamespace="http://annotation.ws.WebService.org/", wsdlLocation="http://localhost:9998/hw?wsdl")
public class CalculatorImplService extends Service
{

這個類是注解好的客戶端程序,它里面有個方法:

@WebEndpoint(name="CalculatorImplPort")
public ICalculator getCalculatorImplPort()
{
return ((ICalculator)super.getPort(new QName("http://annotation.ws.WebService.org/", "CalculatorImplPort"), ICalculator.class));
}

直接幫我們生成了一個qname訪問程序。既然如何,我們就不用自己寫qname了,直接拿來用測試豈不更好?

 

簡化后的客戶端測試方法如下

  1. public class MyClient2 {  
  2.     public static void main(String[] args) {  
  3.         CalculatorImplService myServiceImplService=new CalculatorImplService();  
  4.         ICalculator msis= myServiceImplService.getCalculatorImplPort();  
  5.         msis.add(1, 4);  
  6.         msis.minus(1, 4);  
  7.     }  
  8. }  

結果是一樣的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM