在 Java EE 5 平台中,通过使用标注显著改进和简化了 Web 服务支持。以下规范已应用于此领域中:JSR 224,Java API for XML-Based Web Services (JAX-WS) 2.0;JSR 222,Java Architecture for XML Binding (JAXB) 2.0 以及 JSR 181,Web Services Metadata for the Java Platform。
JAX-WS 2.0
JAX-WS 2.0 是 Java EE 5 平台中用于 Web 服务的新 API。作为 JAX-RPC 1.1 的后继者,JAX-WS 2.0 保留了自然的 RPC 编程模型,同时在以下几个方面进行了改进:数据绑定、协议和传输的独立性、对 Web 服务的 REST
样式的支持以及易开发性。
与 JAX-RPC 1.1 的主要区别在于,现在所有数据绑定都委托给了 JAXB 2.0。这样,基于 JAX-WS 的 Web 服务就可以使用百分之百的 XML 架构,从而提高了互操作性和易使用性。这两种技术已很好地集成在一起了,因此用户不必再为使用两套不同的工具而勉为其难了。从 Java 技术类开始开发时,JAXB 2.0 可以生成自动嵌入到 Web 服务描述语言 (Web Service Description Language, WSDL) 文档内的 XML 架构文档,从而用户无需手动执行这一容易出错的集成。
现成的 JAX-WS 2.0 本身可以支持 SOAP 1.1、SOAP 1.2 和 XML/HTTP 协议。协议可扩展性从一开始就是人们所希望实现的目标,JAX-WS 2.0 允许供应商支持其他协议和编码来获取更佳的性能(例如 FAST Infoset)或专用的应用程序。Web 服务(使用附件来优化大型二进制数据的发送和接收)可以利用 W3C 制订的 MTOM/XOP(“消息传输优化机制/XML 二进制优化打包”的简称)标准,且对编程模型没有任何不利的影响(有关 MTOM/XOP 的信息,请参见此页)。在 Java EE 5 技术出现之前,定义 Web 服务需要使用很长且复杂的描述符。现在,定义它却非常简单,只需将 @WebService
标注放置在 Java 技术类上即可。类上的所有公共方法会自动发布为 Web 服务操作,并且其所有参数都将使用 JAXB 2.0 映射到 XML 架构数据类型。
异步 Web 服务
由于 Web 服务调用是通过网络来实现的,因此这种调用所花费的时间是无法预测的。许多客户端(特别是交互式客户端,如基于 JFC/Swing 的桌面应用程序)由于必须等待服务器的响应而严重地影响了它们的性能。为了避免出现性能降低,JAX-WS 2.0 提供了新的异步客户端 API。使用此 API,应用程序编程人员不再需要自己创建线程,而是依赖于 JAX-WS 运行时为他们管理长时间运行的远程调用。
异步方法可以与 WSDL 生成的任何接口以及动态性更强的 Dispatch
API 联合使用。为了方便起见,在导入 WSDL 文档时,您可以要求为 Web 服务定义的任何操作生成异步方法。
以下提供了两种使用模型:
- 在轮询模型中,发出调用。准备就绪后,请求结果。
- 在回调模型中,注册处理程序。在响应到达后,立即向您发出通知。
请注意,异步调用支持是完全在客户端上实现的,因此不需要对目标 Web 服务进行任何更改。
IDE 提供了处理 JAX-WS 的工具。您可以使用“新建文件”向导中的模板生成 JAX-WS 工件。异步 Web 服务可以通过 Web 服务定制编辑器来创建。代码完成功能包括可以在 Web 服务中使用的标注。