Skip to main content
Version: Next

Changelog

Version 0.8.1 (preview) - 2025-12-15โ€‹

๐Ÿ”„ Changesโ€‹

  • Method Order: Generated method order now reflects OpenAPI specification order instead of arbitrary order (non-breaking, only affects code organization).

๐Ÿ› Bug Fixesโ€‹

  • JSON Array Deserialization: Fixed model lists to properly handle JSON array inner data types in addition to JSON objects.

Version 0.8.0 (preview) - 2025-12-01โ€‹

๐Ÿš€ New Featuresโ€‹

Configuration Builder Pattern (Client & Server)โ€‹

  • ConfigModelBuilder: New builder class for programmatic configuration of ConfigModel in both ABL client and ABL PASOE server generation modes, mirroring JSON schema structure.
  • SerializationOptionsBuilder: Nested builder for configuring JSON serialization behavior (emitDefaults, omitEmptyCollections, omitNulls) in both client and server modes.
  • Builder Integration: ConfigManager:Initialize() now accepts ConfigModel instances built programmatically in both client and server modes, providing alternative to file-based configuration.
  • Conservative Defaults: Serialization options default to all false (no defaults emitted, include empty collections and nulls) for predictable behavior in both modes.

HTTP Client Builder Registry (Client Generation)โ€‹

  • Shared HTTP Client Mode: All API classes now share a single HttpClientService instance by default for optimal performance and connection reuse.
  • HttpClientBuilderRegistry: New registry class provides centralized HTTP client builder management with hierarchical lookup and caching.
  • Multi-Server Support: Registry supports multiple servers defined in OpenAPI specifications with server-specific client instances.
  • Hierarchical Configuration: Builder lookup uses hierarchical fallback similar to logging framework for flexible configuration.

Query Parameter Formatting Options (Client)โ€‹

  • Added new configuration option defaultQueryFormat to control the default serialization format for array-style query parameters when the OpenAPI spec does not explicitly define style and/or explode.

    Falls back to the OpenAPI-prescribed default (style=form, explode=true โ†’ repeated keys) unless overridden.

    Available formats:

    • RepeatedKeys โ†’ ?status=val1&status=val2 (OpenAPI default)
    • CommaSeparated โ†’ ?status=val1,val2 (style=form, explode=false)
    • PipeDelimited โ†’ ?status=val1|val2 (style=pipeDelimited, explode=false)
    • SpaceDelimited โ†’ ?status=val1%20val2 (style=spaceDelimited, explode=false)
    • BracketNotation โ†’ ?status[]=val1&status[]=val2 (form-style with [] suffix)
    • IndexedKeys โ†’ ?status[0]=val1&status[1]=val2 (non-standard, PHP-style)
    • JsonString โ†’ ?status=["val1","val2"] (non-standard, JSON encoded)
  • The chosen default can be overridden:

    • Globally via defaultQueryFormat
    • Globally per-parameter via DefaultRequestOptions:QueryFormatMap
    • Per-request via RequestOptions:QueryFormatMap
  • Note: BracketNotation currently shares the same behavior as RepeatedKeys in most cases.
    A future release may add a dedicated flag if you want [] suffixes without changing the explode behavior.

  • Backwards compatibility: Existing generated clients will continue to use RepeatedKeys (the official OpenAPI default) unless you explicitly configure otherwise.

๐Ÿ”„ Changesโ€‹

Configuration Management (Client & Server)โ€‹

  • ConfigManager Enhancement: ConfigManager:Initialize() now supports ConfigModel instances created via builders in both client and server modes, providing programmatic configuration alternative.
  • README Structure: Reorganized configuration sections in both client and server READMEs to present file-based config first, followed by in-code builder examples with cross-references to avoid duplication.

API Layer Refactoring (Client Generation)โ€‹

  • Registry-Based Initialization: API classes now retrieve HTTP clients through the HttpClientBuilderRegistry instead of direct factory calls.
  • Shared Client Instances: Default constructors use shared HTTP client instances for improved performance.
  • Registry Integration: Automatic builder lookup by fully qualified class name with fallback mechanisms.

Registry Architecture Benefits (Client Generation)โ€‹

  • Performance Optimization: Connection sharing reduces overhead and improves throughput.
  • Memory Efficiency: Single client instances minimize resource usage.
  • Configuration Flexibility: Per-API and per-server configuration support.
  • Extensibility: Custom builder registration for specialized requirements.

๐Ÿ”ง Breaking Changesโ€‹

HTTP Client Initialization (Client Generation)โ€‹

  • API Constructor Changes: Default API constructors now use registry lookup instead of direct factory instantiation.
  • Builder Registration: Custom HTTP client configuration now uses HttpClientBuilderRegistry:RegisterBuilder() instead of factory methods.

Migration Guide:

using {packageName}.Apis.PetApi from propath.

// Before (0.7.x) - Automatic
var PetApi oPetApi = new PetApi().
// HTTP client automatically retrieved from factory

// After (0.8.x) - Automatic (no code changes needed)
var PetApi oPetApi = new PetApi().
// Shared client automatically retrieved via registry

// Custom builder registration (optional for advanced use cases)
var builder = new HttpClientConfigurationBuilder()
:SetBasePath("https://custom.api").
HttpClientBuilderRegistry:RegisterBuilder("{packageName}.Apis.PetApi", builder).
var PetApi oPetApi = new PetApi(). // Uses custom builder

๐Ÿ“š Documentation Updatesโ€‹

  • HTTP Client Builder Registry: Comprehensive documentation of the new registry system, shared mode benefits, and customization options.
  • Migration Examples: Code examples showing before/after usage patterns.
  • Builder Registry Usage: Detailed examples of custom builder registration and multi-server configuration.

Version 0.7.0 (latest) - 2025-11-02โ€‹

This release introduces major enhancements to the generated OpenEdge ABL code, focusing on server-side business logic, comprehensive validation, error handling, and configuration management. The generator now produces more robust, enterprise-ready ABL applications with advanced features for PASOE deployment.

๐Ÿš€ New Features in Generated ABL Codeโ€‹

This release introduces major enhancements to the generated OpenEdge ABL code, focusing on server-side business logic, comprehensive validation, error handling, and configuration management. The generator now produces more robust, enterprise-ready ABL applications with advanced features for PASOE deployment.

Business Logic Frameworkโ€‹

  • Abstract Business Logic Classes: New abstract classes (e.g., AbstractOrdersBusinessLogic.cls) provide a standardized base for implementing business logic with factory-based instantiation.
  • Business Logic Factories: Dynamic factory pattern allows runtime selection of business logic implementations via headers or configuration.
  • Mock Business Logic: Generated mock implementations for testing and development environments.
  • Factory Registry: Centralized registry for managing business logic factories with support for multiple variants.

Validation & Error Handlingโ€‹

  • ValidationHelper Class: Comprehensive parameter and payload validation utilities supporting OpenAPI constraints, custom patterns, and schema validation.
  • Validation Context: Structured validation state management with performance optimizations.
  • RFC 7807 Error Models: Standardized error responses with detailed error information, including ValidationError.cls, ApiErrorDetails.cls, and builders.
  • Exception Hierarchy: New exception classes for API operations, models, and validation errors with proper inheritance.

Configuration Managementโ€‹

  • ConfigManager Class: Centralized configuration management with metadata support and dynamic reloading.
  • Serialization Options: Configurable JSON serialization settings for models.
  • Application Metadata: Enhanced metadata handling for PASOE applications, including sequence management and effective app names.

Enhanced WebHandlersโ€‹

  • Business Logic Integration: WebHandlers now automatically instantiate and use business logic via factories.
  • Multipart Support: Native handling of multipart/form-data requests with MultipartEntity and MessagePart.
  • Typed Responses: Strongly-typed API result handling with builders and validation.
  • Custom Error Handling: Advanced error processing with proper HTTP status codes and structured responses.

Model Enhancementsโ€‹

  • Builder Pattern Improvements: Enhanced model builders with chaining methods and additional overloads for easier object construction.
  • Nullable Properties: Proper handling of nullable fields without default ? values.
  • Component Request Bodies: Support for OpenAPI components in request bodies and models.
  • Query Parameter Formats: Standardized query parameter handling with explode formats and defaults.

Deployment & Infrastructureโ€‹

  • PASOE Setup Scripts: Automated Linux and Windows scripts for PASOE instance creation, handler deployment, and configuration.
  • Session Startup: Configurable session initialization with proper propath and agent management.
  • Handler Updates: Scripts for updating deployed handlers without full redeployment.
  • Logging Configuration: Structured logging setup with OpenEdge Logging framework.

๐Ÿ”„ Changes in Generated ABL Codeโ€‹

API Layerโ€‹

  • Request Builders: Improved chaining and overloads for request construction.
  • Response Handling: Enhanced API result classes with validation and error details.
  • HTTP Client Services: Better service factory patterns and configuration management.

Model Layerโ€‹

  • List Types: Consistent list implementations with proper builders and interfaces.
  • JSON Helpers: Enhanced serialization/deserialization with null handling and type safety.
  • Date/Time Handling: Improved timestamp and timezone support.

Service Layerโ€‹

  • Service Adapters: Factory-based instantiation with configuration support.
  • Interface Updates: Cleaner interfaces with proper separation of concerns.

๐Ÿ› Bug Fixes in Generated ABL Codeโ€‹

  • Serialization Issues: Fixed nullable property serialization to prevent invalid JSON.
  • Path Handling: Sanitized paths to remove trailing slashes and spaces.
  • Casting Errors: Corrected request model casting in webhandlers.
  • Factory Initialization: Ensured proper factory registration and instance retrieval.
  • Variable Naming: Unique variable names to avoid conflicts in generated code.
  • Import Statements: Cleaned up duplicate and unnecessary imports.

๐Ÿ“š Documentation & Examplesโ€‹

  • error-handling-validation-guide: Comprehensive guide for implementing validation and error handling.
  • README Updates: Enhanced documentation with deployment instructions and configuration examples.
  • Config Examples: Sample configuration files for different environments.

๐Ÿ”ง Breaking Changesโ€‹

  • Business Logic Instantiation: WebHandlers now require factory-based business logic initialization.
  • Error Response Format: Standardized to RFC 7807 with detailed error structures.
  • Configuration Access: Centralized through ConfigManager instead of direct properties.

๐Ÿ“ˆ Performance Improvementsโ€‹

  • Validation Performance: Optimized validation logic with early exits and caching.
  • Factory Pattern: Reduced instantiation overhead with singleton patterns.
  • JSON Processing: Improved serialization performance with better type handling.

๐Ÿ”’ Security Enhancementsโ€‹

  • Input Validation: Comprehensive validation prevents malformed requests.
  • Error Information: Controlled error disclosure to prevent information leakage.
  • Path Sanitization: Prevents path traversal attacks.

๐Ÿงช Testing Supportโ€‹

  • Mock Implementations: Generated mock business logic for unit testing.
  • Validation Testing: Helper methods for testing validation rules.
  • Factory Testing: Support for test-specific factory configurations.

๐Ÿ“‹ Migration Guideโ€‹

For existing projects upgrading to this version:

  1. Update Business Logic: Implement abstract business logic classes and register with factories.
  2. Configure Factories: Set up factory registry with appropriate business logic variants.
  3. Update Error Handling: Replace custom error handling with new exception hierarchy.
  4. Review Validation: Leverage ValidationHelper for parameter validation.
  5. Update Deployment: Use new PASOE setup scripts for deployment.

๐Ÿค Contributingโ€‹

This release includes contributions from multiple feature branches addressing server development, validation, business logic, and deployment automation.


Note: This changelog focuses on changes visible in the generated OpenEdge ABL code. Internal generator improvements (Rust codebase) are not included as they don't affect the output ABL applications.