Java项目调用 WebService
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 代码调用测试。
本文来自博客园,作者:爱Ni说不出口,转载请注明原文链接:https://www.cnblogs.com/ArtherLee/p/18145388

浙公网安备 33010602011771号