使用wsimport命令生成webService客户端代码实例

wsimport简介

在JDK的bin文件夹中,有一个wsimport.exe工具,可依据wsdl文件生成相应的类文件,将生存在本地这些类文件拷贝到需要使用的项目中,就可以像调用本地的类一样调用webService提供的方法。该工具可以用于非Java的服务器,如用C#编写的WebService,通过wsimport则生成Java的客户端实现。

常用命令如下:

[html]  view plain  copy
  1. wsimport -keep -d D:\temp\d -s D:\temp\s -p com.map -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl  

-keep:是否生成java源文件

-d:指定.class文件的输出目录

-s:指定.java文件的输出目录

-p:定义生成类的包名,不定义的话有默认包名

-verbose:在控制台显示输出信息

-b:指定jaxws/jaxb绑定文件或额外的schemas

-extension:使用扩展来支持SOAP1.2

wsimport实例

在此,推荐一个网站,提供了全面的WebService接口供参考:http://www.webxml.com.cn/zh_cn/web_services.aspx

在本地生成查询号码归属地的webService

(1) 进入网站找到

其中,.asmx网址说明了调用的方法、输入参数、返回数据,.wsdl是我们要用来生成代码的网址。

(2) 新建一个Java Project,工程创建好后,生成src目录

(3) cmd命令,进入jdk的bin目录下运行命令:

wsimport -keep -s D:\Workspaces -p com.cn.phone -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl  

-s后的路径如果不是工程的src目录,需把生成的包拷贝到src目录下


刷新项目,便会看到我们生成的文件了

当我们点击几个java文件看时,是不是发现中文注释乱码了,如果想把源代码的编码变成UTF-8,可以下载一个工具:UTFCastExpress

http://download.csdn.net/detail/aqsunkai/9535166

(4) 在该路径下写测试类:

[java]  copy
    package com.cn.phone;  
  1.   
  2. public class PhoneWsClient {  
  3.     static void main(String[] args){  
  4.         //创建一个MobileCodeWS工厂  
  5.         MobileCodeWS factory = new MobileCodeWS();  
  6. //根据工厂创建一个MobileCodeWSSoap对象  
  7.         MobileCodeWSSoap mobileCodeWSSoap = factory.getMobileCodeWSSoap();  
  8. //调用WebService提供的getMobileCodeInfo方法查询手机号码的归属地  
  9.         String searchResult = mobileCodeWSSoap.getMobileCodeInfo("18512155752"null);  
  10.         System.out.println(searchResult);  
  11.   
  12.     }  
  13. }  

运行main方法后:


在本地生成查询天气预报的webService

直接使用wsimport 通过该地址生成Java文件时,会报错。因为该wsdl里面包含 ref = "s:schema" 这样的引用。而jaxb是不支持的。所以需要手动将该wsdl下载下来做下修改,然后再生成java文件。
(1) 将页面另存为


(2) 将所有的 <s:element ref="s:schema" />
                  <s:any />
成 <s:any minOccurs="2" maxOccurs="2"/>,一共有三处需要修改,建议查找<s:element ref="s:schema" />,修改时把<s:any />也要删掉


(3) 运行命令:
wsimport -keep -s D:\Workspaces -p com.cn.weather -verbose C:\Users\sun\Desktop\WeatherWS.xml  


(4) 把生成的包拷贝到src目录下

需要注意的是,要修改WeatherWS.java文件中wsdl的url,因为我们用的是本地文件生成的,要修改成网站的url:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

(5)  在该路径下写测试类
package com.cn.weather;  
  • import java.util.List;  
  • class WeatherWsClient {  
  • void main(String[] args) {  
  •          //创建一个WeatherWS工厂  
  •          WeatherWS factory = new WeatherWS();  
  • //根据工厂创建一个WeatherWSSoap对象  
  •          WeatherWSSoap weatherWSSoap = factory.getWeatherWSSoap();  
  • //调用WebService提供的getWeather方法获取南宁市的天气预报情况  
  •          ArrayOfString weatherInfo = weatherWSSoap.getWeather("钓鱼岛",0);background-color:inherit;">         List<String> lstWeatherInfo = weatherInfo.getString();  
  • //遍历天气预报信息  
  •          for (String string : lstWeatherInfo) {  
  •            System.out.println(string);  
  •            System.out.println("------------------------");  
  •           }  
  • //获得中国省份、直辖市、地区和与之对应的ID  
  •          ArrayOfString s = weatherWSSoap.getRegionProvince();  
  •          List<String> list = s.getString();  
  • for (String string : list) {  
  •                System.out.println(string);  
  •                System.out.println("------------------------");  
  •          }  
  •     }  
  • }  
  • 运行main方法后:

    相关文章

    1.使用ajax调用varxhr;functioninvoke(){if(window.ActiveXO...
                   好不容易把WebService服务器...
    1新建一个工程项目用来做服务端增加一个MyService1类文件pac...
    packagecom.transsion.util;importjava.io.BufferedReader;i...
    再生产wsdl文件时重写描述文件1usingSystem;2usingSystem.Co...
    一般情况下,使用eclipse自带的jax-ws生成webservice会自动生...