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]

Reply via email to