Class JAXBHelperContext
- java.lang.Object
-
- org.eclipse.persistence.sdo.helper.SDOHelperContext
-
- org.eclipse.persistence.sdo.helper.jaxb.JAXBHelperContext
-
- All Implemented Interfaces:
HelperContext
public class JAXBHelperContext extends SDOHelperContext
The JAXBHelperContext is a bridge between POJOs and SDO DataObjects. The bridge is based on their corresponding XML representations. For the POJOs the XML representation is specified using JAXB annotations or object-to-XML mappings.
The following steps are required to create the JAXBHelperContext. The XML schema used in step #3 is the same one that the POJOs are mapped to. This step has been separated so that SDO annotations could be added to the XML schema.
Step #1 - Create the JAXBContext
JAXBContext jaxbContext = JAXBContext.newInstance("com.example.customer");
Step #2 - Create the JAXBHelperContext
JAXBHelperContext jaxbHelperContext = new JAXBHelperContext(jaxbContext);
Step #3 - Create the SDO Metadata from an XML Schema
jaxbHelperContext.getXSDHelper().define(xmlSchema);
The JAXBHelperContext allows you to convert between POJOs and DataObjects using a wrap operation.
Customer customer = new Customer(); Address address new Address(); address.setStreet("123 Any Street"); customer.set(address); DataObject customerDO = jaxbHelperContext.wrap(customer); customerDO.getString("address/street"); // returns "123 Any Street"
The JAXBHelperContext allows you to convert between DataObjects and POJOs using an unwrap operation.
Type customerType = jaxbHelperContext.getType(Customer.class); DataObject customerDO = jaxbHelperContext.getDataFactory().create(customerType); customerDO.set("first-name", "Jane"); Customer customer = jaxbHelperContext.unwrap(customerDO); customer.getFirstName(); // returns "Jane"
Of course the POJOs may be JPA entities. Below is an example of wrapping the results of a JPA query.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("CustomerExample"); EntityManager em = emf.createEntityManager(); List<MyEntity> entities = em.createQuery("SELECT e FROM MyEntity e WHERE ...").getResultList(); List<DataObject> dataObjects = hc.wrap(entities);
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.eclipse.persistence.sdo.helper.SDOHelperContext
SDOHelperContext.HelperContextResolver
-
-
Field Summary
-
Fields inherited from class org.eclipse.persistence.sdo.helper.SDOHelperContext
copyHelper, dataFactory, dataHelper, equalityHelper, STRICT_TYPE_CHECKING_PROPERTY_NAME, typeHelper, xmlHelper, xsdHelper
-
-
Constructor Summary
Constructors Constructor Description JAXBHelperContext(jakarta.xml.bind.JAXBContext aJAXBContext)
Create a new instance of JAXBHelperContextJAXBHelperContext(jakarta.xml.bind.JAXBContext aJAXBContext, ClassLoader aClassLoader)
Create a new instance of JAXBHelperContext
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Class
getClass(Type type)
Return the wrapped class corresponding to the SDO type.jakarta.xml.bind.JAXBContext
getJAXBContext()
Return the JAXBContext.Type
getType(Class entityClass)
Return the SDO type corresponding to the wrapped class.protected void
initialize(ClassLoader aClassLoader)
Override the default helpers/factories, replacing them with JAXB aware ones where necessary.Object
unwrap(DataObject dataObject)
Return the POJO that is wrapped by the DataObject.List<Object>
unwrap(Collection<DataObject> dataObjects)
Perform the unwrap operation on each of the DataObjects in the collection, and return the results as a List.DataObject
wrap(Object entity)
Return a DataObject that wraps a POJO.List<DataObject>
wrap(Collection<Object> entities)
Perform the wrap operation on each of the POJOs in the collection, and return the results as a List.-
Methods inherited from class org.eclipse.persistence.sdo.helper.SDOHelperContext
addAlias, createResolvable, createResolvable, getCopyHelper, getDataFactory, getDataHelper, getEqualityHelper, getHelperContext, getHelperContext, getHelperContext, getHelperContextResolver, getIdentifier, getProperty, getTypeHelper, getWrapperTypes, getXMLHelper, getXSDHelper, hasHelperContext, isApplicationResolverSet, isStrictTypeCheckingEnabled, makeDefaultContext, putHelperContext, putHelperContext, putWrapperTypes, removeHelerContextResolver, removeHelperContext, removeHelperContext, reset, setApplicationResolver, setHelperContextResolver, setHelperContextResolver, setProperty, setStrictTypeCheckingEnabled
-
-
-
-
Constructor Detail
-
JAXBHelperContext
public JAXBHelperContext(jakarta.xml.bind.JAXBContext aJAXBContext)
Create a new instance of JAXBHelperContext- Parameters:
aJAXBContext
- - The JAXBContext representing the class to XML schema mapping.
-
JAXBHelperContext
public JAXBHelperContext(jakarta.xml.bind.JAXBContext aJAXBContext, ClassLoader aClassLoader)
Create a new instance of JAXBHelperContext- Parameters:
aJAXBContext
- - The JAXBContext representing the class to XML schema mapping.aClassLoader
- - The ClassLoader containing the generated SDO classes/interfaces (if any).
-
-
Method Detail
-
initialize
protected void initialize(ClassLoader aClassLoader)
Override the default helpers/factories, replacing them with JAXB aware ones where necessary.- Overrides:
initialize
in classSDOHelperContext
-
getJAXBContext
public jakarta.xml.bind.JAXBContext getJAXBContext()
Return the JAXBContext. The JAXBContext represents the Java class to XML schema information for the POJOs.
-
getType
public Type getType(Class entityClass)
Return the SDO type corresponding to the wrapped class.Type customerType = jaxbHelperContext.getType(Customer.class); DataObject customerDO = jaxbHelperContext.getDataFactory().create(customerType);
-
getClass
public Class getClass(Type type)
Return the wrapped class corresponding to the SDO type.Type customerType = jaxbHelperContext.getTypeHelper().getType("urn:customer", "customer"); Class customerClass = jaxbHelperContext.getClass(customerType);
-
wrap
public DataObject wrap(Object entity)
Return a DataObject that wraps a POJO. This call should be made on the root POJO.Customer customer = new Customer(); Address address new Address(); address.setStreet("123 Any Street"); customer.set(address); DataObject customerDO = jaxbHelperContext.wrap(customer); customerDO.getString("address/street"); // returns "123 Any Street"
Multiple calls to wrap for the same instance POJO return the same instance of DataObject, in other words the following is always true:jaxbHelperContext.wrap(customer123) == jaxbHelperContext.wrap(customer123) jaxbHelperContext.wrap(customer123) != jaxbHelperContext.wrap(customer456)
-
wrap
public List<DataObject> wrap(Collection<Object> entities)
Perform the wrap operation on each of the POJOs in the collection, and return the results as a List.
-
unwrap
public Object unwrap(DataObject dataObject)
Return the POJO that is wrapped by the DataObject.Type customerType = jaxbHelperContext.getType(Customer.class); DataObject customerDO = jaxbHelperContext.getDataFactory().create(customerType); DataObject addressDO = customerDO.create("address"); addressDO.set("street", "123 Any Street"); Customer customer = (Customer) jaxbHelperContext.unwrap(customerDO); customer.getAddress().getStreet(); // returns "123 Any Street"
Multiple calls to unwrap for the same DataObject must return the same instance of Object, in other words the following is always true:jaxbHelperContext.unwrap(customerDO123) == jaxbHelperContext.unwrap(customerDO123) jaxbHelperContext.unwrap(customerDO123) != jaxbHelperContext.unwrap(customerDO456) customer123 == jaxbHelperContext.unwrap(jaxbHelperContext.wrap(customer123))
-
unwrap
public List<Object> unwrap(Collection<DataObject> dataObjects)
Perform the unwrap operation on each of the DataObjects in the collection, and return the results as a List.
-
-