这篇文章,主要介绍如何使用JWS实现WebService接口的发布和调用。

目录

一、JWS实现WebService接口

1.1、JWS发布WebService接口

(1)编写接口

(2)编写实现类

(3)发布WebService接口

(4)运行测试

1.2、JWS调用WebService接口

(1)通过wsimport生成代码

(2)复制代码

(3)编写调用WebService代码

1.3、注意的问题


什么是WebService接口呢???这篇文章不介绍,具体可以看下【WebService百度百科】。

一、JWS实现WebService接口

1.1、JWS发布WebService接口

JDK中提供了专门用于操作WebService接口的类,它位于【javax.jws】包下面,JWS是一个实现WebService接口的轻量级方式,JWS是JDK自带的,无需引入第三方的jar包依赖,下面介绍如何通过JWS实现WebService接口的对外发布。

(1)编写接口

package ws;import javax.jws.WebMethod;
import javax.jws.WebService;/*** @author ZhuYouBin* @version 1.0.0* @Date: 2022/9/20 22:33* @Description WebService 接口服务端,提供 WebService 服务的*/
@WebService
public interface WsServer {// 对外提供的接口方法@WebMethodpublic String demo(String xml);
}

(2)编写实现类

package ws;import javax.jws.WebMethod;
import javax.jws.WebService;/*** @author ZhuYouBin* @version 1.0.0* @Date: 2022/9/20 22:40* @Description*/
@WebService // 标记当前类作为WebService接口服务
public class WsServerImpl implements WsServer{@WebMethod // 标记当前方法是对外发布的WebService接口方法@Overridepublic String demo(String xml) {System.out.println("调用WebService接口的demo方法.....");return "调用成功,xml=" + xml;}}

(3)发布WebService接口

前面两个步骤仅仅是定义了一个WebService接口,要想让其他应用访问到,首先需要将这个WebService接口对外发布,只有发布了,才能够让其他的应用程序访问到。

package ws;import javax.xml.ws.Endpoint;/*** @author ZhuYouBin* @version 1.0.0* @Date: 2022/9/20 22:44* @Description*/
public class WsMain {public static void main(String[] args) {// 定义发布地址, 没有要求,可以任意String address = "http://127.0.0.1:9090/wsService";// 创建需要发布的WebService接口对象WsServer wsServer = new WsServerImpl();// 发布服务Endpoint.publish(address, wsServer);System.out.println("WebService接口发布成功,访问地址是:" + address);}
}

(4)运行测试

运行上面的main方法,此时可以看到控制台输出成功日志。

打开浏览器,访问:【http://127.0.0.1:9090/wsService?wsdl】地址,查看WebService接口的WSDL描述文档,如果可以访问到下图内容,那么就说明WebService接口已经发布成功了。

以上,就是通过JWS实现WebService接口的发布,既然发布了WebService接口,那么其他应用程序要如何通过JWS来调用接口呢???

1.2、JWS调用WebService接口

(1)通过wsimport生成代码

通过前面的步骤,我们已经完成了WebService接口的发布,访问WSDL地址后,我们能够获取到WebService接口的相关接口文档描述,里面包含了接口命名空间、接口名称、接口的出入参等等内容。

客户端要调用WebService接口,那就需要根据WSDL文档获取到接口地址,接口入参等内容,然后发起接口调用,显然这一个过程就需要解析WSDL的XML文档内容了,因为WebService接口服务对外暴露的只有这一个wsdl接口地址,我们也就只能够从这个接口地址里面获取到需要的信息。

JDK中提供了一个命令可以帮助我们生成WebService接口的客户端代码,从而实现WebService接口的调用,这个命令就是:【wsimport.exe】。

【wsimport.exe】命令是位于JDK安装目录下的【bin】目录中,如下所示:

我们只要在cmd命令行中执行wsimport命令即可生成WebService接口的客户端代码,wsimport命令需要的参数如下所示:

【wsimport】命令参数:

  • 【-d】参数:用于指定生成的客户端代码的目录路径(注意:目录必须要存在,否则会报错)。
  • 【-keep】参数:这个参数表示需要生成java源代码,如果没有指定这个参数,那么默认是只会生成class字节码文件。
  • 【-verbose】参数:使用这个参数之后,我们可以在cmd命令行中查看到具体的代码生成日志信息。
  • 【wsdl】参数:这个就是具体WebService接口的地址。

【wsimport】命令的完整格式:

// 完整的命令
wsimport.exe -d E:\demo -keep -verbose http://127.0.0.1:9090/wsService?wsdl// 部分参数: cmd命令行里面不显示生成代码的日志信息
wsimport.exe -d E:\demo -keep http://127.0.0.1:9090/wsService?wsdl// 部分参数:不生成java源代码,只会生成class字节码文件
wsimport.exe -d E:\demo -verbose http://127.0.0.1:9090/wsService?wsdl

执行完整的wsimport命令如下所示:

执行部分参数的wsimport命令,cmd命令行里面不显示生成代码的日志信息:

上面两种命令的执行方式完成后,可以在对应的目录中查看到生成的代码文件:

执行部分参数的wsimport命令,不生成java源代码,只会生成class字节码文件:

查看生成的代码文件,如下所示:

通过以上的方式就可以生成WebService接口的客户端代码啦。

(2)复制代码

上面已经将客户端代码生成好了,那么我们就可以将生成的java源代码复制到我们的工程里面,在工程中创建一个【client】包,然后将生成的java源文件复制到client包下面。

打开【WsServerImpl】接口代码,然后找到里面的@RequestWrapper和@ResponseWrapper注解中的className属性,将className的属性值修改为正确的包路径。

如果没有修改成相同的,那么运行的时候会报错。

(3)编写调用WebService代码

客户端代码已经复制到工程里面了,现在创建一个【WsClient.java】类,这个类里面就是编写调用WebService接口的具体代码逻辑。

package ws.client;/*** @author ZhuYouBin* @version 1.0.0* @Date: 2022/9/21 22:36* @Description JWS 实现 WebService 接口的调用*/
public class WsClient {public static void main(String[] args) {// 1、创建 WebService 接口对象WsServerImplService wsServerImplService = new WsServerImplService();WsServerImpl wsServerImpl = wsServerImplService.getWsServerImplPort();// 2、调用接口String ret = wsServerImpl.demo("<xml>hello world.</xml>");System.out.println("这是接口返回的参数: " + ret);}
}

运行上面测试代码,查看控制台输出结果。

1.3、注意的问题

wsimport目录生成的代码会根据WSDL文档中的【targetNamespace】目标命名空间创建对应的包路径。

如果你的命名空间是【com.demo.ws】,那么生成的代码就会放到【com/demo/ws】目录里面。

【targetNamespace】命名空间默认是根据服务端WebService接口所在的包路径决定的。也可以通过@WebService注解的targetNamespace属性进行指定。

// 指定发布的命名空间
@WebService(targetNamespace = "http://ws.demo.test.com")

注意,在复制生成的代码到工程中的时候,那些代码的包路径一定不要弄错了,不然运行的时候可能会报错。

以上,就是通过Java语言提供的JWS实现WebService接口的发布和调用的具体步骤(tips:JWS应该就是【Java WebService】的缩写)。

综上,这篇文章结束了,主要介绍使用JWS实现WebService接口的发布和调用。

【WebService笔记01】使用JWS实现WebService接口的发布和调用相关推荐

  1. Webservice接口的生成及调用

    最近项目上要对接一个Webservice形式的接口,因为以前一直没有对接过这种类型的,所以这次专门查了一些资料学习下 一.Webservice的简单介绍 WebService是一种跨编程语言和跨操作系 ...

  2. WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单

    现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web系统,这样的业务需求自然需要通过WebService ...

  3. [转] WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单

    以下文章来自   http://www.blogjava.net/jacally/articles/186655.html 现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了 ...

  4. JWS实现WebService

        WebService估计大家都有听过或者使用过.Java有几种常用的方式实现webservice,本文主要是讨论JWS实现. 什么是webservice     简单而言,webservice ...

  5. 基于CXF框架的webservice接口发布与调用

    目录 前言 正文 一,开发接口服务端(soap风格),接收SAP系统推送过来的数据 二,调用SAP提供的webservice接口(soap风格) 三,调用SRM系统提供的rest接口 四,接口调试工具 ...

  6. webservice学习01:wsdl文档结构

    webservice学习01:wsdl文档结构 wsdl文档结构 WSDL文档示例 <wsdl:definitions xmlns:xsd="http://www.w3.org/200 ...

  7. C#获取WebService接口的所有可调用方法[WebMethod]

    C#获取指定的WebService接口的所有可调用方法,将其绑定的树图控件(TreeView)中,我们引用天气WebService服务为例,联网情况下均可用. PS:天气WeatherWebServi ...

  8. java中使用axis发布和调用webService

    axis1.4版本编写调用webservice接口 第一步:引入jar包 <!-- axis --><dependency><groupId>org.apache. ...

  9. MyBatis-学习笔记01【01.Mybatis课程介绍及环境搭建】

    Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...

最新文章

  1. 全链路压测体系建设方案的思考与实践
  2. 随机森林及重要参数解析
  3. 机器学习入门之机器学习sklearn中的train_test_split()函数
  4. apache开启.htaccess
  5. 定义一个包含增强方法的javaBean(最终增强)
  6. 解析邮件归档技术 保护企业邮件安全(三)
  7. 腾讯云服务器的环境配置与使用
  8. 在win7 64位上安装VS2015的问题汇总
  9. matlab如何拟合方程,如何用MATLAB拟合曲线来求参数?
  10. HTTP接口设计规范
  11. WordStream:谷歌广告各指标分析
  12. 01、锁相环基本工作原理
  13. 2022下半年软件设计师中级考试通过
  14. 机器学习入门系列05,Classification: Probabilistic Generative Model(分类:概率生成模型)
  15. 【附源码】Python计算机毕业设计社区志愿者管理系统
  16. 嵌入式菜单LCD简单版
  17. 软件项目管理课程复习题
  18. miui10.2.2 或以上的小米手机上照片旋转问题及解决
  19. spring注册Bean的几种方式
  20. 植王分享:养兰花的十大好处

热门文章

  1. oracle rebuild online,Oracle index rebuild online 与 rebuild 及 drop index 后重建
  2. 你了解函数调用过程吗?
  3. OpenCV-Python的文本透视矫正与水平矫正
  4. [023] Matlab的各种图像滤波降噪处理
  5. [转载]Android性能优化来龙去脉总结
  6. 物联网卡和流量卡网速对比,看看谁更强?
  7. c语言程序设计学校运动会管理系统,C++实现学校运动会管理系统
  8. 百行代码手撸扫雷(下)c/c++
  9. 机器学习从入门到创业手记-sklearn基础设计
  10. 拨测技术确保网络稳定性和服务质量