Class JAXBHelperContext
- All Implemented Interfaces:
HelperContext
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
ConstructorDescriptionJAXBHelperContext
(JAXBContext aJAXBContext) Create a new instance of JAXBHelperContextJAXBHelperContext
(JAXBContext aJAXBContext, ClassLoader aClassLoader) Create a new instance of JAXBHelperContext -
Method Summary
Modifier and TypeMethodDescriptionClass
<?> Return the wrapped class corresponding to the SDO type.Return the JAXBContext.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.unwrap
(DataObject dataObject) Return the POJO that is wrapped by the DataObject.unwrap
(Collection<DataObject> dataObjects) Perform the unwrap operation on each of the DataObjects in the collection, and return the results as a List.Return a DataObject that wraps a POJO.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 Details
-
JAXBHelperContext
Create a new instance of JAXBHelperContext- Parameters:
aJAXBContext
- - The JAXBContext representing the class to XML schema mapping.
-
JAXBHelperContext
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 Details
-
initialize
Override the default helpers/factories, replacing them with JAXB aware ones where necessary.- Overrides:
initialize
in classSDOHelperContext
- Parameters:
aClassLoader
-
-
getJAXBContext
Return the JAXBContext. The JAXBContext represents the Java class to XML schema information for the POJOs. -
getType
Return the SDO type corresponding to the wrapped class.Type customerType = jaxbHelperContext.getType(Customer.class); DataObject customerDO = jaxbHelperContext.getDataFactory().create(customerType);
-
getClass
Return the wrapped class corresponding to the SDO type.Type customerType = jaxbHelperContext.getTypeHelper().getType("urn:customer", "customer"); Class customerClass = jaxbHelperContext.getClass(customerType);
-
wrap
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
Perform the wrap operation on each of the POJOs in the collection, and return the results as a List. -
unwrap
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
Perform the unwrap operation on each of the DataObjects in the collection, and return the results as a List.
-