Java SE 6 Web Service 之旅

来源:互联网 发布:闲置手机怎么处理 知乎 编辑:程序博客网 时间:2024/06/05 20:55
导读:
  在过去的几个月里,Sun公司已经为Java平台的第6个版本(JavaPlatform Standard Edition 6)提供了二进制安装文件,Java文档和Java源代码,就是知名的“野马”。而且这飞驰的野马要拉住你这车并不算晚。
  一个显而易见的问题是,“为什么我应该关心?”对于这些质疑者,JavaSE 6提升的性能包括扩平台性,从开放的程序管理到Java编译器,到系统底层和屏幕组件,到在你的源代码中混合脚本语言(支持JavaScript),到Swing的整洁的外观,到XML数字签名,到智能卡I/O API,到JMX监听线程的升级,为Web服务的服务提供者使用Annotations注释和更加简单的客户端管理——在我们要关心的时候,这些名字仅仅是这个平台中的一小部分新功能。(java.net站点提供了关于J2SE 6平台中所有的新功能。)
  bbs.bitsCN.com中国网管论坛
  这篇文章中,我们仅仅关注JavaSE 6中对于WebServices规范的升级以及JAX-WS(JavaAPI for XML WebServices)2.0规范,这些升级使得我们WebServices的创建和调用变得更加容易。使用这些新功能,我们可以仅仅使用简单的Annotations注释从一个Java类创建WebServices;随后,我们在调用这个服务的时候使用JAX-WS2.0.我们同样可以给这个服务添加一个管理者用来截取这个服务调用而且将截取的SOAP消息传输到System.out从控制台打印出来。 DL@bitsCN_com网管软件下载
  事实上,这些功能曾在JSR181(JavaSpecification Request 181)和JSR224 (JAX-WS)规范中已经被认可了,只是Java的正式版本拥有这些功能使它更加主流;我们同样期待JavaIDE开发平台可以对这些功能进行良好的支持。
  [bitsCN.Com]
  JavaEE5规范中,允许基于标准规范让应用程序开发人员为WebServices提供服务端平台,JSR181和JSR224就是JavaEE5规范中的一部分。理论上讲,若在不改变源代码使用支持这些相同规范的应用程序服务器,在JavaSE 6环境中大规模地发布工程这些功能将会破坏早期的WebServices应用程序,这个最初是不希望的。
  我们的“野马”WebService:服务端和客户端
  在我们稳定这匹野马之前,我们先下载这篇文中重提及的zip文件,它主要包括下边四个文件:
  mustangws.zip包括了这篇文章中提及的WebService服务端应用程序源代码,构建文件和脚本文件。
  mustangwsclient.zip包括了客户端的源代码,构建文件和脚本文件。 bbs.bitsCN.com
  mustangws.jar包含了已经编译过的服务端应用程序。
  mustangwsclient.jar包含了已经编译过的客户端程序。
  注意:你需要JavaSE 6和Apache Ant这两个软件来运行这篇文章中的例子。
  在你解压之后,你将会看到两个文件架,mustangws 和mustangwsclient,这两个文件架内分别是WebServices的服务端和客户端。两个项目里面都有同样的src文件夹,里面包含了Java的源文件和Apache Ant软件需要的构建文件build.xml。这里还有附加的wsgenMustang.bat 和wsimportMustang.bat两个批处理文件,里面包含了生成WebServices存根的控制台命令,我们将在下边的章节中讲到。Apache Ant的build.xml文件对于两个应用程序而言都是放在mustangws 和mustangwsclient两个根目录中的。两个文件中有同样的ant任务init,compile,dist,clean和run。
  我们WebServices的服务端根目录里面还有一个目录wsdl,里面放了通过wsgen生成的描述WebService的WSDL(WebServices Description Language)文件。
  中国_网管联盟bitsCN.com
  WebServices Metadata
  WebServices Metadata详细说明了Annotations的使用,这个在JavaSE5中就被引入了。这些对你而言可能是新概念,Annotations就是能够被源代码使用的注释;一般使用在类定义,函数,函数参数或者函数返回值中。这些Annotations实际上就是对编译器,Java虚拟机和应用程序服务器的一种指示或者暗示,告诉它们应该如何处理这些有注释的代码。Annotations语句使用一般是“@”开始后面跟着Annotation文本内容。比如,@Deprecated注释用于在使用函数的过程中将函数定义时生成的警告去掉,这一点使得Annotations变成了第一个Java类中的构造。
  当WebServices Metadata Annotations用于Java源代码中的类定义和函数定义的时,配置WebServices将会相对简单。WebServices Metadata规范将会跟着“以Java开始的”开发模式,这些意味着你首先定义一个Java类和函数,然后就对他们使用一个WebServices Metadata Annotation。对于Java开发者来说,比起通过WSDL文件创建WebService来说通过Java类使用Annotation是创建WebServices更加自然的方法。这些Annotations注释用来暗示WebServices的运行时引擎将Java类和它里面的函数解释成为WebService和相应的WebService操作。将这个引擎已经绑定在JavaSE 6里面了,但是因为WebServices Metadata仍然是JavaEE 5里面的一部分,所以你将看到众多厂家还是提供了支持Annotation的应用程序服务器。
  bbs.bitsCN.com
  我们的“野马”Web服务端
  我们不再啰嗦了,让我们通过“野马”WebService的服务端的一部分来看看WebServices Metadata在实践中的使用。浏览mustangws/src/com/techyatra/hellows目录。你将会看到下边的文件:
  [bitsCN_com]
  HelloServer
  Bootstrap
  TraceHandler
  HelloException
  Person [bitsCN_com]
  打开HelloServer文件,里面包含了WebServices Metadata Annotations定义,将一个简单的Java类用作WebService,下边是一个实现了Service的bean文件:
  package com.techyatra.hellows;
  @WebService(name="HelloServer",targetNamespace=http://mustangws.techyatra.com/
  , serviceName="HelloService")
  @SOAPBinding(style=SOAPBinding.Style.RPC)
  public class HelloServer
  {
  @WebMethod(operationName="hello", action="urn:hello")
  public@WebResult(partName="result")String ping(@WebParam(partName="person",
  www@bitscn@com
  mode=Mode.IN,targetNamespace="http://mustangws.techyatra.com/") Person person)
  throws HelloException
  {
  if (person == null)
  {
  System.out.println("function: hello(null)... throwing exception");
  throw new HelloException("0001", "Person is null");
  }
  else
  {
  System.out.println("function: hello(person.getTitle()
  + person.getName())");
  return "Hello. "+ person.getTitle() + person.getName() + "!"; bbs.bitsCN.com
  }
  }
  } [bitsCN.Com]
  

本文转自
http://www.bitscn.com/java/webservice/200711/120090.html