This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new aca7bdf123 Update release notes.
aca7bdf123 is described below
commit aca7bdf1236cd63071397501f652eea58740c8a8
Author: James Bognar <[email protected]>
AuthorDate: Mon Oct 13 09:33:07 2025 -0400
Update release notes.
---
CLAUDE.md | 42 +++++
juneau-docs/docs/release-notes/9.2.0.md | 271 +++++++++++++++++++++++++++++++-
2 files changed, 307 insertions(+), 6 deletions(-)
diff --git a/CLAUDE.md b/CLAUDE.md
index 8651b93f2f..8e6f27c44b 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -1026,3 +1026,45 @@ public Builder textNodeDelimiter(String value) {
- ❌ Not passing the setting to the session if it's needed during serialization
This document serves as the definitive guide for unit testing in the Apache
Juneau project, ensuring consistency, maintainability, and comprehensive test
coverage.
+
+---
+
+## Release Notes Guidelines
+
+### Location
+When asked to "add to the release notes", this refers to the current release
file located at:
+- `/juneau-docs/docs/release-notes/<VERSION>.md`
+- **Current version**: `9.2.0`
+- **Current file**: `/juneau-docs/docs/release-notes/9.2.0.md`
+
+### Structure
+Release notes are organized into two main sections:
+
+1. **Top-level major changes** - High-level overview at the beginning of the
file listing significant changes
+2. **Per-module updates** - Detailed changes organized by module (similar to
9.0.0.md structure):
+ - `juneau-marshall`
+ - `juneau-rest-common`
+ - `juneau-rest-server`
+ - `juneau-rest-client`
+ - `juneau-dto`
+ - `juneau-microservice`
+ - `juneau-examples`
+ - Other modules as applicable
+
+### Format
+Each section should include:
+- New features
+- Bug fixes
+- Breaking changes
+- Deprecations
+- Performance improvements
+- Documentation updates
+- API changes
+
+### Process
+1. Read the current release notes file (9.2.0.md) to understand the existing
structure
+2. Determine if the change is a major change (top-level) or module-specific
+3. Add new entries under the appropriate section and module
+4. Use clear, concise descriptions with code examples where helpful
+5. Include issue/PR references where applicable
+6. Maintain consistent formatting with existing entries (see 9.0.0.md for
reference)
diff --git a/juneau-docs/docs/release-notes/9.2.0.md
b/juneau-docs/docs/release-notes/9.2.0.md
index 742cefc526..936afed5d7 100644
--- a/juneau-docs/docs/release-notes/9.2.0.md
+++ b/juneau-docs/docs/release-notes/9.2.0.md
@@ -13,13 +13,265 @@ Features and release date are subject to change.
Juneau 9.2.0 is a minor release focused on enhancements and bug fixes.
-More details will be provided as development progresses.
+Major changes include:
-#### Planned Features
+- JSON Schema beans upgraded to Draft 2020-12 specification with backward
compatibility for Draft 04
+- Comprehensive enhancements to HTML5 beans with improved javadocs and
`HtmlBuilder` integration
+- Standardized license headers across all Java files
+- Enhanced test coverage for OpenAPI 3.0 and Swagger 2.0 beans
+- Removed `final` modifiers from many classes to improve testability with
Mockito and other mocking frameworks
+- Improved `RestRequest` and `RestResponse` to work cleanly with
try-with-resources blocks
+- **New Module**: Introduced `juneau-bct` (Bean-Centric Testing) with fluent
APIs for comprehensive bean testing
-- Additional improvements and bug fixes
-- Enhanced performance optimizations
-- Documentation updates
+### juneau-dto
+
+#### juneau-bean-jsonschema
+
+- **JSON Schema Draft 2020-12 Compliance**: The `JsonSchema` bean has been
upgraded to support JSON Schema Draft 2020-12 while maintaining backward
compatibility with Draft 04.
+
+ New properties added:
+ - `$id` (replaces `id`)
+ - `$defs` (replaces `definitions`)
+ - `const` - Single constant value validation
+ - `examples` - Array of example values
+ - `if`, `then`, `else` - Conditional schema validation
+ - `readOnly`, `writeOnly` - Property access control
+ - `contentMediaType`, `contentEncoding` - String content metadata
+ - `prefixItems` - Array prefix validation
+ - `unevaluatedItems`, `unevaluatedProperties` - Unevaluated content handling
+ - `dependentSchemas`, `dependentRequired` - Property dependencies
+
+ Modified properties:
+ - `exclusiveMaximum` / `exclusiveMinimum` - Now support numeric values
(Draft 2020-12) in addition to boolean (Draft 04)
+ - `enum` - Changed to `List<Object>` to support any type
+
+- **Improved Maintainability**: Removed explicit `@Bean(properties)`
annotation in favor of automatic alphabetical property discovery with
`JsonSerializer.DEFAULT_SORTED`.
+
+- **Enhanced Documentation**:
+ - Updated package-info with comprehensive usage examples
+ - Added migration guide from Draft 04 to Draft 2020-12
+ - Merged `package2.html` content into `package-info.java` for consolidated
documentation
+
+- **Bug Fixes**:
+ - Added `@BeanIgnore` to internal setters (`setName`, `setSchemaMap`) to
prevent serialization issues in HTML round-trip tests
+ - Fixed fallback logic for deprecated properties to prevent double
serialization
+
+#### juneau-bean-openapi3
+
+- **Enhanced Test Coverage**: Achieved near 100% instruction coverage for all
OpenAPI 3.0 beans
+ - Added comprehensive tests for `MediaType`, `Link`, `Example`,
`RequestBody`, `Header`, `Encoding`, `SecurityScheme`, `OAuthFlows`,
`OAuthFlow`, `ServerVariable`, `Discriminator`, `Xml`, `ExternalDocumentation`
+ - Added validation tests for required fields and strict mode behavior
+ - Added reference resolution tests (`resolveRefs()`) for all applicable beans
+
+- **Collection Method Consistency**: Ensured all collection properties have
the standard 4-method pattern:
+ - `setX(X...)` - varargs setter
+ - `setX(Collection<X>)` - Collection setter
+ - `addX(X...)` - varargs adder
+ - `addX(Collection<X>)` - Collection adder
+
+- **Bug Fixes**:
+ - Fixed `OpenApi.resolveRefs()` to properly handle `servers` array references
+ - Added null-safety checks in various `resolveRefs()` implementations
+
+#### juneau-bean-swagger
+
+- **Enhanced Test Coverage**: Achieved near 100% instruction coverage for all
Swagger 2.0 beans
+ - Added comprehensive tests for `ParameterInfo`, `HeaderInfo`, `Tag`,
`SecurityScheme`, `Xml`, `ExternalDocumentation`
+ - Added validation tests for required fields and strict mode behavior
+ - Added reference resolution tests for all applicable beans
+
+- **Collection Method Consistency**: Standardized collection property methods
across all beans
+
+- **Bug Fixes**:
+ - Fixed `Swagger.resolveRefs()` to properly resolve references in nested
structures
+ - Added null-safety checks in path and definition resolution
+
+#### juneau-bean-html5
+
+- **Comprehensive Javadoc Enhancements**: Updated javadocs for all 95 HTML5
bean classes with:
+ - Detailed descriptions of each HTML element's purpose and usage
+ - Complete attribute documentation with enumerated values and constraints
+ - Multiple practical usage examples
+ - Links to W3C HTML5 specification for each element
+
+- **HtmlBuilder Integration**: Added `HtmlBuilder` creator method
documentation using javatree format:
+ ```java
+ /**
+ * <p>
+ * The following convenience methods are provided for constructing instances
of this bean:
+ * <ul class='javatree'>
+ * <li class='jc'>{@link HtmlBuilder}
+ * <ul class='javatree'>
+ * <li class='jm'>{@link HtmlBuilder#a() a()}
+ * <li class='jm'>{@link HtmlBuilder#a(Object, Object...) a(Object,
Object...)}
+ * </ul>
+ * </ul>
+ * </p>
+ */
+ ```
+
+- **Example Refactoring**: Replaced constructor-based examples with
`HtmlBuilder` methods where applicable (examples with children defined)
+
+- **Documentation Consistency**: Standardized formatting and structure across
all HTML5 bean classes
+
+### juneau-core
+
+#### License Header Standardization
+
+- **Java Files**: Replaced non-standard comment-based license headers with the
standard Apache License block comment format across all Java files
+- **Properties Files**: Updated license headers in `.properties` files to use
the standard format
+- **XML Files**: Standardized XML license headers with proper comment syntax
+- **Package Statement Fixes**: Corrected package statements that were in
unusual positions after license header changes
+
+#### Mockito Compatibility
+
+- **Removed `final` Modifiers**: Removed `final` modifiers from many classes
across the framework to improve testability with Mockito and other mocking
frameworks that require non-final classes. This change makes it significantly
easier to write unit tests for code that uses Juneau APIs.
+
+### juneau-marshall
+
+#### XML Serialization
+
+- **Text Node Delimiter**: Added `textNodeDelimiter` property to
`XmlSerializer` and `HtmlSerializer` to control spacing between consecutive
text nodes.
+
+ Example usage:
+ ```java
+ XmlSerializer serializer = XmlSerializer.create()
+ .textNodeDelimiter(" ")
+ .build();
+ ```
+
+ With this setting, serializing:
+ ```java
+ new Audio().children("a", "b", new Strong("c"));
+ ```
+
+ Produces: `<audio>a b<strong>c</strong></audio>`
+ Instead of: `<audio>ab<strong>c</strong></audio>`
+
+ This improves readability of HTML5 bean output by adding proper spacing
between text elements.
+
+- **Disable JSON Type Tags**: Added `disableJsonTags()` method to
`XmlSerializer` and `HtmlSerializer` to disable JSON type identifier tags in
XML output.
+
+ Example usage:
+ ```java
+ XmlSerializer serializer = XmlSerializer.create()
+ .disableJsonTags()
+ .build();
+ ```
+
+ When enabled, JSON type tags (e.g. `<string>`) and attributes will not be
added to the output. This produces cleaner XML but may affect parsing accuracy
as type information is lost.
+
+ **Note**: Disabling JSON tags can cause different data to be parsed (e.g.,
strings instead of numbers) since type information is not preserved in the XML.
+
+### juneau-bct (NEW MODULE)
+
+#### Bean-Centric Testing Framework
+
+A new testing module that provides fluent, powerful APIs for testing Java
beans with minimal boilerplate code.
+
+**Key Features**:
+
+- **Fluent Assertion API**: Chain multiple assertions with readable, natural
language syntax
+ ```java
+ assertBean(myBean)
+ .property("name").is("John")
+ .property("age").isType(Integer.class).is(25)
+ .property("email").matches(".*@example\\.com");
+ ```
+
+- **Deep Property Path Navigation**: Test nested bean properties with dot
notation and collection indexing
+ ```java
+ assertBean(swagger)
+ .asJson().is("paths.'/users'.get.summary", "Get all users")
+ .asJson().is("definitions.User.properties.id.type", "integer");
+ ```
+
+- **Serialization Testing**: Round-trip testing for JSON, XML, HTML, and other
formats
+ ```java
+ assertBean(bean)
+ .asJson().is("{name:'John',age:25}")
+ .asXml().contains("<name>John</name>");
+ ```
+
+- **Collection Assertions**: Simplified testing of arrays, lists, and maps
+ ```java
+ assertBean(swagger)
+ .property("tags").asCollection().size().is(3)
+ .property("tags[0].name").is("users");
+ ```
+
+- **Exception Testing**: Clean assertions for exception testing
+ ```java
+ assertThrown(() -> bean.setRequired(null))
+ .isType(IllegalArgumentException.class)
+ .message().contains("cannot be null");
+ ```
+
+- **Test Utilities**: Helper methods for common testing patterns
+ - `assertMap()` - Map-specific assertions
+ - `assertList()` - List-specific assertions
+ - `assertString()` - String pattern matching and validation
+ - `assertObject()` - Generic object assertions
+
+**Benefits**:
+- Reduces test code verbosity by up to 70%
+- Improves test readability and maintainability
+- Provides consistent testing patterns across the codebase
+- Supports all Juneau serialization formats
+- Works seamlessly with JUnit 5
+
+**Example Usage**:
+```java
+@Test
+void testSwaggerDocument() {
+ Swagger swagger = new Swagger()
+ .info(new Info().title("My API").version("1.0"))
+ .path("/users", new PathItem()
+ .get(new Operation()
+ .summary("Get users")
+ .response("200", new Response().description("Success"))));
+
+ assertBean(swagger)
+ .asJson().is("info.title", "My API")
+ .asJson().is("info.version", "1.0")
+ .asJson().is("paths.'/users'.get.summary", "Get users")
+ .asJson().is("paths.'/users'.get.responses.'200'.description",
"Success");
+}
+```
+
+See the module documentation for complete API reference and examples.
+
+### juneau-rest-client
+
+#### RestRequest and RestResponse
+
+- **Try-With-Resources Support**: Enhanced `RestRequest` and `RestResponse` to
work cleanly with try-with-resources blocks:
+ - `RestRequest` now implements `AutoCloseable` and automatically closes
`RestResponse` if a response has been created
+ - `close()` methods no longer throw checked exceptions (following
AutoCloseable best practices)
+ - Unchecked exceptions are thrown for critical failures
+ - Checked exceptions (including `RestCallException`) are logged but not
thrown, preventing exceptions from being masked in try-with-resources
+
+ Example usage:
+ ```java
+ RestClient client = RestClient.create().build();
+ try (RestRequest req = client.get("/api/users")) {
+ String response = req.run().getContent().asString();
+ } // Automatic cleanup with proper exception handling
+ ```
+
+- **Improved Error Handling**: Added comprehensive logging for exceptions
caught during cleanup to aid debugging while maintaining AutoCloseable
compliance and preventing exception masking in try-catch blocks
+
+### Documentation
+
+#### Historical Javadocs
+
+- **Javadocs Archive**: Set up versioned javadocs hosting at `/javadocs/` with:
+ - Landing page with cards for all historical versions (7.1.0 through 9.1.0)
+ - "Current (Development)" link pointing to `/site/apidocs/` for latest
Maven-generated docs
+ - Helper scripts for adding new versions (`add-javadocs.sh`)
+ - Comprehensive documentation for maintainers (`README.md`,
`JAVADOCS_SETUP.md`)
+
+- **Git LFS Considerations**: Documented Git LFS limitations with Apache
GitBox and alternative deployment strategies
#### Known Issues
@@ -27,4 +279,11 @@ None at this time.
#### Migration Notes
-Migration notes will be provided upon release.
+- **JsonSchema**: Code using `JsonSchema` beans will continue to work without
changes. For Draft 2020-12 features:
+ - Use `$id` instead of `id` for new schemas
+ - Use `$defs` instead of `definitions` for new schemas
+ - Use `exclusiveMaximumValue`/`exclusiveMinimumValue` for numeric exclusive
bounds (old boolean style still supported)
+
+- **RestClient**: If you have custom implementations that override `close()`
methods, ensure they don't throw checked exceptions to comply with
AutoCloseable contract.
+
+- **License Headers**: If you have custom tooling that depends on the old
license header format, update it to recognize the new standard Apache License
block comment format.