This is an automated email from the ASF dual-hosted git repository. robertlazarski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-core.git
commit 22329f740a249276cafc77e7a26b9b4566557d75 Author: Robert Lazarski <[email protected]> AuthorDate: Sun Apr 5 16:48:55 2026 -1000 openapi: add explanatory comments on the three OpenApiSpecGenerator fixes Co-Authored-By: Claude Sonnet 4.6 <[email protected]> --- .../org/apache/axis2/openapi/OpenApiSpecGenerator.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/modules/openapi/src/main/java/org/apache/axis2/openapi/OpenApiSpecGenerator.java b/modules/openapi/src/main/java/org/apache/axis2/openapi/OpenApiSpecGenerator.java index 0d8ea463e1..17ffd20368 100644 --- a/modules/openapi/src/main/java/org/apache/axis2/openapi/OpenApiSpecGenerator.java +++ b/modules/openapi/src/main/java/org/apache/axis2/openapi/OpenApiSpecGenerator.java @@ -99,7 +99,11 @@ public class OpenApiSpecGenerator { this.configuration = config != null ? config : new OpenApiConfiguration(); this.serviceIntrospector = new ServiceIntrospector(configContext); - // Configure Jackson for OpenAPI model serialization with HTTP/2 optimization metrics + // Configure Jackson for OpenAPI model serialization with HTTP/2 optimization metrics. + // Fix: NON_NULL inclusion is required because the Swagger model POJOs (Info, Contact, + // License, Schema, etc.) declare many optional fields that default to null. Without this, + // Jackson serializes every null field as "key": null, inflating a simple 3-service spec + // by ~300 null entries and producing invalid Swagger UI display artifacts. this.objectMapper = new ObjectMapper(); this.objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); this.objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); @@ -108,7 +112,11 @@ public class OpenApiSpecGenerator { this.objectMapper.enable(SerializationFeature.INDENT_OUTPUT); } - // Configure YAML mapper (same settings, different factory) + // Fix: generateOpenApiYaml() was returning JSON because it delegated to + // generateOpenApiJson(). A second ObjectMapper backed by YAMLFactory produces + // proper YAML. WRITE_DOC_START_MARKER is disabled to suppress the "---" header + // that confuses some YAML parsers. jackson-dataformat-yaml is already on the + // classpath transitively from io.swagger.core.v3:swagger-core. YAMLFactory yamlFactory = YAMLFactory.builder() .disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER) .build(); @@ -381,7 +389,11 @@ public class OpenApiSpecGenerator { tags.add(service.getName()); operation.setTags(tags); - // Add request body (all JSON-RPC services accept a JSON POST body) + // Fix: requestBody was null on every generated operation. All services registered + // here use JsonRpcMessageReceiver and expect a JSON POST body. Axis2 services have + // no JAX-RS annotations or WSDL parameter metadata that would let us introspect + // field-level schemas, so the body is typed as a generic "object" — sufficient for + // Swagger UI to render a Try-It-Out editor and for clients to know a body is required. RequestBody requestBody = new RequestBody(); requestBody.setRequired(true); requestBody.setDescription("JSON request body for " + axisOperation.getName().getLocalPart());
