I'm trying to parse part of a message to a pojo so i can process it in java. The message contains json, but i only need a part of it, so i tried to use jsonpath to pick the part of the json i need, but then i can't unmarshal, i also found a method to create the pojo directly from the jsonpath, but that returns null.
from(...)
.transform()
.jsonpath("@.data", false, POJO.class)
.process(...)
.end()
this leaves my POJO null.
from(...)
.transform.jsonpath("@.data")
.unmarshal().json(JsonLibrary.Jackson, POJO.class)
.process(...)
.end()
This throws an exception:
Error processing exchange. Exchange[ID-5CD9519Z86-1594305984947-0-330]. Caused by: [org.apache.camel.InvalidPayloadException - No body available of type: java.io.InputStream but has value: {...}]
at org.apache.camel.support.MessageSupport.getMandatoryBody(MessageSupport.java:118)
at org.apache.camel.support.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:58)
at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:395)
at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:60)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:147)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:286)
at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83)
at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:40)
at org.apache.camel.component.rabbitmq.RabbitConsumer.doHandleDelivery(RabbitConsumer.java:107)
at org.apache.camel.component.rabbitmq.RabbitConsumer.handleDelivery(RabbitConsumer.java:82)
at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:104)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: java.util.LinkedHashMap to the required type: java.io.InputStream with value {...}
at org.apache.camel.impl.converter.CoreTypeConverterRegistry.mandatoryConvertTo(CoreTypeConverterRegistry.java:216)
at org.apache.camel.support.MessageSupport.getMandatoryBody(MessageSupport.java:116)
... 15 common frames omitted
What would be the correct way to handle this.
Thanks in advance,
Bart Laeremans