wsimport是jdk自带的命令,可在jdk/bin目录下找到wsimport.exe,根据wsdl文档生成客户端中间代码,基于生成的代码编写客户端,可以省很多麻烦。
(本文服务端代码链接:http://blog.csdn.net/qq_32672633/article/details/77948222)
在配有jdk环境的,进入命令行执行 wsimport 命令生成客户端代码,具体内容如下:
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为http://localhost:12345/aservice?wsdl,那么在E:\temp下,生成包结构为com.nantian.ws的ws.jar的命令为:
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
不同的方式,都能得到想要的结果。