Difference between revisions of "User:Rick.barkhouse.oracle.com"

From Eclipsepedia

Jump to: navigation, search
 
(One intermediate revision by one user not shown)
Line 18: Line 18:
 
[[Category:Users|Rick Barkhouse]]
 
[[Category:Users|Rick Barkhouse]]
 
[[Category:Committers|Rick Barkhouse]]
 
[[Category:Committers|Rick Barkhouse]]
 
 
----
 
 
 
{{EclipseLink_UserGuide
 
|info=y
 
|toc=y
 
|api=y
 
|apis= * [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/jaxb/JAXBHelper.html JAXBHelper]
 
* [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/jaxb/JAXBContext.html JAXBContext (EclipseLink)]
 
}}
 
 
= Refreshing Metadata =
 
 
EclipseLink MOXy 2.3 introduces the ability to refresh your '''JAXBContext's''' metadata at runtime.  This allows you to make changes to existing mappings in a live application environment and see those changes immediately without having to create a new '''JAXBContext'''.
 
 
In order to use the Metadata Refresh feature, your metadata information must be provided in one of the following formats:
 
 
* '''javax.xml.transform.Source'''
 
* '''org.w3c.dom.Node'''
 
* '''org.eclipse.persistence.jaxb.metadata.MetadataSource'''
 
 
 
== Example ==
 
 
Our example will be bootstrapped from the following EclipseLink OXM file:
 
 
<source lang="xml">
 
<?xml version="1.0"?>
 
<xml-bindings
 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
 
    package-name="example">
 
    <java-types>
 
        <java-type name="Root">
 
            <java-attributes>
 
                <xml-element java-attribute="name" name="orig-name"/>
 
            </java-attributes>
 
        </java-type>
 
    </java-types>
 
</xml-bindings>
 
</source>
 
 
Our '''JAXBContext''' is created in the standard way:
 
 
<source lang="java">
 
...
 
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
 
 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 
dbf.setNamespaceAware(true);
 
DocumentBuilder db = dbf.newDocumentBuilder();
 
InputStream metadataStream = classLoader.getResourceAsStream("example/eclipselink-oxm.xml";
 
Document metadataDocument = db.parse(metadataStream);
 
metadataStream.close();
 
 
Map<String, Object> props = new HashMap<String, Object>(1);
 
props.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY, metadataDocument);
 
JAXBContext context = JAXBContextFactory.createContext(new Class[] { Root.class }, props);
 
...
 
</source>
 
 
At this point, if we were to marshal a '''Root''' object to XML, it would look like this:
 
 
<source lang="xml">
 
<root>
 
    <orig-name>RootName</orig-name>
 
</root>
 
</source>
 
 
For this example, we will modify the metadata '''Document''' directly to change the XML name for the '''name''' field.  We can then refresh the metadata using the '''refeshMetadata()''' API:
 
 
<source lang="java">
 
...
 
Element xmlElementElement = (Element) metadataDocument.getElementsByTagNameNS("http://www.eclipse.org/eclipselink/xsds/persistence/oxm", "xml-element").item(0);
 
xmlElementElement.setAttribute("name", "new-name");
 
JAXBHelper.getJAXBContext(jc).refeshMetadata();
 
...
 
</source>
 
 
After refreshing metadata, the same '''Root''' object will be marshalled as follows:
 
 
<source lang="xml">
 
<root>
 
    <new-name>RootName</new-name>
 
</root>
 
</source>
 

Latest revision as of 16:05, 20 June 2011

bugzilla id: rick.barkhouse (at) oracle.com

committer id: rbarkhous

Location: Ottawa, Canada - Eastern Standard Time

  • Committer on Eclipse Persistence Services project - EclipseLink

Profession: Software Engineer

Currently working for Oracle Corporation on their TopLink product.

Also working with Eclipse Foundation on their EclipseLink product.