Web Service在java领域,AXIS因其容易使用,很多项目都使用了它,对于Sun提供的Web Service技术,则不多使用,现更新有关版本,重新使用了一下Sun提供的JWSDP,并写了这篇入门.供需要者参考.
一 Sun公司的Web Service Web服务是基于web的使用开放的基于xml标准的企业应用,是和调用客户端交换数据的传输协议,Java技术和WEB服务被组织成这些亚类:
Java Web Services Developer Pack (Java WSDP)
Java API for XML-Based RPC (JAX-RPC)
Java API for XML Registries (JAXR)
Java API for XML Processing (JAXP)
Java Architecture for XML Binding (JAXB)
SOAP with Attachments API for Java (SAAJ)
XML and Web Services Security
JAX-RPC代表基于xml远程过程调用的java API,是一项为构建使用RPC和XML的Web服务和客户端的技术,通常用于分布式的CS模式中,它是一种RPC机制能使客户端执行其他系统上的过程.
在JAX-RPC中,一个RPC由基于XML协议如SOAP表示,这个SOAP规范定义了一个信封结构,编码规则以及为代表远程调用和响应的协定.这些调用和响应作为SOAP消息在HTTP上传输.
尽管SOAP消息复杂,但JAX-RPC API向应用开发者隐藏了这些复杂性.在服务器端,开发者指定那个调用过程是通过用java语言写的接口定义的方法, 开发者还要编码一个或多个实现这些方法的类.客户端程序也容易编码:一个客户端创建一个代理(一个代表服务的本地对象),然后简单的在那个代理上调用那个方法.使用JAX-RPC,开发者不用生成或分析SOAP消息,这是JAX-RPC运行时系统做的事情:它在来往的API调用和响应到SOAP消息之间进行转换.
使用JAX-RPC,客户端和web services有一个巨大的好处:java编程语言的平台独立性.此外,JAX-RPC没有限制: 一个JAX-RPC客户端能访问一个并不在java平台上运行的web服务,反之亦然.这个灵活性是可能的以为JAX-RPC使用由W3C定义的技术:HTTP, SOAP,WSDL. WSDL为把一个服务在消息上描述为一套端点操作指定了一个XML格式.
二 SUN提供的WEB服务构建工具 J2EE提供了APIs和创建,发布可互操作WS和客户端的工具,其中JAX-RPC(SI)标准实现提供了wscompile 和 wsdeploy 工具,使你开发,发布,调用Web Service:
1 wscompile可接受两种输入:WSDL和Service Endpoint Interface,输出为可移植制品和model文件.
2 wsdeploy只有一种输入:包括wscompile输入和输出再加上一个部署描述符文件,输出是可发布的特定平台上的web service.
这些工具同Java WSDP一起打包可供使用,java web服务开发包是一个免费的集成工具箱,用它构建,测试,发布XML应用,web服务以及带有最新web服务技术和标准实现的web应用.
(一) wscompile工具
1 工具介绍
它生成由JAX-RPC运行时需要的各种客户端和服务端制品以供开发,部署,调用一个Web服务. 这个工具有两种使用形式:批处理和Ant构建脚本.
wscompile -gen -classpath lib/foo.jar;lib/bar.jar -d generated config.xml
wscompile -gen -f:infix:Name -d generated config.xml
wscompile -define -f:nodatabinding -f:novalidation config.xml
wscompile -import -f:explicitcontext config.xml
Ant脚本,在Ant中使用这个任务前要先定义:
<taskdef name="wscompile" classname="com.sun.xml.rpc.tools.ant.Wscompile">
<classpath path="${classpath}"/>
</taskdef>
其中的类路径要指向以下档案库:
jaxrpc-api.jar
jaxrpc-impl.jar
jaxrpc-spi.jar
saaj-api.jar
saaj-impl.jar
jaxp-api.jar
dom.jar
sax.jar
xalan.jar
xercesImpl.jar
activation.jar
mail.jar
jax-qname.jar
namespace.jar
xsdlib.jar
relaxngDatatype.jar
例子:
<wscompile gen="true" base="${build}" features="explicitcontext" classpath="xyz.jar" debug="true" config="config.xml">
<wscompile import="true" keep="true" sourceBase="${source.dir}" base="${build}" model="model.xml.gz" PrintStackTrace="true" config="config.xml">
<classpath refid="compile.classpath"/>
</wscompile>
<wscompile fork="true" define="true" nonClassDir="${wsdl.dir}" features="documentliteral, useonewayoperations" config="config.xml"/>