A small update. When using the xstream library it successfully unmarshal the
json. However the resulting List is a List of Map, each containing one
element with the class name as key, and not a List or POJOs as one might
expect.


On Fri, 5 Jun 2015 at 21:26 Pontus Ullgren <[email protected]> wrote:

> Hello again,
>
> Tried adding FAIL_ON_UNKNOWN_PROPERTIES to the object mapper but it did
> not help.
> I also tried with the gson datamapper with the same result.
>
> What I find strange is that the datamappers can not unmarshal the json
> they have them self created. :-/
> Apart from that the fact that marshaling a list adds the class name to
> the json.
> This makes the resulting json very tightly coupled to the implementation.
>
> On Wed, 3 Jun 2015 at 12:16 Pontus Ullgren <[email protected]> wrote:
>
>> Thanks I will try this.
>>
>> However I'm still a bit surprised over the way that the unmarshal add the
>> full name of the POJO class to the JSON.
>> Not very convenient when sending data to a external system where I do not
>> have any control over the logic.
>>
>> Not sure if this is an issue only when  useList="true" or if unmarshaling
>> a separate POJO will also add this data.
>>
>>
>> // Pontus
>>
>> On Wed, 3 Jun 2015 at 10:28 Henryk Konsek <[email protected]> wrote:
>>
>>> 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 <[email protected]>
>>> 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":"[email protected]
>>> >
>>> ","productNo":"ABC123","amount":"10","dispatched":false}},{"com.ullgren.pontus.example.model.Order":{"id":"2","customerName":"Elmer
>>> > Fudd","customerEmail":"[email protected]
>>> >
>>> ","productNo":"GUN12G","amount":"2","dispatched":false}},{"com.ullgren.pontus.example.model.Order":{"id":"3","customerName":"Porky
>>> > Pig","customerEmail":"[email protected]
>>> >
>>> ","productNo":"STU3","amount":"8","dispatched":false}},{"com.ullgren.pontus.example.model.Order":{"id":"4","customerName":"Foghorn
>>> > J. Leghorn","customerEmail":"[email protected]
>>> > ","productNo":"CORN961","amount":"10","dispatched":false}},{"
>>> com.ullgren.pontus.example.model.Order":{"id":"5","customerName":"Wile
>>> > E. Coyote","customerEmail":"[email protected]
>>> > ","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.int
>>> erceptor.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
>>> >
>>>
>>

Reply via email to