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 ofConfigModelin 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 acceptsConfigModelinstances 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
HttpClientServiceinstance 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
defaultQueryFormatto control the default serialization format for array-style query parameters when the OpenAPI spec does not explicitly definestyleand/orexplode.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
- Globally via
-
Note:
BracketNotationcurrently shares the same behavior asRepeatedKeysin 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 supportsConfigModelinstances 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
HttpClientBuilderRegistryinstead 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
MultipartEntityandMessagePart. - 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:
- Update Business Logic: Implement abstract business logic classes and register with factories.
- Configure Factories: Set up factory registry with appropriate business logic variants.
- Update Error Handling: Replace custom error handling with new exception hierarchy.
- Review Validation: Leverage ValidationHelper for parameter validation.
- 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.