Module eclipselink

Class 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);
     
    • 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 class SDOHelperContext
      • 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.