Luis Sergio Faria Carneiro created CAMEL-22297:
--------------------------------------------------

             Summary: camel-jsonata does not support json array inputs
                 Key: CAMEL-22297
                 URL: https://issues.apache.org/jira/browse/CAMEL-22297
             Project: Camel
          Issue Type: Bug
    Affects Versions: 4.13.0, 4.10.6, 4.8.8
            Reporter: Luis Sergio Faria Carneiro


The jsonata component fails if the input body is a json array with the 
following exception:

 
{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)

Reply via email to