You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/12/24 12:04:10 UTC
(camel) 05/08: CAMEL-14028: Allow DataFormats to unmarshal known data formats without first converting to bytes
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch unmarshal
in repository https://gitbox.apache.org/repos/asf/camel.git
commit b6c0b78abfaf20da7afbc2b734a439f2223781f7
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Dec 24 12:23:49 2023 +0100
CAMEL-14028: Allow DataFormats to unmarshal known data formats without first converting to bytes
---
.../component/fastjson/FastjsonDataFormat.java | 29 +++++++++++++++++++---
1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/components/camel-fastjson/src/main/java/org/apache/camel/component/fastjson/FastjsonDataFormat.java b/components/camel-fastjson/src/main/java/org/apache/camel/component/fastjson/FastjsonDataFormat.java
index eeb0053cab1..a21a9cb4c1b 100644
--- a/components/camel-fastjson/src/main/java/org/apache/camel/component/fastjson/FastjsonDataFormat.java
+++ b/components/camel-fastjson/src/main/java/org/apache/camel/component/fastjson/FastjsonDataFormat.java
@@ -109,11 +109,32 @@ public class FastjsonDataFormat extends ServiceSupport
}
@Override
- public Object unmarshal(final Exchange exchange, final InputStream stream) throws Exception {
- if (unmarshalGenericType == null) {
- return JSON.parseObject(stream, config.getCharset(), unmarshalType, config.getFeatures());
+ public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
+ return unmarshal(exchange, (Object) stream);
+ }
+
+ @Override
+ public Object unmarshal(Exchange exchange, Object body) throws Exception {
+ if (body instanceof String str) {
+ if (unmarshalGenericType == null) {
+ return JSON.parseObject(str, unmarshalType, config.getFeatures());
+ } else {
+ return JSON.parseObject(str, unmarshalGenericType, config.getFeatures());
+ }
+ } else if (body instanceof byte[] arr) {
+ if (unmarshalGenericType == null) {
+ return JSON.parseObject(arr, unmarshalType, config.getFeatures());
+ } else {
+ return JSON.parseObject(arr, unmarshalGenericType, config.getFeatures());
+ }
} else {
- return JSON.parseObject(stream, config.getCharset(), unmarshalGenericType, config.getFeatures());
+ // fallback to input stream
+ InputStream is = exchange.getContext().getTypeConverter().mandatoryConvertTo(InputStream.class, exchange, body);
+ if (unmarshalGenericType == null) {
+ return JSON.parseObject(is, config.getCharset(), unmarshalType, config.getFeatures());
+ } else {
+ return JSON.parseObject(is, config.getCharset(), unmarshalGenericType, config.getFeatures());
+ }
}
}