The following sample code can be used as a guide when developing a custom protocol handler.
/** * This package hierarchy is used to write the Protocol Handler. * [ProtocolName] should be substituted with the name of the protocol * for which the handler is being written. * For example com.crossworlds.connectors.utils.ProtocolHandlers.ftp or 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.*; /** * The handler class creates a ProtocolNameConnection class instance * It is invoked indirectly via Java's URL getContent() mechanism. * * how to use it: * System.setProperty ("java.protocol.handler.pkgs", *"com.crossworlds.ProtocolHandler"); *URL url = new URL ("the URL"); *CWURLConnection uc = (CWURLConnection) url.openConnection (); * / public class Handler { // this will return the appropriate URLConnection // But the constructor takes only one argument - the URL. As this // is called by Java Networking Framework. public URLConnection openConnection(URL url) throws IOException { // you can pass in any parameters here. return new MyURLConnection (url); } } class MyURLConnection extends CWURLConnection { /** * This is instantiated by URL.openConnection() */ public MyURLConnection(URL url) { // store this URL some where } /** * This method returns the content type of the data */ public String getContentType() { // here is where you have to determine the content Type (aka // Mimetype) of URL streams } /** * This method is used to create a connection */ public synchronized void connect() throws IOException { // you might call super().connect as it suffices most of the // time. // If it is custom protocol, do the handshaking stuff here } /** * getContent () : The getContent method used by CrossWorlds. * This method takes in 3 parameters * - input Object, * - content type for the data & * - Business Object Prefix to * be used to create the Business * Object name * It returns an appropriate Object back to the caller. This * method interacts with the DataHandler using the exposed APIs * for the DataHandler. */ public Object getContent(Object input, String mimeType, String BOprefix) throws IOException { // log a message JavaConnectorUtil.logMessage ("logging a message", JavaConnectorUtil.XRD_INFO); // write a trace if (JavaConnectorUtil.isTraceEnabled (JavaConnectorUtil.LEVEL3)) JavaConnectorUtil.traceWrite (JavaConnectorUtil.LEVEL3, "Level 3 trace msg"); // get a datahandler DataHandler dh = DataHandler.createHandler (null, mimeType, BOprefix); InputStream in = dh.getStreamFromBO ( (BusinessObjectInterface) input, null); // Send this to URL - read data from Input Stream - write to URL - repeat until input stream is drained. // Now read the response String replyString = // some how read the reply from URL String outputType = // get the mime of reply some how // remember to get a fresh DH, as the incoming data may be of // different mime type than was originally received by the // protocol handler DataHandler dh2 = DataHandler.createHandler (null, outputType, BOprefix); BusinessObjectInterface replyBO = dh2.getBO (replyString, outputType); return replyBO; // DONE! } }