Web Service 那点事儿



 





Web Service,即Web 服务,简写为 WS,从字面上理解,它其实就是基于 Web 的服务。而服务却是双方的,有服务需求方,就有服务提供方。服务提供方对外发布服务,服务需求方调用服务提供方所发布的服务。其实也就是这些了,没有多少高大上的东西。



本文将从实战的角度,描述使用 Java 开发 WS 的工具及其使用过程。



如果说得再专业一点,WS 其实就是建立在 HTTP 协议上实现异构系统通讯的工具。没错!WS 说白了还是基于 HTTP 协议的,也就是说,数据是通过 HTTP 进行传输的。



自从有了 WS,异构系统之间的通讯不再是遥不可及的梦想。比如:可在 PHP 系统中调用 Java 系统对外发布的 WS,获取 Java 系统中的数据,或者把数据推送到 Java 系统中。



如果您想了解更多关于 WS 的那些概念与术语,可以看看下面的百度百科:



http://baike.baidu.com/view/67105.htm



今天我想与大家分享的主题是,如何在 Java 中发布与调用 WS?希望本文能够对您有所帮助!



1. 使用 JDK 发布 WS



第一步:您要做的第一件事情就是,写一个服务接口。





 




 



在接口上放一个 WebService 注解,说明该接口是一个 WS 接口(称为Endpoint,端点),其中的方法是 WS 方法(称为Operation,操作)。



第二步:实现这个 WS 接口,在实现类中完成具体业务逻辑,为了简单,我们还是写一个 Hello World 意思一下吧。





 




 



第三步:写一个 Server 类,用于发布 WS,直接使用 JDK 提供的工具即可实现。





 




 



只需使用 JDK 提供的 javax.xml.ws.Endpoint 即可发布 WS,只需提供一个 WS 的地址(address),还需提供一个服务实例(helloService)。



现在您就可以运行 Server 类的 main 方法了,会在控制台里看到ws is published的提示,此时恭喜您,WS 已成功发布了!



第四步:打开您的浏览器,在地址栏中输入以下地址:



http://localhost:8080/ws/soap/hello?wsdl



注意:以上地址后面有一个 ?wsdl 后缀,在 Server 类中的 address 里却没有这个后缀。此时,在浏览器中会看到如下 XML 文档:



 





 




 



当看到这份 WSDL 文档时,也就意味着,您发布的 WS 服务现在可以被别人使用了。



2. 通过客户端调用 WS



第一步:使用 JDK 提供的命令行工具生成 WS 客户端 jar 包。



JDK 安装目录下有个 bin 目录,里面存放了大量的命令行工具,只要您的 Path 环境变量指向了该路径,就能在命令控制台上使用 JDK 提供的相关命令。



其中,有一个名为 wsimport 的命令行工具,正是用来通过 WSDL 生成 WS 客户端代码的,您只需要输入以下命令即可:





 




 



对以上三行命令解释如下:




  • 第一行:通过 WSDL 地址生成 class 文件


  • 第二行:通过 jar 命令将若干 class 文件压缩为一个 jar 包


  • 第三行:删除生成的 class 文件(删除根目录即可)



最终您将会得到一份名为 client.jar 的 jar 包,将这个 jar 包配置到您的 classpath 中,方便在下面的代码中使用其中的类。



技巧:可以将以上三行命令放入一个 bat 文件中,在 Windows 中双击即可运行。



第二步:写一个 Client 类,用于调用 WS,需要使用上一步生成的 WS 客户端 jar 包。





 




 



以上这段代码稍微有点怪异,其中 HelloService_Service 是 jar 包中类,可以将其理解为 WS 的工厂类,通过它可以生成具体的 WS 接口,比如,调用 service.getHelloServicePort() 方法,就获取了一个 HelloService 实例,正是通过这个实例来调用其中的方法。



运行 Client 类的 main 方法,就会看到您所期望的结果hello world了,不妨亲自尝试一下吧。



可见,这是一个典型的代理模式应用场景,您实际是面向代理对象来调用 WS 的,并且这是一种静态代理,下面我们来谈谈,如何使用动态代理的方式来调用 WS?



其实 JDK 已经具备了动态代理的功能,对于 WS 而言,JDK 同样也提供了很好的工具,就像下面这段代码那样:





 




 



此时,只需在本地提供一个 HelloService 的接口,无需 client.jar,直接面向 WSDL 编程,只不过您需要分别定义出 serviceName 与 portName 这两个东西,最后才能调用 JDK 提供的 javax.xml.ws.Service 类生成 service 对象,它同样是一个工厂对象,通过该工厂对象获取我们需要的 HelloService 实例。貌似这种方式也不是特别动态,毕竟 HelloService 接口还是需要自行提供的。



3. 总结



通过本文,您可以了解到,不仅可以使用 JDK 发布 WS,也可以使用 JDK 调用 WS,这一切都是那么的简单而自然。但需要注意的是,这个特性是从 JDK 6 才开始提供的,如果您还在使用 JDK 5 或更低的版本,那就很遗憾了,您不得不使用以下工具来发布与调用 WS,它们分别是:




  • JAX-WS RI:https://jax-ws.java.net/


  • Axis:http://axis.apache.org/


  • CXF:http://cxf.apache.org/



当然,发布与调用 WS 的工具不仅仅只有以上这些,而是它们是 Java 世界中最优秀的 WS 开源项目。



本文讲述的 WS 其实是一种 Java 规范,名为 JAX-WS(JSR-224),全称 Java API for XML-Based Web Services,可以将规范理解为官方定义的一系列接口。



JAX-WS 有一个官方实现,就是上面提到的 JAX-WS RI,它是 Oracle 公司提供的实现,而 Apache 旗下的 Axis 与 CXF 也同样实现了该规范。Axis 相对而言更加老牌一些,而 CXF 的前世就是 XFire,它是一款著名的 WS 框架,擅长与 Spring 集成。



从本质上讲,JAX-WS 是基于 SOAP 的,而 SOAP 的全称是 Simple Object Access Protocol(简单对象访问协议),虽然名称里带有简单二字,其实并不简单,不相信您可以百度一下。



为了让 WS 的开发与使用变得更加简单、更加轻量级,于是出现了另一种风格的 WS,名为 JAX-RS(JSR-339),全称 Java API for RESTful Web Services,同样也是一种规范,同样也有若干实现,它们分别是:




  • Jersey:https://jersey.java.net/


  • Restlet:http://restlet.com/


  • RESTEasy:http://resteasy.jboss.org/


  • CXF:http://cxf.apache.org/



其中,Jersey 是 Oracle 官方提供的实现,Restlet 是最老牌的实现,RESTEasy 是 JBoss 公司提供的实现,CXF 是 Apache 提供的实现(上文已做介绍)。



可见,CXF 不仅用于开发基于 SOAP 的 WS,同样也适用于开发基于 REST 的 WS,这么好的框架我们怎能错过?







 


点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

历史上的今天:03月29日

热门专题

卓越综合高中|卓越综合高中
卓越综合高中
国家开放大学|国家开放大学报名,国家开放大学报考,国家开放大学,什么是国家开放大学,国家开放大学学历,国家开放大学学费,国家开放大学报名条件,国家开放大学报名时间,国家开放大学学历,国家开放大学专业
国家开放大学
金诺幼儿园(春城路金诺幼儿园)|昆明官渡区幼儿园,幼儿园报名,官渡区幼儿园,春城路幼儿园,幼儿园招生,学前班,昆明幼儿园,金诺幼儿园,环城南路幼儿园,石井路幼儿园
金诺幼儿园(春城路金诺幼儿园)
中源管业|中源管业,中源管业公司,中源管业有限公司,中源管业电话,中源管业地址,中源管业电力管,中源管业mpp电力管,中源管业cpvc电力管,中源管业pe穿线管
中源管业
昆明网站建设|昆明网站建设,昆明网站开发,昆明网站建设公司,昆明网站建设价格,昆明网站设计,昆明网站制作,网页设计,高端网站建设,高端网站设计
昆明网站建设
云南开放大学|云南开放大学报名,云南开放大学报考,云南开放大学,什么是云南开放大学,云南开放大学学历,云南开放大学学费,云南开放大学报名条件,云南开放大学报名时间,云南开放大学学历,云南开放大学专业
云南开放大学
天麻的功效与作用吃法|天麻的功效与作用,天麻的功效与作用吃法,天麻炖什么治头痛最好,天麻的功效与作用禁忌,天麻多少钱一斤,天麻的功效与作用吃法及禁忌,天麻怎么吃效果最好,天麻粉的功效与作用,天麻怎么吃
天麻的功效与作用吃法
大理科技管理学校|大理科技管理中等职业技术学校,大理市科技管理中等职业技术学校
大理科技管理学校

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部