Tatu,
Thanks for your time appreciating the subject.
I understand that for the json representation the root element name is
irrelevant, but not so for an xml schema. I also think that the XmlObject
must retain the root element name when reading an ObjectNode entry. I'm not
that fluent in the jackson code base, I'll try to take a look to find the
place to make the change and propose a patch, if you have any clue to drive
me to the probable place, please, fell free to do so.
--
D.
Em segunda-feira, 6 de março de 2017 21:52:36 UTC-3, Tatu Saloranta
escreveu:
>
> The problem with your code is that you are for some reason assuming
> that `user` would be dropped for some reason: it is not. JSON
> structure that would be equivalent is rather:
>
> { "user" : {
> "name" : "Joe",
> "age" : 28
> }
> }
>
> So basically there is no 'age' property in main level object: there is
> just 'user'. This is by design; while there is no guarantee Tree model
> api works (it is not officially supported by XML backend), it will try
> to represent XML content as closely as possible.
> The only way to do that is to retain root element name as well.
>
> -+ Tatu +-
>
>
> On Mon, Mar 6, 2017 at 1:34 PM, Diego Oliveira <[email protected]
> <javascript:>> wrote:
> > Hello all,
> >
> > I'm using the Jackson json library to work with some Json/Xml
> content,
> > the content type is dynamic. My feature needs to open the payload,
> remove
> > some data and generate a new version. The problem I'm getting is the way
> > Jackson is handling the root element name for xml content. Follows one
> > example that works and one that don't.
> >
> > Prints different, but I wanted it to be equal
> >
> > ObjectMapper xmlMapper = new XmlMapper();
> >
> > String original = "<user><name>jhon</name><age>28</age></user>";
> > String expected = "<user><name>jhon</name></user>";
> >
> > ObjectNode obj = xmlMapper.readValue(original,
> ObjectNode.class);
> > obj.remove("age");
> >
> > String serialized = xmlMapper.writeValueAsString(obj);
> >
> > if (expected.equals(serialized)) {
> > System.out.println("Equals");
> > } else {
> > System.out.println("Different");
> > }
> >
> > Print equals as expected
> >
> > ObjectMapper jsonMapper = new ObjectMapper();
> >
> > String original = "{\"name\":\"Joe\",\"age\":28}";
> > String expected = "{\"name\":\"Joe\"}";
> >
> > ObjectNode obj = jsonMapper.readValue(original,
> ObjectNode.class);
> > obj.remove("age");
> > String serialized = jsonMapper.writeValueAsString(obj);
> >
> > if (expected.equals(serialized)) {
> > System.out.println("Equals");
> > } else {
> > System.out.println("Different");
> > }
> >
> > The gist contains the full example code
> > https://gist.github.com/diegooliveira/34252ae174cfee4e52628ecfc962aaf1.
> Are
> > there any way that this code might work properly?
> >
> > Thanks in advance,
> > D.
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups
> > "jackson-user" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> an
> > email to [email protected] <javascript:>.
> > To post to this group, send email to [email protected]
> <javascript:>.
> > For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.