You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2025/07/30 18:41:00 UTC
[jira] [Resolved] (CAMEL-22297) camel-jsonata does not support json array as input
[ https://issues.apache.org/jira/browse/CAMEL-22297?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen resolved CAMEL-22297.
---------------------------------
Resolution: Fixed
Thanks for reporting and the PR
> camel-jsonata does not support json array as input
> --------------------------------------------------
>
> Key: CAMEL-22297
> URL: https://issues.apache.org/jira/browse/CAMEL-22297
> Project: Camel
> Issue Type: Improvement
> Affects Versions: 4.8.8, 4.10.6, 4.13.0
> Reporter: Luis Sergio Faria Carneiro
> Priority: Minor
> Fix For: 4.8.9, 4.10.7, 4.14.0
>
>
> The jsonata component fails with the following exception: if the input body is a json array:
>
> {code:java}
> com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.LinkedHashMap<java.lang.String,java.lang.Object>` from Array value (token `JsonToken.START_ARRAY`)
> at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 1]
> at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59) ~[jackson-databind-2.19.1.jar:2.19.1]
> at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1794) ~[jackson-databind-2.19.1.jar:2.19.1]
> at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1568) ~[jackson-databind-2.19.1.jar:2.19.1]
> at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromArray(StdDeserializer.java:221) ~[jackson-databind-2.19.1.jar:2.19.1]
> at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:456) ~[jackson-databind-2.19.1.jar:2.19.1]
> at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:31) ~[jackson-databind-2.19.1.jar:2.19.1]
> at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342) ~[jackson-databind-2.19.1.jar:2.19.1]
> at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4971) ~[jackson-databind-2.19.1.jar:2.19.1]
> at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3932) ~[jackson-databind-2.19.1.jar:2.19.1]
> at org.apache.camel.component.jsonata.JsonataEndpoint.onExchange(JsonataEndpoint.java:152) ~[camel-jsonata-4.13.0.jar:4.13.0]
> at org.apache.camel.support.ProcessorEndpoint$1.process(ProcessorEndpoint.java:61) ~[camel-support-4.13.0.jar:4.13.0]
> at org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:65) ~[camel-support-4.13.0.jar:4.13.0]
> at org.apache.camel.processor.SendProcessor.sendUsingProducer(SendProcessor.java:252) ~[camel-core-processor-4.13.0.jar:4.13.0]
> at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:157) ~[camel-core-processor-4.13.0.jar:4.13.0]
> at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.handleFirst(RedeliveryErrorHandler.java:440) ~[camel-core-processor-4.13.0.jar:4.13.0]
> at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:416) ~[camel-core-processor-4.13.0.jar:4.13.0]
> at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199) ~[camel-base-engine-4.13.0.jar:4.13.0]
> at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189) ~[camel-base-engine-4.13.0.jar:4.13.0]
> at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166) ~[camel-base-engine-4.13.0.jar:4.13.0]
> at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148) ~[camel-base-engine-4.13.0.jar:4.13.0]
> at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59) ~[camel-base-engine-4.13.0.jar:4.13.0]
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:163) ~[camel-core-processor-4.13.0.jar:4.13.0]
> at org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:347) ~[camel-base-engine-4.13.0.jar:4.13.0]
> at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:323) ~[camel-base-engine-4.13.0.jar:4.13.0]
> at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:82) ~[camel-base-engine-4.13.0.jar:4.13.0]
> at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:32) ~[camel-support-4.13.0.jar:4.13.0]
> at org.apache.camel.component.platform.http.vertx.VertxPlatformHttpConsumer.processExchange(VertxPlatformHttpConsumer.java:269) ~[camel-platform-http-vertx-4.13.0.jar:4.13.0]
> at org.apache.camel.component.platform.http.vertx.VertxPlatformHttpConsumer.lambda$handleRequest$1(VertxPlatformHttpConsumer.java:229) ~[camel-platform-http-vertx-4.13.0.jar:4.13.0]
> at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$4(ContextImpl.java:192) ~[vertx-core-4.5.16.jar:4.5.16]
> at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270) [vertx-core-4.5.16.jar:4.5.16]
> at io.vertx.core.impl.ContextImpl$1.execute(ContextImpl.java:221) [vertx-core-4.5.16.jar:4.5.16]
> at io.vertx.core.impl.WorkerTask.run(WorkerTask.java:56) [vertx-core-4.5.16.jar:4.5.16]
> at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
> at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
> at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.119.Final.jar:4.1.119.Final]
> at java.base/java.lang.Thread.run(Thread.java:840) [?:?]
> {code}
> *Reproducer:*
> Consider integration.yaml:
> {code:java}
> - from:
> uri: rest:get:/test
> steps:
> - setBody:
> constant: "[1, 2, 3]"
> - to:
> uri: "jsonata:transform.jsonata"
> parameters:
> inputType: JsonString
> outputType: JsonString
> {code}
> and transform.jsonata:
> {code:java}
> $.{
> "double": 2 * $
> } {code}
> Run the code with jbang:
> {code:java}
> jbang -Dcamel.jbang.version=4.13.0 camel@apache/camel run integration.yaml transform.jsonata {code}
> and submit a get request to the endpoint.
> {code:java}
> curl http://localhost:8080/test {code}
> The same data on [https://try.jsonata.org/] yields the result:
> {code:java}
> [ { "double": 2 }, { "double": 4 }, { "double": 6 }] {code}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)