I wondered how various RESTful implementations (like RESTeasy) use JAXB annotations to create JSON output. The Answer is Jackson – see Using JAXB annotations with Jackson.
<!-- Jackson --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-lgpl</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-lgpl</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-xc</artifactId> <version>1.3.0</version> </dependency>
package cz.zizka.ondra.jacksontest; import java.io.IOException; import javax.xml.bind.annotation.XmlRootElement; import org.codehaus.jackson.map.AnnotationIntrospector; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.xc.JaxbAnnotationIntrospector; /** * * @author Ondrej Zizka */ public class JacksonTest extends TtdTestBase { public void testJackson() throws IOException { ObjectMapper mapper = new ObjectMapper(); AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(); // make deserializer use JAXB annotations (only) mapper.getDeserializationConfig().setAnnotationIntrospector(introspector); // make serializer use JAXB annotations (only) mapper.getSerializationConfig().setAnnotationIntrospector(introspector); mapper.writeValue( System.out, new Car("Red Devil") ); } }// class JacksonTest @XmlRootElement class Car { public String name; public Car( String name ) { this.name = name; } }
Nice, simple, easy. Enjoy!