首页 > 编程语言 >Java项目调用 WebService

Java项目调用 WebService

时间:2024-04-19 11:27:04浏览次数:34  
标签:文件 调用 Java WebService test WSDL wsdl

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

标签:文件,调用,Java,WebService,test,WSDL,wsdl
From: https://www.cnblogs.com/ArtherLee/p/18145388

相关文章

  • java 编译问题
    背景我在maven中配置了私有仓库地址后,发现一些包还是会从外网拉,耗时很长。mirror配置为:<mirrors><id>mynexus</id><name>mynexusname</name><mirrorOf>central</mirrorOf><url>http://mynexus.aaa.com/nexus/repositry/test/</url><......
  • day15_我的Java学习笔记 (Collection、数据结构、List、泛型深入)
    1.集合概述2.Collection集合的体系特点3.Collection集合常用API1.添加元素,添加成功返回true,失败返回false2.清空集合的元素3.判断集合是否为空,是空返回true,反之为false4.获取集合的大小5.判断集合中是否包含某个元素6.删除某个元素(......
  • 使用bat切换java版本环境变量
    使用bat切换java版本环境变量需求有多个项目,每个项目依赖的java版本不同,需要切换java版本。或者想试用java新版本新特性,需要切换java版本。针对以上情况,Windows情况虽然修改一下环境变量JAVA_HOME即可,但也相对繁琐,一开始在找有没有类似nvm这种工具,但是找的过程看到一篇文章......
  • Java的六种线程状态及代码示例
    Java的线程有6个状态,分别是NEW           新建状态。刚new出来的thread,还没有调用start,就是这个状态RUNNABLE     运行状态(分为运行中和就绪)。正在运行,或者等待CPU调度,调用完start,就是这个状态BLOCKED       阻塞状态。还未竞争......
  • Java开发者如何使用RunFlow内置的QLExpress
    本文是为Java开发者写的手册,如果您不是Java开发者可以阅读我们的开发者篇手册,当然如果您感兴趣也可以继续阅读。输入qe进入QLExpress专注模式。执行Java代码比如数学计算:Math.sin(9);执行结果:0.4121184852417566。比如读取系统环境变量:top.myrest.myflow.util.Jackson......
  • JavaScript本地存储的方式有哪些
    Web存储技术1.localStorage特点:长期存储,除非手动删除否则会一直保存在浏览器中,清除缓存或卸载浏览器后消失。存储语法:window.localStorage.setItem(名字,值)获取语法:window.localStorage.getItem(名字)删除语法:window.localStorage.removeItem(名字)作用:删除localStorage......
  • Java BigDecimal出现科学计数法
    JavaBigDecimal出现科学计数法查看BigDecimal的toString()源码,可以发现出现toString()出现科学计数法的原因 privateStringlayoutChars(booleansci){...intcoeffLen=coeff.length-offset;longadjusted=-(long)scale+(coeffLen-1);......
  • java动态代理模式
    Java动态代理模式是Java编程语言中的一种设计模式,它提供了一种在运行时动态创建代理对象的方式。这个模式主要用于实现AOP(面向切面编程)的概念,允许开发者在不修改原有业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理、权限验证等。在Java中,动态代理模式主要依赖于java.l......
  • JavaScripts浮点数计算问题
    JS数学运算精度问题最近项目上JS做加减乘除这类的运算出现了精度不匹配的问题:例如:0.1+0.2->0.300000000000000040.3-0.2->0.099999999999999980.3*2->0.60.3*0.20.060.3/3->0.09999999999999999Mathjs这个JS库可以解决这类问题:官网链接以下是详细的步骤:终端执......
  • 3.Java基础学习
    Java基础注释单行注释多行注释文档注释publicclassHelloworld{publicstaticvoidmain(String[]args){//单行注释////输出一个HelloworldSystem.out.println("Helloworld");/*多行注释多行注释......