Fix JsonToObjectTransformer for ClassNotFoundEx (#3228)
* Fix JsonToObjectTransformer for ClassNotFoundEx Related to https://github.com/spring-projects/spring-integration/issues/3223 The `JsonToObjectTransformer` consults `JsonHeaders` first and tries to build a `ResolvableType` from other type headers which may be just a string identifications. In this case a `ClassNotFoundException` could be thrown if a `ResolvableType` cannot be build against non-class identificators * Add `valueTypeExpression` option to the `JsonToObjectTransformer` to let to build a `ResolvableType` using any possible custom logic, e.g. resolving target classes from some registry using their ids from the mentioned headers **Cherry-pick to 5.2.x** * * Fix English language mistakes
This commit is contained in:
@@ -277,7 +277,7 @@ See <<json-transformers>> for more information about `JsonObjectMapper` implemen
|
||||
|
||||
The `StreamTransformer` transforms `InputStream` payloads to a `byte[]`( or a `String` if a `charset` is provided).
|
||||
|
||||
The following example shows how to use the `stream-tansformer` element in XML:
|
||||
The following example shows how to use the `stream-transformer` element in XML:
|
||||
|
||||
====
|
||||
[source, xml]
|
||||
@@ -449,6 +449,11 @@ Starting with version 5.2, the `JsonToObjectTransformer` can be configured with
|
||||
Also this component now consults request message headers first for the presence of the `JsonHeaders.RESOLVABLE_TYPE` or `JsonHeaders.TYPE_ID` and falls back to the configured type otherwise.
|
||||
The `ObjectToJsonTransformer` now also populates a `JsonHeaders.RESOLVABLE_TYPE` header based on the request message payload for any possible downstream scenarios.
|
||||
|
||||
Starting with version 5.2.6, the `JsonToObjectTransformer` can be supplied with a `valueTypeExpression` to resolve a `ResolvableType` for the payload to convert from JSON at runtime against the request message.
|
||||
By default it consults `JsonHeaders` in the request message.
|
||||
If this expression returns `null` or `ResolvableType` building throws a `ClassNotFoundException`, the transformer falls back to the provided `targetType`.
|
||||
This logic is present as an expression because `JsonHeaders` may not have real class values, but rather some type ids which have to be mapped to target classes according some external registry.
|
||||
|
||||
[[Avro-transformers]]
|
||||
===== Apache Avro Transformers
|
||||
|
||||
|
||||
Reference in New Issue
Block a user