camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Henryk Konsek <hekon...@gmail.com>
Subject Re: Jackson JSON Dataformat can not unmarshal what it has marshaled
Date Wed, 03 Jun 2015 08:28:27 GMT
Hi,

IMHO We should ignore unknown fields in Jackson by default:

  objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false);

This is the essential option for Jackson, as JSON is usually not as strict
as XML. I would say that we should add failOnUnknownProperties options to
Jackson data format and default it to 'false'. What do you think?

Cheers!

PS Pontus, you can set the option on the object mapper by yourself as a
workaround.

wt., 2.06.2015 o 22:32 u┼╝ytkownik Pontus Ullgren <ullgren@gmail.com>
napisał:

> Hi,
>
> I'm trying to build a solution when I marshal POJO into JSON and send over
> JMS to a remote machine. On the remote machine message is also consumed by
> a Camel route.
>
> However the JSON on the remote machine is unable to marshal the JSON that
> the dataformater created.
>
> To show the error I created a smaller POC where I use a SEDA within the
> same camel context and it shows the same error.
> Here is the test project https://bitbucket.org/ullgren/jsonmarshaltest
>
> It seems that the unmarshal does not like the fact that the POJO class name
> is added as a field. Is there anyway to change this behaviour,
>
> The error I get is:
>
> [/jsonmarshaltest.sendToBackend] SedaConsumer                   WARN  Error
> processing exchange. Exchange[Message:
> [{"com.ullgren.pontus.example.model.Order":{"id":"1","customerName":"Joe
> Doe","customerEmail":"joe.doe@acme.com
> ","productNo":"ABC123","amount":"10","dispatched":false}},{"com.ullgren.pontus.example.model.Order":{"id":"2","customerName":"Elmer
> Fudd","customerEmail":"elmer.fudd@acme.com
> ","productNo":"GUN12G","amount":"2","dispatched":false}},{"com.ullgren.pontus.example.model.Order":{"id":"3","customerName":"Porky
> Pig","customerEmail":"porky.pig@acme.com
> ","productNo":"STU3","amount":"8","dispatched":false}},{"com.ullgren.pontus.example.model.Order":{"id":"4","customerName":"Foghorn
> J. Leghorn","customerEmail":"leghorn@acme.com
> ","productNo":"CORN961","amount":"10","dispatched":false}},{"com.ullgren.pontus.example.model.Order":{"id":"5","customerName":"Wile
> E. Coyote","customerEmail":"wile.coyote@acme.com
> ","productNo":"BOM44","amount":"100","dispatched":false}}]].
> Caused by:
> [com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException -
> Unrecognized field "com.ullgren.pontus.example.model.Order" (class
> com.ullgren.pontus.example.model.Order), not marked as ignorable (6 known
> properties: "productNo", "amount", "customerName", "dispatched", "id",
> "customerEmail"])
>  at [Source: java.io.ByteArrayInputStream@506208e4; line: 1, column: 45]
> (through reference chain:
>
> com.ullgren.pontus.example.model.Order["com.ullgren.pontus.example.model.Order"])]
> com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
> Unrecognized field "com.ullgren.pontus.example.model.Order" (class
> com.ullgren.pontus.example.model.Order), not marked as ignorable (6 known
> properties: "productNo", "amount", "customerName", "dispatched", "id",
> "customerEmail"])
>  at [Source: java.io.ByteArrayInputStream@506208e4; line: 1, column: 45]
> (through reference chain:
>
> com.ullgren.pontus.example.model.Order["com.ullgren.pontus.example.model.Order"])
> at
>
> com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:51)
> at
>
> com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:731)
> at
>
> com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:915)
> at
>
> com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1292)
> at
>
> com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1270)
> at
>
> com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:247)
> at
>
> com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)
> at
>
> com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:232)
> at
>
> com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:206)
> at
>
> com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
> at
>
> com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3051)
> at
>
> com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2206)
> at
>
> org.apache.camel.component.jackson.JacksonDataFormat.unmarshal(JacksonDataFormat.java:126)
> at
>
> org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:67)
> at
>
> org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:163)
> at
>
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:424)
> at
>
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
> at
>
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
> at
>
> org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:291)
> at
> org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:200)
> at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:147)
> at
>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> at java.lang.Thread.run(Thread.java:745)
>
> Thanks
> Pontus Ullgren
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message