將 Apache SOAP Web 服務移轉到基於 Java EE 標準的 JAX-RPC Web 服務

您可以將使用 Apache SOAP 開發的 Web 服務,移轉到根據 Web Services for Java™ Platform Enterprise Edition (Java EE) 規格開發的 Java API for XML-based RPC (JAX-RPC) Web 服務。

開始之前

如果您原本使用基於 Apache SOAP 的 Web 服務,而現在想要開發和實作 Java 型的 Web 服務,則需要移轉以所有 4.0 版和 5.0.2 之前的 5.0 版所開發的用戶端應用程式。

關於這項作業

基於 Apache SOAP 實作的 SOAP-Security(XML 數位簽章)已移除。請重新配置應用程式並移轉到 JSR-109 Web 服務實作,而不要使用 SOAP-Security。

如果要根據 Java 標準移轉這些用戶端應用程式,請執行下列動作:

程序

  1. 規劃移轉策略。 將 Apache SOAP 用戶端移植到 JAX-RPC Web 服務用戶端有兩種方式:
    • 如果您具有或能夠建立服務的「Web 服務說明語言 (WSDL)」文件,請考慮使用 WSDL2Java 指令工具來產生 Web 服務的連結。雖然調整 Apache SOAP 用戶端來使用產生的 JAX-RPC 連結比較麻煩,但產生的用戶端程式碼較健全,也較易於維護。

      如果要採取此路徑,請參閱資訊中心裡有關開發 Web 服務用戶端的文章。

    • 如果您沒有服務的 WSDL 文件、不認為服務會變更,而且想要以最輕鬆的方式移植 Apache SOAP 用戶端,您可以將程式碼轉換為使用 JAX-RPC 動態呼叫介面 (DII),這類似於 Apache SOAP API。DII API 不使用 WSDL 或產生的連結。
    因為 JAX-RPC 沒有為使用者撰寫的序列化程式指定架構,所以 JAX-RPC 不支援使用自訂的序列化程式。 如果應用程式無法遵循 WebSphere® Application Server 所支援的 Java、WSDL 和 XML 技術之間的預設對映,請不要試圖移轉應用程式。 本主題的剩餘部分假設您已決定使用 JAX-RPC 動態呼叫介面 (DII) API。
  2. 檢閱 GetQuote 範例。 資訊中心的「範例」小節提供一個 Web 服務移轉範例。 這個範例位於 GetQuote.java 檔中(最初是針對 Apache SOAP 使用者所撰寫),內含移轉到 JAX-RPC DII 介面所需的變更的相關說明。 如需進一步瞭解,請參閱資訊中心的「範例」小節。
  3. 將用戶端應用程式從 Apache SOAP 轉換為 JAX-RPC DII Apache SOAP API 和 JAX-RPC DII API 結構很相似。 在兩者中,您可以實例化和配置 Call 物件、設定參數、呼叫作業及處理結果。 在 JAX-RPC 中,您可以使用下列指令建立 Service 物件的通用實例:
    javax.xml.rpc.Service service = ServiceFactory.newInstance().createService(new QName(""));
    1. 建立 Call 物件。 Apache SOAP 中是使用下列程式碼建立 Call 物件的實例:
      org.apache.soap.rpc.Call call = new org.apache.soap.rpc.Call ()
      JAX-RPC 中是使用下列程式碼建立 Call 物件的實例:
      java.xml.rpc.Call call = service.createCall();
    2. 設定端點「統一資源識別碼 (URI)」。 在 Apache SOAP 中,作業的目標 URI 當作參數傳遞至
      call.invoke:  call.invoke("http://...", "");
      在 JAX-RPC 中,setTargetEndpointAddress 方法當作參數傳遞至
      call.setTargetEndpointAddress("http://...");

      Apache SOAP 在 Call 物件上具有 setTargetObjectURI 方法,而此物件包含要求的遞送資訊。 JAX-RPC 沒有同等的方法。在 JAX-RPC 中,targetEndpoint URI 包含 targetObjectURI 中的資訊。

    3. 設定作業名稱。 Apache SOAP 中是使用下列程式碼在 Call 物件上配置作業名稱:
      call.setMethodName("opName");
      JAX-RPC 中使用 setOperationName 方法,此方法接受 QName 而非 String 參數,如下列範例所示:
      call.setOperationName(new javax.xml.namespace.Qname("namespace", "opName"));
    4. 設定編碼樣式。 Apache SOAP 中是使用下列程式碼在 Call 物件上配置編碼樣式:
      call.setEncodingStyleURI(org.apache.soap.Constants.NS_URI_SOAP_ENC);
      JAX-RPC 中是以 Call 物件的內容來設定編碼樣式:
      call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "http://schemas.
      xmlsoap.org/soap/encoding/");
    5. 宣告參數和設定參數值。 Apache SOAP 參數類型和值由參數實例來說明,並於呼叫之前收集到向量中,而且在 Call 物件上設定,例如:
      Vector params = new Vector (); 
      params.addElement (new org.apache.soap.rpc.Parameter(name, type, value, encodingURI)); 
      // 重複以設定其他參數...
      call.setParams (params);
      JAX-RPC 中以參數名稱和類型來配置 Call 物件,但不提供它們的值,例如:
      call.addParameter(name, xmlType, mode); 
      // 重複以設定其他參數
      call.setReturnType(type);
      其中
      • namejava.lang.String 類型)是參數的名稱
      • xmlTypejavax.xml.namespace.QName 類型)是參數的 XML 類型
      • modejavax.xml.rpc.ParameterMode 類型)是參數的模式,例如 IN、OUT 或 INOUT
    6. 執行呼叫。 Apache SOAP 中是使用下列程式碼在 Call 物件上呼叫作業:
      org.apache.soap.Response resp = call.invoke(endpointURI, "");
      在 JAX-RPC 中,參數值是收集到陣列中,並傳遞給 call.invoke,如下列範例所示:
      Object resp = call.invoke(new Object[] {parm1, parm2,...});
    7. 檢查錯誤。 在 Apache SOAP 中,您可以經由檢查回應來檢查呼叫時的 SOAP 錯誤:
      if resp.generatedFault then {   
      org.apache.soap.Fault f = resp.getFault;   
      f.getFaultCode();   
      f.getFaultString(); 
      }
      在 JAX-RPC 中,如果呼叫時發生 SOAP 錯誤,則會顯示 java.rmi.RemoteException 錯誤。
      try {
      ... call.invoke(...) 
      } catch (java.rmi.RemoteException) ...
    8. 擷取結果。 在 Apache SOAP 中,如果呼叫成功並傳回結果,則可以從 Response 物件擷取結果:
      Parameter result = resp.getReturnValue(); return result.getValue();
      在 JAX-RPC 中,沒有出現異常狀況時,傳回的物件就是呼叫的結果:
      Object result = call.invoke(...);
       ... 
      return result;

結果

您已將 Apache SOAP Web 服務移轉到基於 Java EE 規格的 JAX-RPC Web 服務。

下一步

根據 Web Services for Java EE 規格開發 Web 服務用戶端。

測試啟用 Web 服務的用戶端,確定移轉處理程序已成功,然後您就可以在 Java EE 環境中實作 Web 服務。


指出主題類型的圖示 作業主題



時間戳記圖示 前次更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_migratewbs
檔名:twbs_migratewbs.html