CustomerContextResolver
By default a JAX-RS implementation will bootstrap a JAXBContext from the parameters or return type from a service method. You can control how the JAXBContext is created through the ContextResolver mechanism. The ContextResolver allows you to control what JAXBContext is used with a particular class. In this example we tell the JAX-RS implementation to use a MOXy JAXBContext in which the metadata has been supplied via XML:
package org.example;
import java.util.*;
import javax.ws.rs.Produces;
import javax.ws.rs.ext.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
@Provider
@Produces({"application/xml", "application/json"})
public class CustomerContextResolver implements ContextResolver<JAXBContext> {
private JAXBContext jc;
public CustomerContextResolver() {
try {
Map<String, Object> props = new HashMap<String, Object>(1);
props.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY, "org/example/binding.xml");
jc = JAXBContext.newInstance(new Class[] {Customer.class} , props);
} catch(JAXBException e) {
throw new RuntimeException(e);
}
}
public JAXBContext getContext(Class<?> clazz) {
if(Customer.class == clazz) {
return jc;
}
return null;
}
}
binding.xml
Below is the external mapping document we will use for this example. For more information on MOXy's external mapping document see: Extending JAXB - Representing Metadata as XML.
<?xml version="1.0"?>
<xml-bindings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="org.example">
<java-types>
<java-type name="Customer">
<xml-root-element/>
<xml-type prop-order="firstName lastName address phoneNumbers"/>
<java-attributes>
<xml-attribute java-attribute="id"/>
<xml-element java-attribute="firstName" name="first-name"/>
<xml-element java-attribute="lastName" name="last-name"/>
<xml-element java-attribute="phoneNumbers" name="phone-number"/>
</java-attributes>
</java-type>
<java-type name="Address">
<java-attributes>
<xml-attribute java-attribute="id"/>
</java-attributes>
</java-type>
<java-type name="PhoneNumber">
<java-attributes>
<xml-attribute java-attribute="id"/>
<xml-attribute java-attribute="type"/>
<xml-value java-attribute="num"/>
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
Further Reading
If you enjoyed this post then you may also be interested in:
- RESTful Services
- Creating a RESTful Service
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.