java程序如何生成客户端_java webservice生成客户端代码并调用

本文介绍了如何使用JDK自带的wsimport工具从wsdl文件生成Java客户端代码,并展示了调用WebService接口查询号码归属地和天气预报的示例。详细步骤包括设置命令参数、处理编码问题以及编写测试类进行调用。
摘要由CSDN通过智能技术生成

wsimport简介

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

常用命令如下:

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) 进入网站找到

f747b38e02951c05f5d91b88617bacb7.png

其中,.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目录下

16832980a88d3972d6fed92defa54e45.png

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

e6d4ea6be74f222e1c888ad20ff6935c.png

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

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

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

package com.cn.phone;

public class PhoneWsClient {

public static void main(String[] args){

//创建一个MobileCodeWS工厂

MobileCodeWS factory = new MobileCodeWS();

//根据工厂创建一个MobileCodeWSSoap对象

MobileCodeWSSoap mobileCodeWSSoap = factory.getMobileCodeWSSoap();

//调用WebService提供的getMobileCodeInfo方法查询手机号码的归属地

String searchResult = mobileCodeWSSoap.getMobileCodeInfo("18512155752", null);

System.out.println(searchResult);

}

}

运行main方法后:

38534d48e03740593751f304ac3c912b.png

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

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

(1) 将页面另存为

9d2389c8b7e6716fd8a73aef237c9cc8.png

19edf698160436f3619e10eb46ab64fa.png

(2) 将所有的

改成 ,一共有三处需要修改,建议查找,修改时把也要删掉

b74d63f0a39530cdb30e17ae2224fc69.png

(3) 运行命令:

wsimport -keep -s D:\Workspaces -p com.cn.weather -verbose C:\Users\sun\Desktop\WeatherWS.xml

6677bdb76fae6eafeb1d8219b16830f3.png

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

a5efe45e4d82276f5b10dbf0c9f8e7f1.png

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

9fb60012c85db9be3e280b0de9a23107.png

(5) 在该路径下写测试类

package com.cn.weather;

import java.util.List;

public class WeatherWsClient {

public static void main(String[] args) {

//创建一个WeatherWS工厂

WeatherWS factory = new WeatherWS();

//根据工厂创建一个WeatherWSSoap对象

WeatherWSSoap weatherWSSoap = factory.getWeatherWSSoap();

//调用WebService提供的getWeather方法获取南宁市的天气预报情况

ArrayOfString weatherInfo = weatherWSSoap.getWeather("钓鱼岛", null);

List lstWeatherInfo = weatherInfo.getString();

//遍历天气预报信息

for (String string : lstWeatherInfo) {

System.out.println(string);

System.out.println("------------------------");

}

//获得中国省份、直辖市、地区和与之对应的ID

ArrayOfString s = weatherWSSoap.getRegionProvince();

List list = s.getString();

for (String string : list) {

System.out.println(string);

System.out.println("------------------------");

}

}

}

运行main方法后:

c25e77b342ceaec5c27cc4ce5fb7d9f4.png

转载自:http://blog.csdn.net/aqsunkai/article/details/51711087

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值