Mapping JSON to XML without Java Objects

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Mapping JSON to XML without Java Objects

Lewis John Mcgibbney
Hi Folks,
I work on an object-to-datastore mapping framework called Apache Gora [0] and recently came across XStream for simplying data modeling in Gora.

I really like the project you guys are working on but i wonder if you can answer me one question.

Can I use only JSON e.g. as a string or FileInputStream as oppose to having to pass around objects? e.g. xstream.alias("product", Product.class);

Say for example I have many Objects, or another example would be that I do not actually have objects but I have JSON which "represents" the object(s).

In Gora we do data modeling in JSON before we compile the JSON into data beans therefore it would be much easier if I were able to produce XML from JSON as oppose to assuming that Java objects will be available.

Thanks in advance for any help.
Best
Lewis

[0] http://gora.apache.org

--
Lewis
Reply | Threaded
Open this post in threaded view
|

Re: Mapping JSON to XML without Java Objects

Jörg Schaible-4
Hi Lewis,

Lewis John Mcgibbney wrote:

> Hi Folks,
> I work on an object-to-datastore mapping framework called Apache Gora [0]
> and recently came across XStream for simplying data modeling in Gora.
>
> I really like the project you guys are working on but i wonder if you can
> answer me one question.
>
> Can I use only JSON e.g. as a string or FileInputStream as oppose to
> having to pass around objects? e.g. xstream.alias("product",
> Product.class);
>
> Say for example I have many Objects, or another example would be that I do
> not actually have objects but I have JSON which "represents" the
> object(s).

XStream's HierarchicalStreamDriver is simply a vehicle to provide
HierarchicalStreamReader and HierarchicalStreamWriter instances
reading/writing the same format (encapsulating additionally underlaying
implementations for parsers and formatters).

Technically it is no problem to use those implementations independently.
Since XStream's hierarchical stream has a unified model, it *is* possible to
transform the stream from one format into the other:

==================== %< ======================
HierarchicalStreamReader reader =
  new JettisonMappedXmlDriver().createReader(inputStream);
HierarchicalStreamWriter writer = new PrettyPrintWriter(javaIoWriter);
new HierarchicalStreamCopier().copy(reader, writer);
==================== %< ======================

> In Gora we do data modeling in JSON before we compile the JSON into data
> beans therefore it would be much easier if I were able to produce XML from
> JSON as oppose to assuming that Java objects will be available.

While you can do so with XStream, you should be aware, that XStream uses
Jettison as JSON parser, which is a wrapper around StAX translating the JSON
into the StAX model. Therefore you might get away here without the overhead
of XStream using the MappedXMLInputFactory of Jettison directly, which is an
implementation of StAX' XMLInputFactory.

Note, that newer Jettison version break XStream, because of a strange array
handling, you'll need version 1.2 (I have not tried latest version 1.3.3
yet).

Cheers,
Jörg


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply | Threaded
Open this post in threaded view
|

Re: Mapping JSON to XML without Java Objects

Lewis John Mcgibbney
Thank on this Jörg,
Im taking it in right now and will reply later.


On Thu, Jul 3, 2014 at 5:43 AM, Jörg Schaible <[hidden email]> wrote:
Hi Lewis,

Lewis John Mcgibbney wrote:

> Hi Folks,
> I work on an object-to-datastore mapping framework called Apache Gora [0]
> and recently came across XStream for simplying data modeling in Gora.
>
> I really like the project you guys are working on but i wonder if you can
> answer me one question.
>
> Can I use only JSON e.g. as a string or FileInputStream as oppose to
> having to pass around objects? e.g. xstream.alias("product",
> Product.class);
>
> Say for example I have many Objects, or another example would be that I do
> not actually have objects but I have JSON which "represents" the
> object(s).

XStream's HierarchicalStreamDriver is simply a vehicle to provide
HierarchicalStreamReader and HierarchicalStreamWriter instances
reading/writing the same format (encapsulating additionally underlaying
implementations for parsers and formatters).

Technically it is no problem to use those implementations independently.
Since XStream's hierarchical stream has a unified model, it *is* possible to
transform the stream from one format into the other:

==================== %< ======================
HierarchicalStreamReader reader =
  new JettisonMappedXmlDriver().createReader(inputStream);
HierarchicalStreamWriter writer = new PrettyPrintWriter(javaIoWriter);
new HierarchicalStreamCopier().copy(reader, writer);
==================== %< ======================

> In Gora we do data modeling in JSON before we compile the JSON into data
> beans therefore it would be much easier if I were able to produce XML from
> JSON as oppose to assuming that Java objects will be available.

While you can do so with XStream, you should be aware, that XStream uses
Jettison as JSON parser, which is a wrapper around StAX translating the JSON
into the StAX model. Therefore you might get away here without the overhead
of XStream using the MappedXMLInputFactory of Jettison directly, which is an
implementation of StAX' XMLInputFactory.

Note, that newer Jettison version break XStream, because of a strange array
handling, you'll need version 1.2 (I have not tried latest version 1.3.3
yet).

Cheers,
Jörg


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email





--
Lewis