科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Java SE 6 的 Web Service 之旅

Java SE 6 的 Web Service 之旅

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

这篇文章中,我们仅仅关注Java SE 6中对于Web Services规范的升级以及JAX-WS(Java API for XML Web Services)2.0规范,这些升级使得我们Web Services的创建和调用变得更加容易。

作者:silentbalanceyh 来源:IT专家网 2008年4月3日

关键字: Service web Java SE 6 java

  • 评论
  • 分享微博
  • 分享邮件
在过去的几个月里,Sun公司已经为Java平台的第6个版本(Java Platform Standard Edition 6)提供了二进制安装文件,Java文档和Java源代码,就是知名的“野马”。而且这飞驰的野马要拉住你这车并不算晚。

  一个显而易见的问题是,“为什么我应该关心?”对于这些质疑者,Java SE 6提升的性能包括扩平台性,从开放的程序管理到Java编译器,到系统底层和屏幕组件,到在你的源代码中混合脚本语言(支持JavaScript),到Swing的整洁的外观,到XML数字签名,到智能卡I/O API,到JMX监听线程的升级,为Web服务的服务提供者使用Annotations注释和更加简单的客户端管理——在我们要关心的时候,这些名字仅仅是这个平台中的一小部分新功能。(java.net站点提供了关于J2SE 6平台中所有的新功能。)

  这篇文章中,我们仅仅关注Java SE 6中对于Web Services规范的升级以及JAX-WS(Java API for XML Web Services)2.0规范,这些升级使得我们Web Services的创建和调用变得更加容易。使用这些新功能,我们可以仅仅使用简单的Annotations注释从一个Java类创建Web Services;随后,我们在调用这个服务的时候使用JAX-WS2.0。我们同样可以给这个服务添加一个管理者用来截取这个服务调用而且将截取的SOAP消息传输到System.out从控制台打印出来。

  事实上,这些功能曾在JSR181(Java Specification Request 181)和JSR224 (JAX-WS)规范中已经被认可了,只是Java的正式版本拥有这些功能使它更加主流;我们同样期待Java IDE开发平台可以对这些功能进行良好的支持。

  JavaEE5规范中,允许基于标准规范让应用程序开发人员为Web Services提供服务端平台,JSR181和JSR224就是JavaEE5规范中的一部分。理论上讲,若在不改变源代码使用支持这些相同规范的应用程序服务器,在Java SE 6环境中大规模地发布工程这些功能将会破坏早期的Web Services应用程序,这个最初是不希望的。

  我们的“野马”Web Service:服务端和客户端

  在我们稳定这匹野马之前,我们先下载这篇文中重提及的zip文件,它主要包括下边四个文件:

  •   mustangws.zip包括了这篇文章中提及的Web Service服务端应用程序源代码,构建文件和脚本文件。
  •   mustangwsclient.zip包括了客户端的源代码,构建文件和脚本文件。
  •   mustangws.jar包含了已经编译过的服务端应用程序。
  •   mustangwsclient.jar包含了已经编译过的客户端程序。

  注意:你需要Java SE 6和Apache Ant这两个软件来运行这篇文章中的例子。

  在你解压之后,你将会看到两个文件架,mustangws 和mustangwsclient,这两个文件架内分别是Web Services的服务端和客户端。两个项目里面都有同样的src文件夹,里面包含了Java的源文件和Apache Ant软件需要的构建文件build.xml。这里还有附加的wsgenMustang.bat 和wsimportMustang.bat两个批处理文件,里面包含了生成Web Services存根的控制台命令,我们将在下边的章节中讲到。Apache Ant的build.xml文件对于两个应用程序而言都是放在mustangws 和mustangwsclient两个根目录中的。两个文件中有同样的ant任务init,compile,dist,clean和run。

  我们Web Services的服务端根目录里面还有一个目录wsdl,里面放了通过wsgen生成的描述Web Service的WSDL(Web Services Description Language)文件。

  Web Services Metadata

  Web Services Metadata详细说明了Annotations的使用,这个在JavaSE5中就被引入了。这些对你而言可能是新概念,Annotations就是能够被源代码使用的注释;一般使用在类定义,函数,函数参数或者函数返回值中。这些Annotations实际上就是对编译器,Java虚拟机和应用程序服务器的一种指示或者暗示,告诉它们应该如何处理这些有注释的代码。Annotations语句使用一般是“@”开始后面跟着Annotation文本内容。比如,@Deprecated注释用于在使用函数的过程中将函数定义时生成的警告去掉,这一点使得Annotations变成了第一个Java类中的构造。

  当Web Services Metadata Annotations用于Java源代码中的类定义和函数定义的时,配置Web Services将会相对简单。Web Services Metadata规范将会跟着“以Java开始的”开发模式,这些意味着你首先定义一个Java类和函数,然后就对他们使用一个Web Services Metadata Annotation。对于Java开发者来说,比起通过WSDL文件创建Web Service来说通过Java类使用Annotation是创建Web Services更加自然的方法。这些Annotations注释用来暗示Web Services的运行时引擎将Java类和它里面的函数解释成为Web Service和相应的Web Service操作。将这个引擎已经绑定在Java SE 6里面了,但是因为Web Services Metadata仍然是Java EE 5里面的一部分,所以你将看到众多厂家还是提供了支持Annotation的应用程序服务器。

我们的“野马”Web服务端

  我们不再啰嗦了,让我们通过“野马”Web Service的服务端的一部分来看看Web Services Metadata在实践中的使用。浏览mustangws/src/com/techyatra/hellows目录。你将会看到下边的文件:

HelloServer
Bootstrap
TraceHandler
HelloException
Person

  打开HelloServer文件,里面包含了Web Services Metadata Annotations定义,将一个简单的Java类用作Web Service,下边是一个实现了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",
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() +  "!";
        }
    }   
}

  在上边的代码中,@WebService注释使得类MustangServer实现了Web Service,而且@WebMethod标识类中ping方法作为WebService的操作,ping除开返回greeting的值就不会做其他的事情。

  需要注意的是:不管你愿意不愿意,你都不能任意地将Annotation用于任何一个Java类和函数使其暴露为一个WebService和一个WebService操作。因为Java类若要成为一个实现了WebService的bean,它需要遵循下边这些原则:

  •   这个类必须是public类
  •   这些类不能是final的或者abstract
  •   这个类必须有一个公共的默认构造函数
  •   这个类绝对不能有finalize()方法
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章