Skip to content

chore: java 17 and jackson 3 - #2417

Merged
ewaostrowska merged 1 commit into
3.0.0from
jackson-java-migration
Nov 4, 2026
Merged

ewaostrowska merged 1 commit into
3.0.0from
jackson-java-migration

Conversation

@ewaostrowska

@ewaostrowska ewaostrowska commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Swagger Core 3.0 moved to Jackson 3 (tools.jackson) and Java 17. Swagger Parser 2.x still depends on Jackson 2 (com.fasterxml.jackson), Java 8 and Swagger Core 2.2.x, so it cannot consume Swagger Core 3.0 or share mappers and JsonNode types with it. This PR starts the 3.0.0 line of the parser on the new stack.


What changed

  • pom.xml (root): version 3.0.0-SNAPSHOT; maven.compiler.release 8 → 17; swagger-core-version 3.0.0; import tools.jackson:jackson-bom (jackson3-bom-version 3.2.4); replace JMockit with Mockito (5.24.0); enforcer requireJavaVersion [17,); javadoc source/link updated to 17; surefire argLine now @{argLine} (JMockit agent removed).
  • modules/*/pom.xml: version bump; Jackson coordinates com.fasterxml.jackson.core/dataformat → tools.jackson.core/dataformat (jackson-annotations stays on com.fasterxml); JMockit removed; commons-lang3 and slf4j-api declared explicitly in swagger-parser-v3 because they are no longer transitive via Swagger Core 3.x; WireMock Jackson exclusion dropped.
  • ObjectMapperFactory: build mappers with JsonMapper.builder / YAMLMapper.builder via a MapperBuilder; use DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS; set NON_NULL with changeDefaultPropertyInclusion; drop explicit JavaTimeModule (built in to Jackson 3).
  • DeserializationUtils: JSON_MAPPER_FOR_YAML built with the builder API (EnumFeature, StreamWriteFeature, DateTimeFeature) instead of a static init block; catch JacksonException instead of IOException; remove deprecated new Integer(0).
  • OpenAPIV3Parser.getParseErrorMessage: catch JacksonException; translate Jackson 3's Duplicate Object property "x" to the 2.x text Duplicate field 'x'.
  • OpenAPIDeserializer, SchemaTypeUtil, ResolverCache, JsonSchemaParserExtension, IdsTraverser, OpenAPI31Traverser, OpenAPIDereferencer31, Reference, ReferenceUtils, ReferenceVisitor: import and API renames (TextNode → StringNode, fieldNames() → propertyNames(), elements() → values(), isContainerNode() → isContainer(), etc.).
  • SwaggerParser (swagger-parser) and swagger-parser-cli/v2-converter poms: adapt to the new Jackson coordinates and drop the JMockit agent.
  • MIGRATION.md, README.md: new migration guide for 3.0 (Java 17, Jackson types in the public API, mixed Jackson 2/3 classpath note); README updated for 3.0.
  • .github/workflows/maven-v3.yml: CI workflow for the 3.0.0 branch.

Type of Change

  • 🐛 Bug fix
  • ✨ New feature
  • ♻️ Refactor (non-breaking change)
  • 🧪 Tests
  • 📝 Documentation
  • 🧹 Chore (build or tooling)

Checklist

  • I have added/updated tests as needed
  • I have added/updated documentation where applicable
  • The PR title is descriptive
  • The code builds and passes tests locally
  • I have linked related issues (if any)

Screenshots / Additional Context

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

A critical active finding shows that disabling the test leaves the public aggregate vulnerable to silent example-data loss at the Jackson 2/3 boundary, requiring a fix and restored test coverage before release.

1 open issue
What changed in this PR

This pull request starts the Swagger Parser 3.0 line by migrating the project to Java 17, Jackson 3, Swagger Core 3.0, and Mockito while updating parser internals, tests, documentation, and build configuration.

Changes:

  • Updates Maven configuration, dependency coordinates, Java requirements, CI, and testing tools.
  • Migrates mapper construction, tree APIs, exception handling, and reference processing to Jackson 3.
  • Replaces JMockit with Mockito and adds migration and Jackson 3 behavior coverage.
  • Adds Java 17/Jackson 3 migration guidance and documents Jackson 2/3 coexistence concerns.
File Summary
README.md Documents the Java 17/Jackson 3 migration; the dependency example still references swagger-parser 2.1.48 and should be updated or labeled as a 2.x example.
pom.xml Updates the project version, Java release, dependency BOMs, Mockito, enforcer, Javadoc, and Surefire configuration.
modules/​swagger-parser/​pom.xml Updates the aggregate parser module and Jackson dependency coordinates.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​util/​RefUtilsTest.java Replaces JMockit static mocks with Mockito.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​util/​OpenAPIDeserializerTest.java Migrates test Jackson imports to Jackson 3.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​test/​ResolverCacheTest.java Migrates Jackson and mocking APIs.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​test/​RelativeReferenceTest.java Replaces static URL mocks with Mockito.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​test/​OpenAPIV3ParserTest.java Migrates Jackson APIs and test fixtures.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​test/​OpenAPIV31ParserSchemaTest.java Updates Jackson 3 mapper rebuilding and pretty-printing.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​test/​OpenAPIResolverTest.java Migrates Jackson mapper and exception types.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​test/​OAI31DeserializationTest.java Migrates Jackson node imports.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​test/​NullHandlingTest.java Updates Jackson 3 node assertions.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​test/​NetworkReferenceTest.java Replaces JMockit URL mocks with Mockito.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​test/​LocalReferenceTest.java Replaces JMockit URL mocks with Mockito.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​test/​JsonToYamlFileDuplicator.java Migrates the Jackson tree-node type.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​reference/​ReferenceVisitorTest.java Migrates the Jackson tree-node type.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​processors/​SchemaProcessorTest.java Replaces JMockit construction mocks with Mockito.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​processors/​ResponseProcessorTest.java Replaces processor construction mocks with Mockito.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​processors/​ParameterProcessorTest.java Replaces JMockit mocks and expectations with Mockito.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​processors/​OperationProcessorTest.java Replaces JMockit mocks with Mockito construction and static mocks.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​processors/​ExternalRefProcessorTest.java Replaces JMockit and URL mocks with Mockito.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​processors/​ComponentsProcessorTest.java Migrates processor construction mocking to Mockito.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​ObjectMapperTest.java Tests built-in Jackson 3 Java time support.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​MigrationUserImpactTest.java Adds public API and migration behavior tests.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​JacksonNodeBehaviourTest.java Records Jackson 3 node conversion behavior.
modules/​swagger-parser-v3/​src/​test/​java/​io/​swagger/​v3/​parser/​Jackson3MigrationBehaviourTest.java Tests Jackson 3 defaults and parser compatibility behavior.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​util/​SchemaTypeUtil.java Migrates schema node access to Jackson 3.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​util/​OpenAPIDeserializer.java Migrates deserialization, traversal, and scalar conversion APIs.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​util/​DeserializationUtils.java Builds the YAML mapper with Jackson 3 APIs and handles JacksonException.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​ResolverCache.java Migrates resolver tree-node types to Jackson 3.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​reference/​ReferenceVisitor.java Updates reference traversal node APIs.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​reference/​ReferenceUtils.java Migrates reference utility node types to Jackson 3.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​reference/​Reference.java Migrates reference model node types to Jackson 3.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​reference/​OpenAPIDereferencer31.java Migrates OpenAPI 3.1 dereferencing node types.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​reference/​OpenAPI31Traverser.java Updates Jackson 3 exception and node handling.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​reference/​IdsTraverser.java Updates Jackson 3 exception handling.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​OpenAPIV3Parser.java Migrates parsing exceptions and duplicate-property message handling.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​ObjectMapperFactory.java Builds configured JSON and YAML mappers with Jackson 3 builders.
modules/​swagger-parser-v3/​src/​main/​java/​io/​swagger/​v3/​parser/​extensions/​JsonSchemaParserExtension.java Migrates the extension tree-node interface to Jackson 3.
modules/​swagger-parser-v3/​pom.xml Updates dependencies for Jackson 3, Mockito, and explicit runtime libraries.
modules/​swagger-parser-v2-converter/​src/​test/​java/​io/​swagger/​parser/​test/​V2ConverterTest.java Disables the example conversion test despite an unresolved Jackson 2/3 boundary that can cause silent data loss.
modules/​swagger-parser-v2-converter/​pom.xml Updates the converter module and removes the JMockit agent.
modules/​swagger-parser-safe-url-resolver/​src/​test/​java/​io/​swagger/​v3/​parser/​urlresolver/​PermittedUrlsCheckerTest.java Replaces JMockit static mocks with Mockito.
modules/​swagger-parser-safe-url-resolver/​pom.xml Updates the module and replaces JMockit with Mockito.
modules/​swagger-parser-core/​pom.xml Bumps the core module version.
modules/​swagger-parser-cli/​src/​main/​java/​io/​swagger/​v3/​parser/​SwaggerParser.java Makes CLI output encoding explicitly UTF-8.
modules/​swagger-parser-cli/​pom.xml Updates the CLI module, parser dependency, and test configuration.
MIGRATION.md Adds Java 17, Jackson 3, API, dependency, and behavior migration guidance.

This pull request requires changes.

Review effort: Lite

@ewaostrowska
ewaostrowska merged commit 035df8a into 3.0.0 Nov 4, 2026
6 checks passed
@ewaostrowska
ewaostrowska deleted the jackson-java-migration branch November 4, 2026 13:40
ewaostrowska added a commit that referenced this pull request Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants