JAXB Model (Auto) Creation - BloomReach Experience - Open Source CMS

This article covers a Hippo CMS version 10. There's an updated version available that covers our most recent release.


JAXB Model (Auto) Creation

Before you can develop a REST client you need to generate a JAXB model for the remote service. The model classes can be generated from an XML Schema specifying the service's response XML. Often a Schema is not provided, however it can usually be automatically generated from a sample response.

As example we use the GoGreen REST API to retrieve (top 10 product) documents:


This URL returns XML by default but you can specify JSON as well:


Copy REST Response XML to Project

Save the XML response as an XML file in your project:

If you need to work with an external RESTful API which supports JSON only, convert the saved JSON respons to XML using an online tool such as  http://www.utilities-online.info/xmltojson/#.VIYbuqTF_aM

Generate XML Schema

You can now generate an XML Schema from model.xml. Many IDEs (e.g. IntelliJ) have built-in tools to do this, or you can use the online  XSD/XML Schema Generator at freeformatter.com:

Online XSD Generator

Save the Schema in your project:

You can tweak the Schema to your specific needs.

Generate JAXB Java Classes from XML Schema

Finally generate JAXB classes from Schema. Again many IDEs offer this functionality built-in or through a plugin, or you can use the command line tool xjc.

If you use xjc, create a package org.example.jaxb in the site module of your project ( site/src/main/java/org/example/jaxb) and run the following command from your project's root directory:

xjc site/src/main/resources/model.xsd -d site/src/main/java/org/example/jaxb

You will see the following output:

parsing a schema...
compiling a schema...

The generated Java classes will be placed in the package org.example.jaxb.generated.

Move the two classes to org.example.jaxb and remove the generated directory.

Next Step

CXF Client Development

Did you find this page helpful?
How could this documentation serve you better?
On this page
    Did you find this page helpful?
    How could this documentation serve you better?