在javaEE6的bin文件夾時,有一個wsimport.exe,這個工具在5.0之前的版本里是沒有的,這個工具依據wsdl文件生成相應的類文件,然後用這些類文件,就可以像調用本地的類一樣調用WebService提供的方法了
- wsimport工具詳細參數
The wsimport
tool generates JAX-WS portable artifacts, such as:
- Service Endpoint Interface (SEI)
- Service
- Exception class mapped from wsdl:fault (if any)
- Async Reponse Bean derived from response wsdl:message (if any)
- JAXB generated value types (mapped java classes from schema types)
These artifacts can be packaged in a WAR file with the WSDL and schema documents along with the endpoint implementation to be deployed. The generated Service class can be used to invoke the Web Service endpoint.
wsimport [options] <wsdl>
Option |
Description |
---|---|
|
Specify where to place generated output files |
|
Specify external JAX-WS or JAXB binding files (Each |
-catalog |
Specify catalog file to resolve external entity references, it supports TR9401, XCatalog, and OASIS XML Catalog format. Please read the XML Entity and URI Resolvers document or see wsimport_catalog sample. |
|
allow vendor extensions (functionality not specified by the specification). Use of extensions may result in applications that are not portable or may not interoperate with other implementations |
|
Display help |
|
Specify an HTTP proxy server (port defaults to 8080) |
|
Keep generated files |
-p |
Specifying a target package via this command-line option, overrides any wsdl and schema binding customization for package name and the default package name algorithm defined in the specification |
|
Specify where to place generated source files |
|
Output messages about what the compiler is doing |
|
Print version information |
-wsdllocation <location> |
@WebService.wsdlLocation and @WebServiceClient.wsdlLocation value |
- wsimport工具用法實例
首先,須保證你的jdk爲6.0以上版本,可以在command line下試運行這個命令
c:\test> wsimport
假設我們有下面的wsdl文件
http://localhost:9080/WebService/TestService/TestService.wsdl
我們要把生成的代碼放到c:/test/generate目錄下,那麼我們運行以下命令即可
c:\test> wsimport -s generate http://localhost:9080/WebService/TestService/TestService.wsdl
然後,你就會看到在c:\test\generate目錄下生成了一些java代碼文件,wsimport就是如此簡單
- 編寫調用WebService的客戶端
假如我們要調用的WebService就是之前舉例提到的TestService,它只有下面這樣一個方法
public String test(String name) throws SOAPException
{
if (name == null)
{
throw new SOAPException("name can't be null!");
}
return "hello " + name;
}
用wsimport工具,我們可以得到如下代碼文件
generate
|--com
|--company
|--ObjectFactory.java
|--SOAPException.java
|--SOAPException_Exception.java
|--Test.java
|--TestResponse.java
|--TestService.java
|--TestService_Service.java
|--package-info.java
把它們編譯,然後寫下面這樣一個application去測試
public static void main(String[] args)
{
TestService_Service serviceFactory = new TestService_Service();
TestService service = serviceFactory.getTestServicePort();
try
{
System.out.println(service.test(null));
}
catch (SOAPException_Exception ex)
{
System.out.println(ex.getMessage());
}
}
運行它,屏幕就會輸出
name can't be null
因爲我們之前傳了一個null值進去嘛,其實這也是爲了測試SOAPException是否正常運行,如果你傳個正確的字符串進去,webservice就可以正常運行,如System.out.println(service.test("javaeye"));,屏幕上就會顯示,
Hello javaeye!
順便提一下WebService的異常處理,所有WebService的異常都必須用SOAPException拋出,它是java.xml.soap包中的一個類 (本人試過其它一些Exception,都不能被正常捕捉,只有SOAPException可以正常工作,具體原因不明,如果有哪個人清楚這一點,請評論告之,謝謝)