Java 2 Platform, Micro Edition (J2ME) 平台上的 Web 服務是由 Java Specification Request 172 (JSR 172) 定義的。它遵循與標準 Web 服務相同的規範、結構及調用模型,為資源受限的行動裝置帶來企業級的服務整合能力。
JSR 172 Web 服務 API (WSA) 完整支援以下核心規範:
值得注意的是,JSR 172 不支援 UDDI 2.0(統一描述、發現與整合),因此服務發現機制需由應用層自行實作。此外,JSR 172 遵循 WS-I Basic Profile 1.0,確保與主流 Web 服務堆疊的互通性。
JSR 172 WSA 專為服務消費端設計,架構包含三大角色:
調用模型採用同步 Request-Response 模式。Stubs 與 Runtime 封裝了 SOAP 封裝/解封、網路通訊等複雜細節,開發者呼叫遠端方法如同呼叫本地方法般直觀。
JSR 172 基於 J2SE JAX-RPC 1.1 子集實作,支援的 XML Schema 到 Java 型別映射如下:
| XML Schema 型別 | Java 型別 (CLDC 1.1+) | Java 型別 (CLDC 1.0) |
|---|---|---|
| xsd:boolean | boolean / Boolean | boolean / Boolean |
| xsd:byte | byte / Byte | byte / Byte |
| xsd:short | short / Short | short / Short |
| xsd:int | int / Integer | int / Integer |
| xsd:long | long / Long | long / Long |
| xsd:float | float / Float | String |
| xsd:double | double / Double | String |
| xsd:string | String | String |
| xsd:base64Binary / hexBinary | byte[] | byte[] |
| xsd:complexType | 自訂類別序列 | 自訂類別序列 |
| xsd:QName | javax.xml.namespace.QName | javax.xml.namespace.QName |
支援以 SOAP 陣列編碼的基本型別與複雜型別陣列。不支援:SOAP with Attachments、SOAP Message Handlers、編碼式 SOAP 訊息、伺服器端端點、UDDI 服務發現。
import javax.xml.rpc.Stub;
import javax.microedition.xml.rpc.Operation;
import java.rmi.RemoteException;
public class WeatherClient {
public String getForecast(String city) throws RemoteException {
// 1. 實例化產生的 Stub
WeatherService_Stub stub = new WeatherService_Stub();
// 2. 設定端點位址 (可選,若 WSDL 已包含)
stub._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY,
"https://example.com/weather");
// 3. 呼叫遠端方法
return stub.getForecast(city);
}
}
JSR 172 遠端調用 API 主要包含以下套件,供 Stubs 與 Runtime 內部使用:
javax.microedition.xml.rpcjavax.xml.namespacejavax.xml.rpcjava.rmi (含 RemoteException 等 JAX-RPC 相關型別)應用程式極少直接呼叫這些 API,主要透過產生的 Stubs 進行操作。
RemoteException 及其子類別,提供重試或離線快取機制透過 JSR 172,J2ME 應用程式能以標準化、輕量化的方式整合企業後端服務,是行動企業應用開發的關鍵基礎設施。