程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 解析用於J2ME開發平台的Web服務API(三)

解析用於J2ME開發平台的Web服務API(三)

編輯:J2ME
解析用於J2ME開發平台的Web服務API(三) 作者:佚名    文章來源:IBM DW C. Enrique Ortiz    更新時間:2006-12-7 17:23:20 345

使用 JSR 172 JAX-RPC 調用遠程服務一旦生成、編譯並部署了 JSR 172 JAX-RPC 存根和支持文件,消費遠程服務就很容易了。事實上,除了導入 RemoteException,完成最少量的 JAX-RPC 細節初始化工作,您的應用程序不光是看上去,而且運行起來也和非 Web 服務消費者應用程序一樣。由於有 JSR 172 存根和運行時,實現這種簡單的應用程序是可能的,正如前面提到的,JSR 172 存根和運行時把與遠程調用相關的大部分細節都隱藏了。

要調用遠程服務,您首先需要實例化存根,完成最少的存根初始化工作,然後就是如何編寫調用存根方法。下面的代碼片斷顯示了如何使用 JSR 172 JAX-RPC 調用遠程服務。

清單 1:調用遠程服務


package J2MEdeveloper.wsasample

// MIDP
import Javax.microedition.midlet.MIDlet;
import Javax.microedition.lcdui.Display;
import Javax.microedition.lcdui.Form;

...

Form form = new Form("Employee Info");

...

// JAX-RPC
import Java.rmi.RemoteException;
String serviceURL = "www.J2MEdeveloper.com/webservicesample";

...

/**
 * Entry point to MIDlet, from start or restart states.
 * @throws Javax.microedition.midlet.MIDletStateChangeException
 */
public void startApp() throws MIDletStateChangeException {
    // Instantiate the service stub.
    EmployeeService_Stub service = new EmployeeService_Stub();
    // Initialize the stub/service.
    service._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY,
            serviceURL);
    service._setProperty(Stub.SESSION_MAINTAIN_PROPERTY, new
            Boolean(true));
    ...
    display.setCurrent(mainScreen);
}

/**
 * Paused state. Release resources (connection, threads, etc).
 */
public void pauseApp() {
    ...
}

/**
 * Destroy state.  Release resources (connection, threads, etc).
 * @param uc If true when this method is called, the MIDlet must
 * cleanup and release all resources. If false the MIDlet may
 * throw MIDletStateChangeException  to indicate it does not want
 * to be destroyed at this time.
 * @throws Javax.microedition.midlet.MIDletStateChangeException
 * to indicate it does not want to be destroyed at this time.
 */
public void destroyApp(boolean uc) throws MIDletStateChangeException {
    ...
}

:
:

/**
 * Command Listener.
 * @param c is the LCDUI Command.
 * @param d is the source Displayable.
 */
public void commandAction(Command c, Displayable d) {
    if (c == UiConstants.COMMAND_GET_EMPINFO) {
        Thread th = new Thread(new GetEmpInfoTask());
        th.start();
    } else {
        ...
    }
    :
    :
}

/**
 * On its own thread, invoke the remote service getEmployeeInfo
 */
public class GetEmpInfoTask implements Runnable {
    public void run() {
        try {
            // Invoke the remote service.
            EmployeeInfo empInfo =
                    service.getEmployeeInfo(empId);
            :
            :
            // Display the employee Information
            form.append("Name:" +
                    empInfo.firstname+empInfo.lastname);
            form.append("Status:"+empInfo.status);

            :
            :

            display.setCurrent(form);
        } catch (RemoteException e) {
            // Handle RMI exception.
        } catch (Exception e) {
            // Handle exception.
        }
    }

}
:
:

注意遠程調用是如何在自己的執行線程中執行的。由於 JSR 172 中的遠程調用是按模塊進行的,而且如果在主事件線程中調用,用戶界面會凍結,直到遠程調用結束。

結束語

本文介紹了用於 J2ME 平台的 JSR 172 WSA,重點介紹了用於 J2ME 遠程服務調用 API 的 JAX-RPC。另外,還涵蓋了 JSR 172 WSA 中用到的核心 Web 服務標准、典型結構以及調用模型。並用一個簡短的代碼實例回顧了如何消費 Web 服務,即 JAX-RPC 子集 API。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved