站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题J2ME Web 服务入门

J2ME Web 服务入门

摘要: J2ME Web 服务入门

简介

WSA 设计用于与 J2ME 配置文件协同工作,J2ME 配置文件要么基于 Connected Device Configuration (CDC),要么基于 Connected Limited Device Configuration (CLDC 1.0 或 CLDC 1.1)。远程调用 API 基于 J2SE 的 Java API for XML-Based RPC (JAX-RPC 1.1) 的一个完整子集,它包含了一些远程方法调用(Remote Method Invocation,RMI)类,以满足 JAX-RPC 依赖。XML 解析 API 基于 Simple API for XML, v2 (SAX2)的一个完整子集。

WSA 的目标是把对 Web 服务调用和 XML 解析的基本支持集成到设备的运行时环境,这样开发人员就不必在每个应用程序中嵌入这样的功能了——在像移动电话和个人数字助理这样资源有限的设备中,这算是一个特别浪费资源的问题。

核心规范

Web Services Interoperability Organization (WS-I) 促进了定义 Web 服务的核心规范和应用层协议,并且它们受 World Wide Web Consortium (W3C) 和 Organization for the Advancement of Structured Information Standards (OASIS) 的指导。4 个关键标准规定了如何创建、部署、发现以及如何使用 Web 服务:

<table class=vatop cellSpacing=0 cellPadding=0 width="100%" summary="Web Services Standard" border=0> <tr class=tablecaption2> <th class=tablecaption2 align=left>Web 服务标准</th> <th class=tablecaption2 align=left>描述</th></tr> <tr> <td>Simple Object Access Protocol (SOAP) 1.1</td> <td>定义了传输和数据编码</td></tr> <tr class=grey1> <td>Web Services Definition Language (WSDL) 1.1</td> <td>定义了如何描述远程服务</td></tr> <tr> <td>Universal Description, Discovery, & Integration (UDDI) 2.0</td> <td>定义了如何发现远程服务</td></tr> <tr class=grey1> <td>Extensible Markup Language (XML) 1.0 和 XML Schema</td> <td>定义了可扩展标记语言(Extensible Markup Language ,XML) 和 XML 模式(Schema)</td></tr></table>

这些主要规范往往非常广泛,而且 Web 服务开发人员已发现难以实现完全互操作性。为了解决标准解释中存在的差异,WS-I 已定义了一组称作 WS-I Basic Profile, version 1.0 的一致性规则。JSR 172 符合基本配置文件(Basic Profile)。

J2ME 平台上的 Web 服务

JSR 172 规定了标准化客户端技术,允许 J2ME 应用程序在典型 Web 服务架构上使用远程服务,如图 1 所示: <table cellSpacing=0 cellPadding=0 width=100 align=center border=0> <tr> <td></td></tr> <tr> <td class=grey3 align=middle height=24>图 1 在典型 Web 服务架构上的 J2ME Web 服务 </td></tr></table>

在高层,该 Web 服务架构具有三个元素:

WSA 的第一个版本只解决了 Web 服务的使用,不支持服务端点的创建和开发;J2ME 设备可以是服务用户,但不可以是服务提供者。JSR 172 还没有规定使用 UDDI 的服务发现的 API。

了解 JSR 172

首先考查如何组织典型的基于 JSR 172 的应用程序,开始了解 J2ME Web Services 是如何运作的: <table cellSpacing=0 cellPadding=0 width=100 align=center border=0> <tr> <td></td></tr></table>

该应用程序本身是一个基于移动信息设备配置文件(Mobile Information Device Profile,MIDP)或个人基础配置文件(Personal Basis Profile,PBP))的智能客户机,具有特定于业务的逻辑、用户界面、持久性逻辑以及生命周期和应用程序状态管理。该应用程序可以使用 JAXP 子集 API 来处理 XML 文档。还可以使用 JAX-RPC 子集 API 来使用 Web 服务,从而使用 JSR 172 存根和运行库。

在像手提电话这样的设备中,应用程序和 JSR 172 存根通常驻留在设备内存中,而所有 JSR 172 元素连同基础配置文件和配置一起嵌入到设备本身。

JSR 172 运行库和服务提供者接口

在 JSR 172 操作的中心是运行库,带有服务提供者接口,允许存根执行所有与调用 RPC 服务端点有关的任务:

图 3 描绘出了客户机应用程序、存根以及运行库三者之间的关系:

<table cellSpacing=0 cellPadding=0 width=100 align=center border=0> <tr> <td></td></tr> <tr> <td class=grey3 align=middle height=24>图 3 JSR 172 运行库和 SPI </td></tr></table>

虽然 JSR 172 运行库隐藏了像连接管理和数据编码这样的复杂性,但 SPI 从运行库实现细节分离出了存根,从而允许存根在供应商实现之间的可移植性。

客户机应用程序不直接与运行库和 SPI 进行交互;而是使用存根。运行库和 SPI 主要为打算开发 JSR 172 运行库和自动化工具的第三方供应商所关心,比如开发人员用于生成存根的 WSDL 到 Java 映射工具。

由于应用程序开发人员不直接使用 SPI,因此本文不会较详尽地介绍运行库和 SPI。如果想了解关于它们的更多信息,可以查阅 JSR 172 规范。

JSR 172 JAX-RPC 子集 API

正如前面所提到的,JSR 172 Web 服务远程调用 API 基于 J2SE 的 JAX-RPC 1.1 API 的一个完整子集。以下列表在高层描述了该子集。要了解详细信息,请参阅 JSR 172 specification: