jamesnetherton opened a new pull request, #29461: URL: https://github.com/apache/camel/pull/29461
## Summary Camel's own code moves to Jackson 3 (`tools.jackson`), and `camel-jackson3` becomes the Jackson line that the catalog, Camel JBang and the Kamelet runtime use. The un-suffixed `camel-jackson*` artifacts stay on Jackson 2 and are unchanged; renaming the two lines is left for a later release. Libraries that only ship a Jackson 2 API (Azure core, swagger-core, opensearch-java, jslt, the Camunda client, langchain4j, openai-java, the Huawei Cloud SDK and others) keep their modules on Jackson 2, so the Jackson 2 BOM stays next to the Jackson 3 one. This follows the approach in the [JIRA comment](https://issues.apache.org/jira/browse/CAMEL-22857?focusedCommentId=18137895): the components move in place, and the third-party library upgrades that Jackson 3 needs get their own PRs. ## Decisions for review 1. **`camel-jackson3` uses the Jackson 3 defaults.** It has done so since it was added; what is new is that JBang applications and the Kamelets now get it. The change that matters most is REST binding: with `FAIL_ON_UNKNOWN_PROPERTIES` off, a JSON body that does not match its type is accepted instead of answered with a `400`. The upgrade guide has the table of changed defaults and how to restore one (`enableFeatures` / `disableFeatures`). A per-component option to opt back into the Jackson 2 defaults could follow if users ask for it. 2. **Internal mappers keep the Jackson 2 defaults** (`JsonMapper.builderWithJackson2Defaults()`), so what components send to external APIs and store does not change. Auditing these call sites, one by one, is follow-up work. 3. **One data format name, Jackson 3 preferred.** Both lines register `jackson`, `jacksonXml`, `avroJackson`, `protobufJackson` and their transformers. When both are on the classpath, the resolvers now pick the Jackson 3 one instead of the first found. The guide says to declare only one. 4. **Jackson 3 input limits are not changed back** (nesting 500 levels on read and write, strings up to 100M characters). 5. **Kamelets.** The Jackson-based Kamelets move to `camel:jackson3` and `tools.jackson` in the Kamelets 4.24 release, which Camel 4.24 needs for them. There is no compatibility layer for running 4.23 Kamelets against Camel 4.24. A component on Jackson 3 treats a Jackson 2 `JsonNode` as a bean; where a component reads the whole body, a Jackson 2 node is read as its JSON text. ## Reviewing Each commit covers one area and can be reviewed on its own. The first makes `camel-jackson3` the default line (catalog, resolvers, Camel JBang, the Kamelet runtime) and adds the shared upgrade guide section; the rest migrate the components in groups. Every user-visible change has an entry in the 4.24 upgrade guide. ## Not in this PR - networknt json-schema-validator 3 (CAMEL-23172), the MCP SDK Jackson 3 module (CAMEL-26469) and Flowable 8 (CAMEL-23143): separate PRs. - Modules bound to a library that only has a Jackson 2 API stay on Jackson 2. ## Testing Full build; unit tests of every touched module; integration tests of the touched components that run against containers; the Kamelets integration tests against this build. Also resolves CAMEL-23561 (`jsonschema-generator` 5, which `camel generate schema` needs on Jackson 3). _Claude Code on behalf of jamesnetherton_ 🤖 Generated with [Claude Code](https://claude.com/claude-code) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
