5

I am developing a project that already uses XML serialization, so I need an elegant solution to support JSON, by reusing the JAXB annotations.

Can anyone recommend some Java JSON libraries that makes a good reuse of JAXB annotations? Lightweight libraries are preferred.

nikuco
  • 221
  • 2
  • 8

2 Answers2

4

Note: I'm the EclipseLink JAXB (MOXy) lead, and a member of the JAXB (JSR-222) expert group.

Check out the JSON binding being added to EclipseLink JAXB (MOXy). Not only do we leverage the JAXB annotations we also leverage the runtime APIs:

package blog.json.twitter;

import java.util.Date;    
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(SearchResults.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        unmarshaller.setProperty("eclipselink.media.type", "application/json");
        StreamSource source = new StreamSource("http://search.twitter.com/search.json?q=jaxb");
        JAXBElement<SearchResults> jaxbElement = unmarshaller.unmarshal(source, SearchResults.class);

        Result result = new Result();
        result.setCreatedAt(new Date());
        result.setFromUser("bdoughan");
        result.setText("You can now use EclipseLink JAXB (MOXy) with JSON :)");
        jaxbElement.getValue().getResults().add(result);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.setProperty("eclipselink.media.type", "application/json");
        marshaller.marshal(jaxbElement, System.out);
    }

}

In addition to the JAXB annotations MOXy extensions (such as @XmlPath) are supported making it even easier to have one annotated model that can be used for both XML and JSON:

bdoughan
  • 147,609
  • 23
  • 300
  • 400
3

I'd Use Jackson. It seems to have good JAXB support out of the box.

Reference:

Sean Patrick Floyd
  • 292,901
  • 67
  • 465
  • 588
  • 1
    In our project we have used the "org.codehaus.jackson" annotations of the jackson library. Never touched the "javax.xml.bind.annotation" annotations directly. Probably depends on what you wanna do with the library, but my point is that there might be some other libraries that are more lightweight. Cheers! – despot Sep 06 '11 at 11:42
  • @despot more lightweight, perhaps. But Jackson has a simple API, is highly extendable and very fast. What else could one want? – Sean Patrick Floyd Sep 06 '11 at 12:05