项目中开发要调用另个系统的webservice服务
可以利用wsdl2java工具结合SoapUI工具生成webservice的客户端代码 自己写起来太麻烦了
需要的工具
- apache-cxf-3.3.7
- SoapUI 5.4.0-EB
- webservice的wsdl文件(url打开右键另存为以 .wsdl 结尾即可)
首先安装SoapUI 打开 file-new SOAP project
红框选择需要生成代码的wsdl文件即可
右键项目
配置cxf
然后点击 Generate 按钮即可生成代码
即成功生成了文件
下面是使用cxf调用的代码
需要引用cxf的jar包:
Gradle:
compile group: 'org.apache.cxf', name: 'cxf-spring-boot-starter-jaxws', version: '3.3.4'
Maven:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.3.4</version>
</dependency>
调用的代码
//clazz参数传入生成代码中的接口即可得到调用的service
/**
* 获取webservice的服务
* @param clazz
* @param url webservice的url地址
* @param userName 需要的用户名
* @param password 密码
* @param connTimeout
* @param recTimeout
* @param <T>
* @return
*/
public <T> T getSapWebService(Class<T> clazz,String url,String userName,String password,Long connTimeout,Long recTimeout) {
// 用于创建JAX-WS代理的工厂,此类提供对用于设置代理的内部属性的访问。使用它可以提供比标准JAX-WS API更多的控制。
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//地址
factory.setAddress(url);
//用户名密码验证
factory.setUsername(userName);
factory.setPassword(password);
factory.setServiceClass(clazz);
// 创建可用于进行远程调用的代理对象。
T service = (T) factory.create();
// 通过代理对象获取本地客户端
Client proxy = ClientProxy.getClient(service);
// 通过本地客户端设置 网络策略配置
HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
// 用于配置客户端HTTP端口的属性
HTTPClientPolicy policy = new HTTPClientPolicy();
// 超时控制 单位 : 毫秒
if (StringsExpand.isNotEmpty(connTimeout)&&connTimeout>0){
policy.setConnectionTimeout(connTimeout); //连接超时时间
}
if (StringsExpand.isNotEmpty(recTimeout)&&recTimeout>0){
policy.setReceiveTimeout(recTimeout);//请求超时时间.
}
conduit.setClient(policy);
return service;
}
下面第二种方式生成客户端调用代码
1、JDK环境
2、下载apache-cxf发布包,目前最新版本为3.1.7,解压发布包,设置CXF_HOME,并添加%CXF_HOME %/bin到path环境变量。或者直接apache-cxf的目录添加到path变量
3、CMD命令行输入wsdl2java -help,有正常提示说明环境已经正确配置。
生成客户端代码
cmd执行如下命令即可生成webservice客户端调用需要代码 调用方法同上
CMD界面执行如下命令即可:
wsdl2java -encoding utf-8 -d D:\workspace\demo C:\Users\user\Desktop\webservice\wsdl2\aaa.wsdl
D:\workspace\demo为输出目录
C:\Users\user\Desktop\webservice\wsdl2\aaa.wsdl为wsdl文件