在开发过程中,对接比较老的系统经常需要将 wsdl 文件转换为 java 代码以便与 web 服务进行交互。apache cxf 提供了便捷的方式来完成这一任务。
本文将详细介绍如何使用 cxf 添加相关依赖,并通过两种方法将 wsdl 文件转换为 java 代码。最后,我们将展示如何调用生成的 webservice 服务接口。
1.添加依赖
<dependency> <groupid>org.apache.cxf</groupid> <artifactid>cxf-spring-boot-starter-jaxws</artifactid> <version>3.5.8</version> </dependency> <dependency> <groupid>org.apache.cxf</groupid> <artifactid>cxf-rt-transports-http</artifactid> <version>3.5.8</version> </dependency>
2.wsdl转java代码,这有两种方式
第一种,使用bat命令转换
wsimport -keep http://10.1.1.1:8080/webservice/111/service/webservice?wsdl
第二种,使用maven插件实现(版本尽量和cxf依赖版本一致)
<plugin> <groupid>org.apache.cxf</groupid> <artifactid>cxf-codegen-plugin</artifactid> <version>3.5.8</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <sourceroot>src/main/resources/cxf</sourceroot> <wsdloptions> <wsdloption> <wsdl>http://10.1.1.1:8080/webservice/111/service/webservice?wsdl</wsdl> </wsdloption> </wsdloptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin>
wsdl为这种格式,类似接口文档
转换为下图这种(其中get set都是方法)
3.这是转换后的webservice类
其中name是web service的本地名称,targetnamespace指定了web service的目标命名空间,wsdllocation指定了wsdl文档的位置,servicename是wsdl中定义的服务的名称,portname指定了wsdl中定义的端口的名称。
@webserviceclient(name = "webservice", targetnamespace = "http://service.xxx", wsdllocation = "http://10.1.1.1:8080/webservice/111/service/webservice?wsdl") public class webservice extends service { private final static url webservice_wsdl_location; private final static webserviceexception webservice_exception; private final static qname webservice_qname = new qname("http://service.xxx", "webservice"); static { url url = null; webserviceexception e = null; try { url = new url("http://10.1.1.1:8080/webservice/111/service/webservice?wsdl"); } catch (malformedurlexception ex) { e = new webserviceexception(ex); } webservice_wsdl_location = url; webservice_exception = e; } public webservice() { super(__getwsdllocation(), webservice_qname); }
4.我们需要使用webservice去调用getwebservicehttpport这个方法
找到要调用的方法名,把参数传进去(name,password,data),data是要传输的数据
webservice webservice = new webservice(); webserviceporttype port = webservice.getwebservicehttpport(); string result = port.sethtinfo(checcmdusername, checcmdpassword, data); system.out.println("result: " + result); if(result.contains("成功")){ log.info("---------------同步成功!---------------"); return true; }else { log.info("---------------同步失败!---------------"); return false; }
通过上述步骤,我们可以轻松地将 wsdl 文件转换为 java 代码,并使用生成的类调用 web 服务接口。
无论是通过批处理命令还是使用 maven 插件,cxf 都提供了灵活且强大的工具来简化这一过程。
总结
希望本文能帮助你在实际项目中更高效地进行 web 服务开发和集成。
以上为个人经验,给大家一个参考,也希望大家多多支持代码网。
发表评论