利用JAX-WS开发Web服务
利用JAX-WS开发Web服务
本文提供了一个使用Java如何开发基于SOAP的Web Services,其客户端可以是Perl、Ruby、Python或Java等。
Java SE 6封装了JAX-WS(Java API for XML-Web Services),而JAX-WS同时支持基于SOAP的Web服务和REST风格的Web服务。JAX-WS通常可简写为JWS,当前,JWS的版本为2.x。
基于SOAP的Web服务可用单个Java类的实现,但是最好是用“接口+实现”的方式来实现最佳。
Web服务的接口称为SEI,即Service Endpoint Interface;
而Web服务的实现称为SIB,即Service Implementation Bean。
SIB可以是一个POJO,也可以是无状态的会话EJB。本文的SIB是普通Java类,通过JDK 6的类库即可实现Web服务的发布。
代码1:服务接口类SEI
package myweb.service; import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; @WebService @SOAPBinding(style=Style.RPC) public interface TimeServer { @WebMethod String getTimeAsString(); @WebMethod long getTimeAsElapsed(); }
代码2:服务实现类SIB
package myweb.service; import java.text.DateFormat; import java.util.Date; import javax.jws.WebService; @WebService(endpointInterface = "myweb.service.TimeServer") public class TimeServerImpl implements TimeServer { /** * 返回从1970年1月1日0点0时0分起的毫秒数 */ public long getTimeAsElapsed() { return new Date().getTime(); } /** * 返回如“2009-12-21”格式的日期 */ public String getTimeAsString() { Date date = new Date(); DateFormat df = DateFormat.getDateInstance(); return df.format(date); } }
代码3:服务发布类Publisher
package myweb.service; import javax.xml.ws.Endpoint; public class TimeServerPublisher { public static void main(String[] args){ // 第一个参数是发布的URL // 第二个参数是SIB实现 Endpoint.publish("http://127.0.0.1:10100/myweb", new TimeServerImpl()); } }
编译以上代码:
javac myweb/service/*.java
运行服务:
java myweb/service/TimeServerPublisher
在浏览器地址栏输入:
http://localhost:10100/myweb?wsdl
显示如下图所示:
也可编写客户端代码测试服务。
Java客户端:
package myweb.client; import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; import myweb.service.*; public class TimeClient { public static void main(String[] args) throws Exception{ URL url = new URL("http://localhost:10100/myweb?wsdl"); // 第一个参数是服务的URI // 第二个参数是在WSDL发布的服务名 QName qname = new QName("http://service.myweb/","TimeServerImplService"); // 创建服务 Service service = Service.create(url, qname); // 提取端点接口,服务“端口”。 TimeServer eif = service.getPort(TimeServer.class); System.out.println(eif.getTimeAsString()); System.out.println(eif.getTimeAsElapsed()); } }
运行客户端,显示结果如下:
2009-12-21
1261402511859
也可用Ruby编写客户端,如下:
#!/usr/bin/ruby # one Ruby package for SOAP-based services require 'soap/wsdlDriver' wsdl_url = 'http://127.0.0.1:10100/myweb?wsdl' service = SOAP::WSDLDriverFactory.new(wsdl_url).create_rpc_driver # Save request/response messages in files named '...soapmsgs...' service.wiredump_file_base = 'soapmsgs' # Invoke service operations. result1 = service.getTimeAsString result2 = service.getTimeAsElapsed # Output results. puts "Current time is: #{result1}" puts "Elapsed milliseconds from the epoch: #{result2}"
运行结果相同!
利用JAX-WS开发Web服务相关推荐
- 用 ASP.NET 开发 Web 服务的五则技巧
(转的,作者不详) 一.禁用HTTP POST/GET协议 除非另外指定,否则,.NET将试图把Web服务绑定到三种协议:HTTP/POST.HTTP/GET和SOAP.之所以说"试图&qu ...
- ASP.NET编程技术-用ASP.NET开发Web服务的五则技巧
ASP.NET编程技术-用ASP.NET开发Web服务的五则技巧 ------------------------------------------------------------------- ...
- [转载]SUN ONE 开发 WEB 服务
SUN ONE 开发 WEB 服务 实施摘要 本文对在北美的一家最大能源公司TransCanada PipeLines Limited的原型Web服务实现做了高层次的技术回顾.TransCanada的 ...
- 微信小程序开发实战3 使用Go语言开发Web服务
3.使用Go语言开发Web服务 微信小程序提供了一系列服务端API用以配合小程序前端来完成相应的功能,以及帮助开发者进行各类数据分析.业务管理和信息查询等操作.例如小程序用户信息的获取就是通过服务端A ...
- java 利用JAX-RS快速开发RESTful 服务
JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/jsr/detail?id=311 .从 ...
- golang打包HTML为Android,使用Go开发Web服务,并打包html/js/css等静态资源文件
Go的高性能,使它天生适合开发io方面的服务,Web服务当然不再话下.同时,Go编译后生成的单文件不是字节码,而是对应平台的机器码,因此它效率更高.资源占用更低. 为了更好的进程程序管理,移动程序时更 ...
- python bottle框架搭建_python开发web服务 bottle框架
开发功能不是特别复杂的web服务,可以考虑使用bottle框架.原因:一.Python开发效率高呀!不信你比比同样的功能Python几行可以搞定?换java试试?换C++试试?作为这几种语言都使用过的 ...
- 使用 Flex 开发 Web 服务客户端
写了很多的flex调用 web服务的程序,也有很多体会,只是没总结过(以前写过一个完整的flex版手机网站,用axis做web服务的,可惜啊!),现在IBM的developerWorks发表了一篇讲的 ...
- 一个Axis2 + eclipse开发Web服务的例子SayHi
快速开始 1.1创建webApps项目 启动Eclipse,新建立一个WebApps(File->New->Project->动态Web Project),给Project Name ...
最新文章
- MESI协议为何会引发 有序性、可见性的问题
- IOS错误总结:Unknown type name 'CGRect';did you mean 'Rect'
- 利用freopen()函数和fc命令简化程序调试
- 1.4 为什么深度学习会兴起-深度学习-Stanford吴恩达教授
- 拿了 30K 的 offer!
- 法学教授:洋文凭情结是对教育体制的嘲弄
- Sqoop(四)增量导入、全量导入、减量导入
- matlab图像处理函数大全
- Linux的cifs(samba)文件服务
- Android AlarmManager设置多个定时事件时只最后一个有效问题解决
- 原创 leetcode[349]两个数组的交集/ Intersection of Two Arrays 哈希策略
- 基于案例学SQL优化-全套视频教程免费下载
- 电脑录屏的html文件,怎样用电脑录制网页上的视频? 屏幕录像的实用方法
- 6. DICOM图像显示-DCMTK-像素数据获取的三种方式和源码分析
- 网络防火墙的配置与管理
- ESP8266学习笔记(3)——GPIO接口使用
- c语言中字母大写转小写,C语言中字母大小写转换的简单操作
- wxpython中表格顶角怎么设置,wxpython listctrl并修复列宽
- java使用geotools读取shp文件
- 冠军专访:是情侣,更是夺冠道路上的最佳伙伴