jdk6的新特性之十一_更简单强大的jax-ws

上传人:子 文档编号:43253134 上传时间:2018-06-05 格式:DOC 页数:4 大小:14.74KB
返回 下载 相关 举报
jdk6的新特性之十一_更简单强大的jax-ws_第1页
第1页 / 共4页
jdk6的新特性之十一_更简单强大的jax-ws_第2页
第2页 / 共4页
jdk6的新特性之十一_更简单强大的jax-ws_第3页
第3页 / 共4页
jdk6的新特性之十一_更简单强大的jax-ws_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《jdk6的新特性之十一_更简单强大的jax-ws》由会员分享,可在线阅读,更多相关《jdk6的新特性之十一_更简单强大的jax-ws(4页珍藏版)》请在金锄头文库上搜索。

1、JDK6JDK6 的新特性之十一的新特性之十一_ _更简单强大的更简单强大的 JAX-WSJAX-WSJDK6 的新特性之十一:更简单,更强大的 JAX-WS JAX-WS2.0 的来历-JAX-WS(JSR-224) 是 Java Architecture for XML Web Services 的缩写,简单说就是一种用 Java 和 XML 开发 Web Services 应用程序的框架, 目前版本是 2.0, 它是 JAX-RPC 1.1 的后续版本, J2EE 1.4带的就是 JAX-RPC1.1, 而 Java EE 5 里面包括了 JAX-WS 2.0,但为了向后兼容,仍然支持

2、JAX-RPC. 现在,SUN 又把 JAX-WS 直接放到了Java SE 6 里面,由于 JAX-WS 会用到 Common Annotation(JSR 250),Java Web Services Metadata(JSR 181), JAXB2(JSR 222), StAX(JSR 173), 所以 SUN 也必须把后几个原属于 Java EE 范畴的Components 下放到 Java SE, 现在我们可以清楚地理解了为什么Sun 要把这些看似跟 Java SE 没有关系的 Components 放进来,终极目的就是要在 Java SE 里面支持 Web Services.JAX

3、-WS2.0 的架构-JAX-WS 不是一个孤立的框架,它依赖于众多其他的规范,本质上它由以下几部分组成1.用来开发 Web Services 的 Java API2.用来处理 Marshal/Unmarshal 的 XML Binding 机制,JAX-WS2.0 用JAXB2 来处理 Java Object 与 XML 之间的映射,Marshalling 就是把Java Object 映射到 XML,Unmarshalling 则是把 XML 映射到 Java Object.之所以要做 Java Object 与 XML 的映射,是因为最终作为方法参数和返回值的 Java Object 要

4、通过网络传输协议(一般是 SOAP)传送,这就要求必须对 Java Object 做类似序列化和反序列化的工作,在SOAP 中就是要用 XML 来表示 Java object 的内部状态3.众多元数据(Annotations)会被 JAX-WS 用来描述 Web Services 的相关类,包括 Common Annotations, Web Services Metadata, JAXB2 的元数据和 JAX-WS2.0 规范自己的元数据.4.Annotation Processing Tool(APT)是 JAX-WS 重要的组成部分,由于 JAX-WS2.0 规范用到很多元数据,所以需要

5、 APT 来处理众多的Annotations.在/bin 下有两个命令 wsgen 和 wsimport,就是用到 APT 和 Compiler API 来处理碰到的 Annotations,wsgen 可以为 Web Services Provider 产生并编译必要的帮助类和相关支持文件,wsimport 以 WSDL 作为输入为 Web Service Consumer 产生并编译必要的帮助类和相关支持文件.5.JAX-WS 还包括 JAX-WS Runtime 与应用服务器和工具之间的契约关系JAX-WS2.0 的编程模型-现在用 JAX-WS2.0 来编写 Web Services

6、非常简单,不像 JAX-RPC,JAX-WS 可以把任意 POJO 暴露为 Web Services,服务类不需要实现接口,服务方法也没有必要抛出 RMI 异常.下面介绍在 JDK6 环境下用 JAX-WS2.0 开发和测试 Web Services 的步骤1.编写服务类,并用 Web Services Metadata(JSR-181)标注这个服务类,我用我的另一篇 BlogJDK6 的新特性之十:Web 服务元数据中的WSProvider 类作为服务类的例子,在此我重复贴一下 WSProvider 类的源代码:/* author chinajash*/WebService(targetNa

7、mespace=“http:/ class WSProvider WebResult(name=“Greetings“)/自定义该方法返回值在 WSDL中相关的描述 WebMethodpublic String sayHi(WebParam(name=“MyName“) String name)return “Hi,“+name; /WebParam 是自定义参数 name 在WSDL 中相关的描述 Oneway /表明该服务方法是单向的,既没有返回值,也不应该声明检查异常WebMethod(action=“printSystemTime“,operationName=“printSystem

8、Time“)/自定义该方法在 WSDL 中相关的描述public void printTime()System.out.println(System.currentTimeMillis();public static void main(String args) Thread wsPublisher = new Thread(new WSPublisher();wsPublisher.start(); private static class WSPublisher implements Runnablepublic void run() /发布 WSProvider 到http:/local

9、host:8888/chinajash/WSProvider 这个地址,之前必须调用 wsgen 命令/生成服务类 WSProvider 的支持类,命令如下:/wsgen -cp . WebServices.WSProviderEndpoint.publish(“http:/localhost:8888/chinajash/WSProvider“,new WSProvider(); 2.用 wsgen 生成上面服务类的必要的帮助类,然后调用用 EndPoint类的静态方法 publish 发布服务类(步骤请参考我的另一篇 Blog JDK6 的新特性之十:Web 服务元数据),我在这里是将服务

10、类发布到http:/localhost:8888/chinajash/WSProvider3.用 wsimport 为服务消费者(也就是服务的客户端)生成必要的帮助类,命令如下:wsimport http:/localhost:8888/chinajash/WSProvider?wsdl这会在netcsdnblogchinajash 下生成客户端的帮助类,在这个例子中会生成 7 个类HelloService.classObjectFactory.classpackage-info.classPrintSystemTime.classSayHi.classSayHiResponse.classWSProvider.class4.在客户端用下面代码即可调用步骤 1 定义的 Web ServiceHelloService hs = new HelloService();WSProvider ws = hs.getWSProviderPort();System.out.println(ws.sayHi(“chinajash“);ws.printSystemTime();调用上述代码后客户端控制台输出hi,chinajash服务端控制台输出服务器当前系统时间

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号