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

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

J2ME WEB服务入门教程

摘要: J2ME WEB服务入门教程

作者:C. Enriq 文章来源:SUN中国技术社区

J2ME Web 服务 API( Web Services API,WSA)是作为 JSR 172 在 Java Community Process 中开发的,它拓展了 J2ME, 从而支持 Web 服务。API 的两个可选软件包对两个功能区域进行标准化,这两个功能区域对于 Web 服务的客户机来说是至关重要的:远程服务调用和 XML 解析。 本文将介绍这两个软件包,展示如何使用它们并描述在 J2ME 无线工具包(J2ME Wireless Toolkit)中对它们的支持。

要系统地学习更多关于无线应用程序开发的复杂内容,请参阅文章“The Complexity of Developing Mobile Networked Data Services, J2ME Wireless Connection Wizard For Sun Java System Studio”,该文章描述了移动联网应用程序的主要元素。

简介

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="center" 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="center" 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: