java自帶wsimport命令生成webservice客戶端程式碼及服務呼叫
wsimport是jdk自帶的命令,可在jdk/bin目錄下找到wsimport.exe,根據wsdl文件生成客戶端中間程式碼,基於生成的程式碼編寫客戶端,可以省很多麻煩。
wsimport命令用法
wsimport [options] WSDL_URI
比較常用的[options]有:
1. -d <directory>
在指定的目錄生成class檔案
2. -clientjar <jarfile>
在當前目錄生成jar檔案,結合-d <directory>
可以在指定的目錄生成jar檔案
3. -s <directory>
在指定的目錄生成java原始檔
4.
-p <pkg>
指定生成檔案的包結構
5.
-keep
在生成class檔案,或者jar包時,同時保留java原始檔
常用組合
1、在指定的目錄生成指定包結構的java原始檔
假設wsdl文件的uri為http://localhost:12345/aservice?wsdl,那麼在E:\temp下,生成包結構為com.nantian.ws的java原始檔的命令為:
wsimport -s E:\temp -p com.nantian.ws http://localhost:12345/aservice?wsdl
2、在指定的目錄生成指定包結構的jar檔案(需要JDK1.8以上版本)
假設wsdl文件的uri為
wsimport -d E:\temp -clientjar ws.jar -p com.nantian.ws http://localhost:12345/aservice?wsdl
生成客戶端程式碼後放入我們的專案中
然後就可以測試呼叫我們的介面了
這裡我們寫一個類Test.java進行測試,
(1)、動態生成客戶端程式碼,不會過度依賴生成的客戶端程式碼(用axis、CXF一類的webservice框架可以不用匯入這麼多客戶端程式碼就能呼叫介面,框架類的後續再更,本篇就介紹jax-ws)
package com.nantian.ws.client;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.nantian.ws.Aservice;
public class Test {
public static void main(String[] args) {
try {
//建立訪問wsdl服務地址的url
URL url = new URL("http://localhost:12345/aservice?wsdl");
//通過QName指明服務的和具體資訊
QName sname= new QName("http://ws.nantian.com/","AserviceImplService");
//建立服務
Service service = Service.create(url,sname);
//實現介面
Aservice ms =service.getPort(Aservice.class);
System.out.println(ms.add(12, 33));
System.out.println(ms.getMessageWithParam("11111"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
執行結果:
45
Your message is :11111
(2)、完全使用客戶端程式碼呼叫介面
package com.nantian.ws.client;
import com.nantian.ws.Aservice;
import com.nantian.ws.AserviceImplService;
public class Test {
public static void main(String[] args) {
AserviceImplService ais = new AserviceImplService();
Aservice aservice = ais.getAserviceImplPort();
int sum = aservice.add(1, 2);
String msg = aservice.getMessage();
System.out.println("sum is :"+sum);
System.out.println("msg :"+msg);
}
}
執行結果:
sum is :3
msg :hello
不同的方式,都能得到想要的結果。