+

Search Tips   |   Advanced Search

Implementing a custom outbound connection service filter

Application developers can implement a custom outbound connection service filter.

Custom outbound connection service filters implement the interface com.ibm.mashups.proxy.ext.OutboundServiceFilter. They are instantiated from a factory class com.ibm.mashups.proxy.ext.OutboundServiceFilterFactory.

The following listing is an example of a custom outbound service filter:

package sample.test.filters;
 import com.ibm.mashups.proxy.Context;
import com.ibm.mashups.proxy.configuration.AjaxProxyConfiguration;
import com.ibm.mashups.proxy.ext.ConnectionStatusEvent;
import com.ibm.mashups.proxy.ext.FlowControl;
import com.ibm.mashups.proxy.ext.OutboundServiceFilter;
import com.ibm.mashups.proxy.ext.OutboundServiceFilterFactory;
 public class MyFilterFactory implements OutboundServiceFilterFactory {
     /**
      * This method is called whenever an outbound HTTP conenction        * is opened for a url for which this custom filter        * is defined in its configuration settings.        * The method receives the URL of the outbound connection,        * the proxy configuration, and the runtime context.
      * The method must return a filter object that implements the        * OutboundServiceFilter interface.
      */
      @Override
      public OutboundServiceFilter newOutboundServiceFilter(URL url,     AjaxProxyConfiguration proxyConfig,       Map<String,String> metadata,    Context runtimeCtx) throws IOException {
            return new MyCustomFilter();
      }
}
 public class MyCustomFilter implements OutboundServiceFilter {
     /*
      * This method is called for outbound HTTP connections        * for which this filter has been configured.        * The method receives the HttpURLConnection object        * that connects against the remote server.
      * The method is called immediately before the connect() method        * is called against that HttpURLConnection object. This means that       * the implementation of this method can retrieve or modify the setup        * parameters and the general request properties of this connection objects.        * The filter can abend the connection, by invoking errorHandler.setError()        * or errorHandler.setRedirect().
      */
      @Override
      public void preConnect(HttpURLConnection urlConnection, FlowControl errorHandler)        {
          // implement the custom code here.
      }
     /*
      * This method is called for outbound HTTP connections for that this        * filter has been configured.        * The method receives the HttpURLConnection object that has connected        * against the remote server.
      * The method is called immediately after connect() method is called        * against that HttpURLConnection object, which means, the implementation        * of this method is allowed to retrieve or modify the response header        * fields and the remote content.
      * The filter can abend the connection, by invoking errorHandler.setError()        *or errorHandler.setRedirect().
      */
      @Override
      public void postConnect(HttpURLConnection urlConnection,  Map<String, List<String>> modifiableResponseHeaders,   FlowControl errorHandler) {
             // implement the custom code here.  }
             /**
       * This method is called whenever the outbound connection service ran         * into an error. The method receives an eventData object that         * contains information about the problem that occurred, such as the name, * the id and the parameter array of a resource bundle containing the         * error message which describes the problem, as well as information about         * the failing http connection.           * The filter can use this method to override the error handling, by         * invoking  by invoking errorHandler.setError() or         * errorHandler.setRedirect(). For example, the error handler can         * override the error message or override the HTTP status of the         * outbound connection.
       */
      @Override
      public void handleError(ConnectionStatusEvent eventData,    FlowControl errorHandler) {
          // implement the custom code here.
      }
Make sure the filter class can be loaded at run time. For example, place the class file in the /WEB-INF/lib directory of the web module containing the code that establishes the outbound HTTP connection.


Parent Custom outbound service filters