生成、編譯、部署 Stubs 後,調用遠端服務極為簡單:實例化 Stub → 設定端點 URL 與 Session 維持屬性 → 在獨立執行緒中呼叫方法。
public class StockMIDlet extends MIDlet implements CommandListener {
private EmployeeService_Stub service;
private String serviceURL = "https://example.com/ws/employee";
public void startApp() {
service = new EmployeeService_Stub();
service._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, serviceURL);
service._setProperty(Stub.SESSION_MAINTAIN_PROPERTY, Boolean.TRUE);
// 顯示主畫面...
}
public void commandAction(Command c, Displayable d) {
if (c == GET_EMP_CMD) {
new Thread(new GetEmpTask()).start(); // 必須另開執行緒
}
}
class GetEmpTask implements Runnable {
public void run() {
try {
EmployeeInfo info = service.getEmployeeInfo(empId);
// 更新 UI 顯示員工資訊
form.append("Name: " + info.firstname + " " + info.lastname);
form.append("Status: " + info.status);
display.setCurrent(form);
} catch (RemoteException e) {
// 處理 RPC 異常
} catch (Exception e) {
// 處理其他異常
}
}
}
}
RemoteException(通訊/序列化錯誤)與一般 Exception。SESSION_MAINTAIN_PROPERTY 維持會話狀態(如需)。JSR 172 將企業級 Web 服務能力帶入資源受限的 J2ME 終端。掌握 JAX-RPC 子集、Stub 生成流程與執行緒模型,即可快速構建消費 Web 服務的移動應用。