下列範例程式碼可用作開發自訂通訊協定處理常式的指導。
/** * 這個套件階層用於撰寫「通訊協定處理常式」。 * [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; // 完成! } }