Java调用WebService接口---使用CXF进行简化操作

上一篇介绍了使用JAXBContent进行Bean、Xml转换,从而进行WebService调用,这种方法的弊处在于要程序员自己写Xml注解,还要自己发送请求,处理响应。
好在这个问题业界已经有现成的解决方案了,即CXF。这个东西用起来太方便了,很快就能完成一套WebService接口调用方案。所以说遇到问题先去网上搜一搜有没有现成的解决方案是很有意义的。这个比自己闷头造轮子写出来的要快多了。特别是像Java这种很成熟的技术体系。
CXF能做的事情很多,这里不想谈。只是说明如何使用它调用WebService接口。

CXF不会让程序员手写Xml注解,相反,它可以按照WSDL文档自动生成带有注解的Java类,这就大大降低了我们的工作量

利用wsdl生成java类

  1. 下载apache-cxf: http://cxf.apache.org/download.html
  2. 解压,进入bin目录,执行命令
wsdl2java.bat -p cn.hewie.web.bean -client -encoding utf-8 -noAddressBinding https://infotrack.naqelexpress.com/NaqelAPIServices/NaqelAPIDemo/5.0/XMLShippingService.asmx?wsdl

-p 指定生成java类的目录结构
最后的参数指定wsdl路径

产生出来的有个类名比较长的以 _Client 结尾的java 文件 就是调用的测试文件, 里面包含 main 方法。
将生成的java类拷贝到项目中即可使用

SpringBoot引入cxf

maven中添加

org.apache.cxf
cxf-spring-boot-starter-jaxws
3.2.4

代码使用

java代码中可以很方便的调用cxf,例如静态调用如下

JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean(); // 代理工厂
jaxWsProxyFactoryBean.setAddress("https://infotrack.naqelexpress.com/NaqelAPIServices/NaqelAPIDemo/5.0/XMLShippingService.asmx?wsdl");//wsdl地址
jaxWsProxyFactoryBean.setServiceClass(XMLShippingServiceSoap.class); // 设置service
XMLShippingServiceSoap xmlShippingServiceSoap = (XMLShippingServiceSoap) jaxWsProxyFactoryBean.create(); // 生成service

ClientInformation clientInformation = new ClientInformation();
clientInformation.setClientID(1);
boolean waybillExists = xmlShippingServiceSoap.isWaybillExists(clientInformation, 1); // 调用service的方法
System.out.println(waybillExists); // 结果

个人感觉使用cxf最大的优点在于自动生成的类,可以直接像本地调用一样调用远程的方法。

发布了136 篇原创文章 · 获赞 94 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/somehow1002/article/details/83027865