Java项目调用 WebService

Java 项目调用 WebService

序言:原本接触和二开的 Java 项目都是使用 Spring 框架,并且使用的接口都是 RestFul 风格,今天有一个 Kingdee 项目是使用 WSDL 文件提供接口通过 WebService 的方式来进行接口方式的相互通讯;因为是第一次使用 WebService 方式,所以写下这篇文档留作参考记录。

一. 什么是 WSDL ?

WSDLWeb 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 代码调用测试。

posted @ 2024-04-19 11:10  爱Ni说不出口  阅读(304)  评论(0编辑  收藏  举报