Powered by Zoomin Software. For more details please contactZoomin

OpenEdge ABL API Reference

OpenEdge.Web.CatalogWebHandler

  • Last Updated: August 18, 2026
  • 4 minute read
    • OpenEdge
    • Version 12.8
    • Documentation
Namespace: OpenEdge.Web
Type: Class CatalogWebHandler
Parent Classes:
Inherits: OpenEdge.Web.WebHandler


Copyright (c) 2026 by Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved.
File:CatalogWebHandler
Purpose:Provide a standard endpoint for API catalog retrieval
Author(s):Dustin Grau
Created:Mon Feb 2 13:54:14 EDT 2026
Notes:By default provides an endpoint for OpenAPI v3.1
formatted catalog of available services from the
Service Registry used by the DataObjectHandler.
ENVIRONMENT VARIABLE OVERRIDE:
SERVICEMAP_PATHS - Optional override for service discovery paths
Format: Semicolon-separated list of absolute directory paths
Example: "C:/app/services;C:/common/maps;D:/shared/openedge"
When set, completely bypasses automatic path discovery and uses
only the specified paths to search for .gen/.map files.
When not set, automatically discovers paths based on:
- CATALINA_BASE/openedge (common location)
- CATALINA_BASE/ablapps/{ablApp}/openedge
- CATALINA_BASE/webapps/{webapp}/WEB-INF/openedge (WEB-enabled only)
By default a catalogService.handlers file will be deployed as part of
the .oeds package. However, if you with to manually utilize the class
as a WebHandler add the following entry within openedge.properties
for the appropriate ABL Application and WebApp:
handler<n>=OpenEdge.Web.CatalogWebHandler:catalogService/openapi
OEDS DEPLOYMENT AND USAGE:
>cd $CATALINA_BASE
>bin/tcman deployablsvc -oeds {DLC}/servers/pasoe/extras/catalogWebService.oeds -webapp {webapp-name} -ablapp {ablapp-name}
GET { http | https }://{host}:{port}/[{web_app}/]web/catalogService/openapi
/* Return the $CATALINA_BASE OS environment variable if set



Method Summary
  Options Name Purpose
  Discovery () /** * Discover and register available REST services for the current ABL application context. * * DISCOVERY LOGIC: * ---------------- * 1. Extract the current webapp name from the incoming HTTP request (e.g., 'ROOT', 'webapp1', etc.) * * 2. Look up which ABL application relates to this webapp by consulting the configuration * parsed from openedge.properties (happens regardless of WEB transport enabled status) * * 3. Build a list of paths to search for service mapping files (.gen/.map): * a) CATALINA_BASE/openedge - Common location (always searched) * b) CATALINA_BASE/ablapps/{ablApp}/openedge - Current ABL app location * c) CATALINA_BASE/webapps/{webapp}/WEB-INF/openedge - For EACH webapp belonging * to the current ABL app that has WEB transport enabled (enabled: true in config) * * 4. Register all services found in these paths with the ServiceRegistry * * RATIONALE: * ---------- * - The incoming webapp determines the ABL application context (which AVM/session) * - All webapps in the same ABL app share the same ServiceRegistry (in-memory) * - We search ALL enabled webapps for that ABL app because services from any of * them may be available in this shared registry * - Disabled webapps are skipped because without WEB transport, mapping files * won't be used/processed, so there's no point searching those locations * * EXAMPLE: * -------- * Request comes in on /webapp1 * - webapp1 belongs to ABL app "oepas1" * - oepas1 has webapps: ROOT (WEB enabled), webapp1 (WEB enabled), webapp2 (WEB disabled) * * Will search: * - CATALINA_BASE/openedge * - CATALINA_BASE/ablapps/oepas1/openedge * - CATALINA_BASE/webapps/ROOT/WEB-INF/openedge * - CATALINA_BASE/webapps/webapp1/WEB-INF/openedge * - (CATALINA_BASE/webapps/webapp2/WEB-INF/openedge is skipped - WEB disabled) */
  CHARACTER GetAblAppForWebApp (character) /** * Find the ABL application name for a given webapp. * Looks up the webapp in the oAppWebappConfig JSON structure. * Returns the ABL app name that owns this webapp, or empty string if not found. * Note: Returns the ABL app regardless of whether the webapp is enabled. */
  CHARACTER GetContext () /** * Get the context path (webapp) from the current web request * Extracts CONTEXT_PATH from the CGI environment variables * Returns '' as fallback if not available */
  CHARACTER GetCurrentWebApp () /** * Get the current webapp name from the web request context. * Extracts the webapp from the CONTEXT_PATH CGI variable. * Returns the webapp name (e.g., 'ROOT', 'demo', 'api'). */
  CHARACTER GetFullPathname (character) /** * Get the full pathname of a file or directory * Will return with '/' as the directory separator * Paths are returned without trailing slashes */
  CHARACTER GetHostname () /** * Get the hostname from the current web request * Extracts SERVER_NAME from the CGI environment variables * Returns 'localhost' as fallback if not available */
  Progress.Json.ObjectModel.JsonObject GetOpenApiCatalog () /** * Return a JSON object with an Open API v3.0 formatted description of resource endpoints. * This utilizes the static ServiceRegistry created at first use of the WEB-based service. */
  CHARACTER GetScheme () /** * Get the scheme (protocol) from the current web request * Checks HTTPS and REQUEST_SCHEME CGI environment variables * Returns 'http' or 'https' based on the request */
  INTEGER HandleGet (IWebRequest) /* Default handler for the HTTP GET method @param IWebRequest The request being serviced @return integer An optional status code. A zero or null value means this method will deal with all errors */
  INTEGER HandleNotAllowedMethod (IWebRequest)
  INTEGER HandleNotImplemented (IWebRequest)
  ScanCatalinaProperties () /** * Scan catalina.properties for HTTP/HTTPS port configuration. * Updates the iPort variable with the discovered port number. */
  ScanOpenEdgeProperties () /** * Scan openedge.properties for ABL application and webapp configuration. * Builds a JSON structure mapping ABL apps to their webapps with enabled status. * Format: { "ablAppName": { "webapps": { "webappName": true/false } } } */
  WriteResponse (IHttpResponse) /** Writes the response using the WebResponseWriter. This method allows us to unit test this handler (via gradle/batch). @param IHttpResponse The response to write */

Constructor Summary
  Options Name Purpose
  CatalogWebHandler ()

Property Summary
  Options Name Purpose
  CHARACTER CatalinaBase


Method Detail
Top

Discovery ()

Purpose:
Top

CHARACTER GetAblAppForWebApp (character)

Purpose:
Parameters:
pcWebApp CHARACTER
 
Returns CHARACTER
 
Top

CHARACTER GetContext ()

Purpose:
Returns CHARACTER
 
Top

CHARACTER GetCurrentWebApp ()

Purpose:
Returns CHARACTER
 
Top

CHARACTER GetFullPathname (character)

Purpose:
Parameters:
pcFile CHARACTER
 
Returns CHARACTER
 
Top

CHARACTER GetHostname ()

Purpose:
Returns CHARACTER
 
Top

Progress.Json.ObjectModel.JsonObject GetOpenApiCatalog ()

Purpose:
Returns Progress.Json.ObjectModel.JsonObject
 
Top

CHARACTER GetScheme ()

Purpose:
Returns CHARACTER
 
Top

INTEGER HandleGet (IWebRequest)

/* Default handler for the HTTP GET method
method will deal with all errors
Parameters:
poRequest OpenEdge.Web.IWebRequest
 
Returns INTEGER
  integer An optional status code. A zero or null value means this
Top

INTEGER HandleNotAllowedMethod (IWebRequest)

Parameters:
poRequest OpenEdge.Web.IWebRequest
 
Returns INTEGER
 
Top

INTEGER HandleNotImplemented (IWebRequest)

Parameters:
poRequest OpenEdge.Web.IWebRequest
 
Returns INTEGER
 
Top

ScanCatalinaProperties ()

Purpose:
Top

ScanOpenEdgeProperties ()

Purpose:
Top

WriteResponse (IHttpResponse)

Purpose: Writes the response using the WebResponseWriter.
This method allows us to unit test this handler (via gradle/batch).
Parameters:
poResponse OpenEdge.Net.HTTP.IHttpResponse
 


Constructor Detail
Top

CatalogWebHandler ()



Property Detail
Top

CHARACTER CatalinaBase

Returns CHARACTER
 


Alert