自訂通訊協定處理常式範例程式碼

下列範例程式碼可用作開發自訂通訊協定處理常式的指導。

/**
  * 這個套件階層用於撰寫「通訊協定處理常式」。
  * [ProtocolName] 應當使用要撰寫其處理常式的
  * 通訊協定名稱取代。
  * 例如 com.crossworlds.connectors.utils.ProtocolHandlers.ftp
    或 com.crossworlds.connectors.utils.ProtocolHandlers.http
  */
 package com.crossworlds.connectors.utils.ProtocolHandlers.[ProtocolName];
  
  
 import CxCommon.BusinessObjectInterface;
 import com.crossworlds.connectors.utils.ProtocolHandlers.CWURLConnection;
 import com.crossworlds.DataHandlers.DataHandler;
  
 import AppSide_Connector.JavaConnectorUtil;
  
 import java.net.*;
 import java.io.*;
  
 /**
  * Handler 類別會建立 ProtocolNameConnection 類別實例
  * 它是透過 Java 的 URL getContent() 機制間接呼叫。
  *
  * 如何使用:
  * System.setProperty ("java.protocol.handler.pkgs",
  *"com.crossworlds.ProtocolHandler");
  *URL url = new URL ("the URL");
  *CWURLConnection uc  = (CWURLConnection) url.openConnection ();
 * /
 public class Handler
 {
    // 這將傳回適當的 URLConnection
    // 但是建構子僅會採用一個引數 - URL。它由
    // Java 網路功能組織架構呼叫。
    public URLConnection openConnection(URL url) throws IOException
    {
       // 您可以在此傳遞任何參數。
         return new MyURLConnection (url);
    }
 }
  
 class MyURLConnection extends CWURLConnection {
  
    /**
     * 它由 URL.openConnection() 實例化
     */
    public MyURLConnection(URL url)
    {
       // 將此 URL 儲存在某處
    }
  
    /**
     * 此方法傳回資料的內容類型
     */
    public String getContentType()
    {
       // 您需要在這裡判斷 URL 串流的內容類型 (aka
       // Mimetype)
    }
  
    /**
     *  此方法用於建立連線
     */
    public synchronized void connect() throws IOException
    {
       // 您可以呼叫 super().connect,因為它在大部份的
       // 時候都足以勝任。
       // 若是自訂通訊協定,在這裡進行訊息交換
    }
  
    /**
     * getContent () : CrossWorlds 使用的 getContent 方法。
     * 此方法使用 3 個參數
     *   - 輸入物件,
     *   - 資料的內容類型,及
     *   - 商業物件字首-用於建立商業
     *   物件名稱
     *   它會傳回適當的物件給呼叫程式。這個
     *   方法使用 DataHandler 的外曝 API 與
     *   DataHandler 相互作用。
     */
    public Object getContent(Object input,  String mimeType, String BOprefix)
                                 throws IOException
    {
       // 記載訊息
       JavaConnectorUtil.logMessage
       ("logging a message", JavaConnectorUtil.XRD_INFO);
  
       // 寫入追蹤
       if (JavaConnectorUtil.isTraceEnabled (JavaConnectorUtil.LEVEL3))
          JavaConnectorUtil.traceWrite  (JavaConnectorUtil.LEVEL3,
          "Level 3 trace msg");
  
       
       // 取得 datahandler
       DataHandler dh = DataHandler.createHandler (null, mimeType, BOprefix);
  
       InputStream in = dh.getStreamFromBO
       ( (BusinessObjectInterface) input, null);
  
       // 將此傳送到 URL
          - 從輸入串流讀取資料
          - 寫入 URL
          - 重複到處理完輸入串流為止。
  
       // 現在讀取回應
       String replyString = // 從 URL 讀取回覆的方式
       String outputType = // 取得回覆的 MIME 方式
  
 // 記得取得新 DH,因為送入的資料可能
 // 與最開始從通訊協定處理常式接收的資料
 // 具有不同的 MIME 類型
       DataHandler dh2 = DataHandler.createHandler
       (null, outputType, BOprefix);
  
       BusinessObjectInterface replyBO = dh2.getBO
       (replyString, outputType);
  
       return replyBO;  // 完成!
  
    }
  
 }
 

Copyright IBM Corp. 1997, 2003