技术开发 频道

部署 Java Web 服务

  如果继续构建之前的示例 Web 服务,我们可以使用 JSR-181 注释实现它,以帮助生成 J2EE 1.4 Web 服务构件。通过使用 JSR-181 处理器,我们前面的示例将不需要在开发时包含任何部署构件,可以从实现文件中的注释生成可行的 Web 服务。下面是 JSR-181 提供的一些注释的简单描述。有关 Web 服务注释的完整讨论,请参见“参考资料”部分提供的规范。

  清单 6. WebService 注释

1 @WebService(
2     name = "StatsWS",
3     targetNamespace = "http://services.symmetrysolutions.com/statsws",
4     serviceName = "StatsWS"
5     )
6

  WebService 注释(必需)位于 Java 文件中的类或接口声明之前。当 WebService 注释位于类声明前时,它将类标记为实现 Web 服务,除非使用 WebMethod 注释显式声明,或声明了 endpointInterface,否则所有公共方法都将成为 Web 服务接口的一部分。当 WebService 注释位于接口声明前时,它将接口标识为 Web 服务接口,接口内的所有方法都被视为 Web 服务端点的一部分,而不会考虑接口内的 WebMethod 注释。

  清单 7. SOAPBinding 注释

1 @SOAPBinding(style = SOAPBinding.Style.RPC,
2         use = SOAPBinding.Use.ENCODED)
3

  SOAPBinding 注释(可选)位于 Java 文件内的类或接口声明前。SOAPBinding 注释允许开发人员控制 Web 服务在 SOAP 消息协议上的映射。

  清单 8. WebMethod 注释

1 @WebMethod(operationName = "getAllStatistics")
2

  WebMethod 注释(可选)在方法级别声明,用于自定义作为 Web 服务操作公开的方法。在实现类中使用时,将允许开发人员限制将哪些方法作为 Web 服务公开、与操作关联的名称以及 SOAPAction 绑定。在接口文件中使用时,仅用于控制与操作关联的名称以及 SOAPAction 绑定。

  清单 9. WebParam 注释

1 @WebParam(name = "category", mode="IN")
2

  WebParam 注释(可选)在方法内声明,用于自定义 Web 服务操作内的参数。WebParam 最常与 RPC 样式绑定一起使用,但也可以用于将元素名称的参数与采用 DOCUMENT 样式绑定的命名空间关联。

  清单 10. WebResult 注释

1 @WebResult(name = "categoryList")

  WebResult 注释(可选)在方法级别声明,用于自定义 Web 服务操作的返回值。

  从上面提到的列表中可以看出,使用 JSR-181 处理器部署 Web 服务可以大幅度减少基于 Java 的 Web 服务的开发和部署的工作量。此注释列表并不完整,但却代表了可能在典型部署中使用的最常见注释。我建议您阅读完整的 JSR-181 规范,以全面了解 Web 服务注释的所有功能。

  使用 Web 服务注释

  如果搜索支持 JSR-181 的 Web 应用程序容器,所得到的结果将非常有限。撰写本文时,只要极少数产品支持 JSR-181,包括 JBoss 4.0.4、BEA WebLogic 9.x 和 JSR-181 参考实现。为了测试带注释的 Java Web 服务,我建议执行以下步骤:

  确保安装了 J2SE 1.5 (5.0),且它是您的缺省 Java 编译器。当尝试编译注释时,可以立即知道它是否是缺省 Java 编译器。

  下载 JSR-181 实现。我决定使用 JBoss 4.0.4,因为它是唯一具有全面 JAX-RPC 支持的 JSR-181 开放源代码实现。

  安装 JBoss 4.0.4 并确保选择了 EJB3 选项(可能不一定需要进行此步骤)。到撰写本文时,JBoss 4.0.4 的 GA 版或更高版本应该可以获得。如果不能获得此版本,请确保下载并安装 JBossWS 的 GA 版,因为此版本提供了对 JSR-181 的全面支持。

  将注释添加到 Web 服务实现或实现和接口中。

  编译并打包 Web 应用程序。

  将 war 文件拖放到 JBoss 的部署目录,并启动。现在 JBossWS JSR-181 处理器应对您的 Web 服务进行部署。

  从前面的步骤可以看出,在 Web 容器内实现 JSR-181 处理器时,Java Web 服务部署可能简单到执行一次拖放操作即可完成。

  正如前面所提到的,JSR-181 规范对 Web 容器中运行的处理器并没有任何特殊的要求。唯一的要求是,JSR-181 处理器完成工作后,将获得具有一致的 WSDL 契约的可部署 Web 服务。这个要求将很可能采用多种方式实现。第一个方法通过 JBoss 4.0.4 服务器进行了说明,即支持拖放部署。此方法并不会产生开发人员可用的任何部署描述符构件,但却是最简单的部署方法。在需要对部署描述符进行某些自定义的情况下,此方法可能行不通。在此情况下,继续采用前面所述的标准 J2EE 1.4 部署可能是非常好的选择。

  另一个部署方法就是采用集成开发环境(Integrated Development Environment,IDE)的外接程序组件或可以在构建过程中运行的 Ant 任务。(请参见上面有关部署 BEA WebLogic 的描述。)处理器外接程序可以在将产品打包为 war 文件前正确运行,并且将基于注释为 Web 服务生成服务器特定的部署描述符。Apache Beehive 项目好像正在开发这样的组件,在不久的将来可能会提供一个通用 JSR-181 实现。(请参见“参考资料”部分中有关 Apache Beehive 的信息。)通过使用这种实现方法,处理器将生成可允许开发人员进行进一步自定义的部署描述符。

  Web Services MetaData (JSR-181) 无疑将使得构建和部署 Java Web 服务的工作比目前简单得多。开发人员将不必了解很多不同的部署描述符,还可能不必在部署时对 Web 应用程序进行修改。Web 服务注释是 Java 语言将如何发展的一个例子,它提供了应用程序体系结构设计和应用程序部署之间一个重要的联系。架构师可以描述接口的用途,而运行时平台能够将此转换为可部署的解决方案。

0
相关文章