Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/UserGuide/MOXy/Advanced Concepts/Refreshing Metadata"
m |
|||
Line 5: | Line 5: | ||
|apis= * [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/jaxb/JAXBHelper.html JAXBHelper] | |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)] | * [http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/jaxb/JAXBContext.html JAXBContext (EclipseLink)] | ||
+ | |examples=y | ||
+ | |example= * [[EclipseLink/Examples/MOXy/RefreshMetadata|Refresh Metadata Demo]] | ||
}} | }} | ||
Revision as of 11:42, 29 June 2011
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Key API
Examples
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:
<?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>
Our JAXBContext is created in the standard way:
... 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); ...
At this point, if we were to marshal a Root object to XML, it would look like this:
<root> <orig-name>RootName</orig-name> </root>
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 refreshMetadata() API:
... 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).refreshMetadata(); ...
After refreshing metadata, the same Root object will be marshalled as follows:
<root> <new-name>RootName</new-name> </root>