Java
项目调用 WebService
序言:原本接触和二开的
Java
项目都是使用Spring
框架,并且使用的接口都是RestFul
风格,今天有一个Kingdee
项目是使用WSDL
文件提供接口通过WebService
的方式来进行接口方式的相互通讯;因为是第一次使用WebService
方式,所以写下这篇文档留作参考记录。
一. 什么是 WSDL
?
WSDL
( Web Services Description Language
)是为描述 Web
服务发布的 XML
格式。 W3C
组织( World Wide Web Consortium
)没有批准1.1版的 WSDL
,当前的 WSDL
版本是2.0,是 W3C
的推荐标准( recommendation
)(一种官方标准),并将被 W3C
组织批准为正式标准。
WSDL
描述 Web
服务的公共接口。这是一个基于 XML
的关于如何与 Web
服务通讯和使用的服务描述;也就是描述与目录中列出的 Web
服务进行交互时需要绑定的协议和信息格式。通常采用抽象语言描述该服务支持的操作和信息,使用的时候再将实际的网络协议和信息格式绑定给该服务。
二. WSDL
的组成和元素
2.1 组成: WSDL
文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成
2.2 元素: WSDL
元素基于 XML
语法描述了与服务进行交互的基本元素
Type
(消息类型):数据类型定义的容器,它使用某种类型系统(如XSD
)Message
(消息):通信数据的抽象类型化定义,它由一个或者多个 part 组成Part
(消息参数)Operation
(操作):对服务所支持的操作进行抽象描述,WSDL
定义了四种操作- 单向(
one-way
):端点接受信息 - 请求-响应(
request-response
):端点接受消息,然后发送相关消息 - 要求-响应(
solicit-response
):端点发送消息,然后接受相关消息 - 通知(
notification
):端点发送消息
- 单向(
Port Type
(端口类型):特定端口类型的具体协议和数据格式规范Binding
:特定端口类型的具体协议和数据格式规范Port
:定义为绑定和网络地址组合的单个端点Service
:相关端口的集合,包括其关联的接口、操作、消息等
三. WSDL
的作用
简单来说,就是你写的代码,需要被其他第三方调用时,提供的一部分源代码为 WSDL
文件,别人可以通过 WSDL
文件生成 Java
代码进行调试
四. WSDL
文件如何生成
4.1 要在需要生成的类上,加上 @WebService
注解
import javax.jws.WebService;
@WebService
public class TestWsdl {
public String TestString(String str) {
return "这个是TestString方法的返回内容,这个是你输入的值:" + str;
}
}
4.2 使用 Endpoint.publish
将接口发布,第一个参数为浏览器需要调用的地址,第二个参数是要发布的类
import javax.xml.ws.Endpoint;
public class DeployWsdl {
public static void main(String[] args) {
Endpoint.publish("http://localhost:16888/kingdee/test", new TestWsdl());
}
}
4.3 访问连接,保存 WSDL
文件
访问以下链接,组成方式为,在上边提到的 Endpoint.publish
第一个参数加 ?wsdl
http://localhost:16888/kingdee/test?wsdl
得到以下结果,将红色框住的内容保存至文件,后缀为 .wsdl
,例如: test.wsdl
到此,可以将生成的 WSDL
文件提供给第三方,供第三方调试系统
五. 如何将 WSDL
文件生成 Java
代码
5.1 Java
环境变量(需要用到 wsimport
)
确定 Java
环境变量正确的配置,确保 wsimport
命令可以使用
5.2 生成目录
WSDL
文件的位置无所谓,放在哪里都可以,只需要在执行 wsimport
命令时输入 WSDL
文件所在目录即可。
例如我的 test.wsdl
文件存放的路径为: D:\wsdlFiles
5.3 执行 wsimport
生成代码
# -p 可以指定现在的项目包名,否则就是WSDL文件的原包路径。例如:wsimport -keep -p com.test test.wsdl
wsimport -keep test.wsdl
六. 如何调用生成的 Java
代码
6.1 新建 Java
工程,手动删除 .class
文件并导入 Java
代码
6.2 Main
类的 main
方法调用
import com.test.TestWsdl;
import com.test.TestWsdlService;
public class Main {
public static void main(String[] args) {
TestWsdl testWsdl = new TestWsdlService().getTestWsdlPort();
System.out.println(testWsdl.testString("Invoke Generated Code Through WSDL File!"));
}
}
到此,可以将第三方提供的 WSDL
文件编译为 Java
代码调用测试。