Background
PR #2192 upgrades commons-digester from version 1.8 (released 2006) to commons-digester3 version 3.3 to address security vulnerabilities and improve Java 21 compatibility. However, during code review, several concerns were raised about the digester3 library itself:
- Version Issue: Maven Central only has digester3 version 3.2 (not 3.3), which could cause build failures
- Security Concerns: The library has transitive dependencies with known CVEs (commons-beanutils):
- Unmaintained: The commons-digester3 library itself is effectively unmaintained (last update 2011-2013)
- Modern Alternatives: XML parsing in 2026 has better alternatives (Jackson XML, JAXB, simple DOM parsing, etc.)
Current Usage
Digester3 is currently used in 3 files for XML configuration parsing:
1. Measurement Type Configuration
File: src/main/java/ca/openosp/openo/encounter/oscarMeasurements/util/EctFindMeasurementTypeUtil.java
Purpose: Parses XML files that define clinical measurement types (blood pressure, weight, height, etc.) and their validation rules
Pattern: XML → EctFormProp → EctMeasurementTypesBean + EctValidationsBean
Complexity: ~30 lines of digester configuration (lines 58-82)
2. EForm Auto-Population Configuration
File: src/main/java/ca/openosp/openo/eform/EFormLoader.java
Purpose: Parses apconfig.xml to configure database auto-population rules for electronic forms
Pattern: XML → DatabaseAP objects (SQL queries + output formatting)
Complexity: ~15 lines of digester configuration (lines 172-201)
3. Custom Report Configuration
File: src/main/java/ca/openosp/openo/PMmodule/web/reports/custom/UCRConfigurationManager.java
Purpose: Parses custom report configuration XML for program management module
Pattern: XML → UCRConfiguration → DataSource → Form → Item hierarchy
Complexity: ~20 lines of digester configuration (lines 35-77, static initializer)
Investigation Tasks
Success Criteria
One of the following outcomes:
- Full Migration: Replace digester3 with modern alternative, remove dependency entirely
- Partial Migration: Migrate some use cases, document why others remain
- Keep with Mitigation: Document why digester3 is retained, implement CVE mitigations (upgrade beanutils to >=1.11.0)
Related
Background
PR #2192 upgrades commons-digester from version 1.8 (released 2006) to commons-digester3 version 3.3 to address security vulnerabilities and improve Java 21 compatibility. However, during code review, several concerns were raised about the digester3 library itself:
Current Usage
Digester3 is currently used in 3 files for XML configuration parsing:
1. Measurement Type Configuration
File:
src/main/java/ca/openosp/openo/encounter/oscarMeasurements/util/EctFindMeasurementTypeUtil.javaPurpose: Parses XML files that define clinical measurement types (blood pressure, weight, height, etc.) and their validation rules
Pattern: XML → EctFormProp → EctMeasurementTypesBean + EctValidationsBean
Complexity: ~30 lines of digester configuration (lines 58-82)
2. EForm Auto-Population Configuration
File:
src/main/java/ca/openosp/openo/eform/EFormLoader.javaPurpose: Parses
apconfig.xmlto configure database auto-population rules for electronic formsPattern: XML → DatabaseAP objects (SQL queries + output formatting)
Complexity: ~15 lines of digester configuration (lines 172-201)
3. Custom Report Configuration
File:
src/main/java/ca/openosp/openo/PMmodule/web/reports/custom/UCRConfigurationManager.javaPurpose: Parses custom report configuration XML for program management module
Pattern: XML → UCRConfiguration → DataSource → Form → Item hierarchy
Complexity: ~20 lines of digester configuration (lines 35-77, static initializer)
Investigation Tasks
Success Criteria
One of the following outcomes:
Related