blob: 010ab9039818959b03c3d4cf5b35af3e7437a5c7 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>Bootstrapping from EclipseLink Metadata (OXM) | EclipseLink 2.7 EclipseLink MOXy</title>
<meta name="generator" content="Oracle DARB XHTML Converter (Mode = document) - Version 1.0.22 Build 1" />
<meta name="date" content="2014-06-10T10:25:33Z" />
<meta name="robots" content="noarchive" />
<meta name="doctitle" content="Bootstrapping from EclipseLink Metadata (OXM)" />
<meta name="relnum" content="Release 2.7" />
<meta name="partnum" content="" />
<link rel="stylesheet" type="text/css" href="../../dcommon/style.css" media="screen" />
<link rel="copyright" href="../../dcommon/html/cpyr.htm" title="Copyright" type="text/html" />
<link rel="start" href="../../index.htm" title="Home" type="text/html" />
<link rel="contents" href="toc.htm" title="Contents" type="text/html" />
<link rel="prev" href="dynamic_jaxb003.htm" title="Previous" type="text/html" />
<link rel="next" href="json.htm" title="Next" type="text/html" />
<!-- START: Disqus --><script type="text/javascript"> var disqus_developer = 0; </script><!-- END: Disqus --><!-- START: Sharethis --><script type="text/javascript">var switchTo5x=true;</script><script type="text/javascript" src="http://w.sharethis.com/button/buttons.js"></script><script type="text/javascript" src="http://s.sharethis.com/loader.js"></script> <!-- END: Sharethis --></head>
<body bgcolor="#FFFFFF"><iframe id="docheader" frameborder="0" framemargin="0" scrolling="no" src="../../dcommon/header.html"></iframe><script src="http://www.google.com/jsapi" type="text/javascript"></script><script type="text/javascript"> google.load('search', '1', {language : 'en'}); google.setOnLoadCallback(function() { var customSearchOptions = {}; var googleAnalyticsOptions = {}; googleAnalyticsOptions['queryParameter'] = 'q'; googleAnalyticsOptions['categoryParameter'] = ''; customSearchOptions['googleAnalyticsOptions'] = googleAnalyticsOptions; var customSearchControl = new google.search.CustomSearchControl( '016171230611334810008:1hjujor5_fg', customSearchOptions); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); var options = new google.search.DrawOptions(); options.setSearchFormRoot('cse-search-form'); customSearchControl.draw('cse', options); }, true);</script><link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" /><div id="cse" style="width:100%;"></div>
<div class="header"><a id="top" name="top"></a>
<table class="simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td align="left" valign="top"><div class="booktitle">Developing JAXB Applications Using EclipseLink MOXy,
<b>Release 2.7</b><br /></font></td>
<td valign="bottom" align="right" width="144">
<table class="simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td>&nbsp;</td>
<td align="center" valign="top"><a href="toc.htm"><img src="../../dcommon/images/contents.png" alt="Go To Table Of Contents" border="0" height="16" width="16" /><br />
</td><td>&nbsp;</td><td align="center"><a href="../../" target="_top" class="external text" title="Search" rel="nofollow"><img src="../../dcommon/images/search.png" alt="Search" style="border:0;" /><br /><span class="mini"></span></a></td><td>&nbsp;</td><td align="center"><a href="../eclipselink_moxy.pdf" title="PDF" target="_blank"><img src="../../dcommon/images/pdf_icon.png" style="padding-right:5px;border:0" alt="PDF"></a></td>
</tr>
</table>
</td>
</tr>
</table>
<hr />
<table class="navigation simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100" align="center">
<tr>
<td align="center"><a href="dynamic_jaxb003.htm"><img src="../../dcommon/images/larrow.png" alt="Previous" border="0" height="16" width="16" /></a></td>
<td align="center"><a href="json.htm"><img src="../../dcommon/images/rarrow.png" alt="Next" border="0" height="16" width="16" /></a></td>
<td>&nbsp;</td>
</tr>
</table>
</div>
<!-- class="header" -->
<div class="ind"><!-- End Header --><a id="BGBGHCHJ" name="BGBGHCHJ"></a><a id="TLJAX460" name="TLJAX460"></a>
<div class="sect1"><!-- infolevel="all" infotype="General" -->
<h1 class="sect1"><font face="arial, helvetica, sans-serif" color="#330099">Bootstrapping from EclipseLink Metadata (OXM)</font></h1>
<p>If you would like to have more control over how your <code>DynamicEntities</code> will be mapped to XML, you can instead bootstrap from an EclipseLink OXM Metadata file. Using this approach, you can take advantage of EclipseLink's robust mappings framework and customize how each complex type in XML maps to its Java counterpart. The following API on <code>DynamicJAXBContextFactory</code> can be used to bootstrap from an OXM file:</p>
<div class="example"><a id="TLJAX461" name="TLJAX461"></a><a id="sthref202" name="sthref202"></a>
<p><strong><em><font face="arial, helvetica, sans-serif">Example 9-11 Creating a DynamicJAXBContext</font></em></strong></p>
<pre xml:space="preserve" class="oac_no_warn">
/**
* Create a &lt;tt&gt;DynamicJAXBContext&lt;/tt&gt;, using an EclipseLink OXM file as the metadata source.
*
* @param classLoader
* The application's current class loader, which will be used to first lookup classes to
* see if they exist before new &lt;tt&gt;DynamicTypes&lt;/tt&gt; are generated. Can be &lt;tt&gt;null&lt;/tt&gt;,
* in which case &lt;tt&gt;Thread.currentThread().getContextClassLoader()&lt;/tt&gt; will be used.
* @param properties
* Map of properties to use when creating a new &lt;tt&gt;DynamicJAXBContext&lt;/tt&gt;. This map must
* contain a key of JAXBContext.ECLIPSELINK_OXM_XML_KEY, with a value of... (see below)
*
* @return
* A new instance of &lt;tt&gt;DynamicJAXBContext&lt;/tt&gt;.
*
* @throws JAXBException
* if an error was encountered while creating the &lt;tt&gt;DynamicJAXBContext&lt;/tt&gt;.
*/
public static DynamicJAXBContext createContextFromOXM(ClassLoader classLoader, Map&lt;String, ?&gt; properties) throws JAXBException {
</pre></div>
<!-- class="example" -->
<p>Links to the actual OXM files are passed in via the <code>properties</code> parameter, using a special key, <code>JAXBContextProperties.OXM_METADATA_SOURCE</code>. The value of this key will be a handle to the OXM metadata file, in the form of one of the following:</p>
<ul>
<li>
<p><code>java.io.File</code></p>
</li>
<li>
<p><code>java.io.InputStream</code></p>
</li>
<li>
<p><code>java.io.Reader</code></p>
</li>
<li>
<p><code>java.net.URL</code></p>
</li>
<li>
<p><code>javax.xml.stream.XMLEventReader</code></p>
</li>
<li>
<p><code>javax.xml.stream.XMLStreamReader</code></p>
</li>
<li>
<p><code>javax.xml.transform.Source</code></p>
</li>
<li>
<p><code>org.w3c.dom.Node</code></p>
</li>
<li>
<p><code>org.xml.sax.InputSource</code></p>
</li>
</ul>
<p><code>Lists</code> of the above inputs are acceptable as well, to bootstrap from multiple OXM files. For more information, see the documentation on the <code>DynamicJAXBContextFactory</code> class.</p>
<p>In the following example, we will obtain our OXM file as a resource from our <code>ClassLoader</code>, and use the resulting <code>InputStream</code> to bootstrap a <code>DynamicJAXBContext</code>:</p>
<pre xml:space="preserve" class="oac_no_warn">
InputStream iStream = myClassLoader.getResourceAsStream("example/resources/eclipselink/eclipselink-oxm.xml");
Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;();
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, iStream);
DynamicJAXBContext jaxbContext = DynamicJAXBContextFactory.createContextFromOXM(myClassLoader, properties);
</pre>
<a id="TLJAX462" name="TLJAX462"></a>
<div class="sect2"><a id="sthref203" name="sthref203"></a>
<h2 class="sect2"><font face="arial, helvetica, sans-serif" color="#330099">Example</font></h2>
<p>Using the sample OXM in <a href="#BABCECHB">Example 9-12</a>, we will show an example of how to create and marshall a new object using Dynamic MOXy. It is important to note the <code>type</code> attributes. Because there is no underlying Java class, the types of each property must be explicitly specified.</p>
<div class="example"><a id="BABCECHB" name="BABCECHB"></a><a id="TLJAX463" name="TLJAX463"></a>
<p><strong><em><font face="arial, helvetica, sans-serif">Example 9-12 Sample XML Schema</font></em></strong></p>
<pre xml:space="preserve" class="oac_no_warn">
&lt;?xml version="1.0" encoding="US-ASCII"?&gt;
&lt;xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" package-name="example"&gt;
&lt;java-types&gt;
&lt;java-type name="Customer"&gt;
&lt;xml-root-element name="customer"/&gt;
&lt;java-attributes&gt;
&lt;xml-element java-attribute="firstName" type="java.lang.String"/&gt;
&lt;xml-element java-attribute="lastName" type="java.lang.String"/&gt;
&lt;xml-element java-attribute="address" type="example.Address"/&gt;
&lt;/java-attributes&gt;
&lt;/java-type&gt;
&lt;java-type name="Address"&gt;
&lt;java-attributes&gt;
&lt;xml-element java-attribute="street" type="java.lang.String"/&gt;
&lt;xml-element java-attribute="city" type="java.lang.String"/&gt;
&lt;xml-element java-attribute="province" type="java.lang.String"/&gt;
&lt;xml-element java-attribute="postalCode" type="java.lang.String"/&gt;
&lt;/java-attributes&gt;
&lt;/java-type&gt;
&lt;/java-types&gt;
&lt;/xml-bindings&gt;
</pre></div>
<!-- class="example" -->
<p>The code in <a href="#BGBHBFEG">Example 9-13</a> demonstrates:</p>
<ul>
<li>
<p>Passing the OXM file to <code>DynamicJAXBContextFactory</code> to create a <code>DynamicJAXBContext</code></p>
</li>
<li>
<p>Creating new <code>DynamicEntities</code> and setting their properties</p>
</li>
<li>
<p>Creating a <code>JAXBMarshaller</code> and marshalling the Java objects to XML</p>
</li>
</ul>
<div class="example"><a id="BGBHBFEG" name="BGBHBFEG"></a><a id="TLJAX464" name="TLJAX464"></a>
<p><strong><em><font face="arial, helvetica, sans-serif">Example 9-13 Sample Application Code</font></em></strong></p>
<pre xml:space="preserve" class="oac_no_warn">
InputStream iStream = myClassLoader.getResourceAsStream("example/resources/eclipselink/eclipselink-oxm.xml");
Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;();
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, iStream);
DynamicJAXBContext jaxbContext = DynamicJAXBContextFactory.createContextFromOXM(myClassLoader, properties);
DynamicEntity newCustomer = dContext.newDynamicEntity("example.Customer");
newCustomer.set("firstName", "George");
newCustomer.set("lastName", "Jones");
DynamicEntity newAddress = dContext.newDynamicEntity("example.Address");
newAddress.set("street", "227 Main St.");
newAddress.set("city", "Toronto");
newAddress.set("province", "Ontario");
newAddress.set("postalCode", "M5V1E6");
newCustomer.set("address", newAddress);
dContext.createMarshaller().marshal(newCustomer, System.out
</pre></div>
<!-- class="example" --></div>
<!-- class="sect2" --></div>
<!-- class="sect1" --></div>
<!-- class="ind" -->
<!-- Start Footer -->
<div class="footer">
<hr />
<table class="simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100%">
<col width="33%" />
<col width="*" />
<col width="33%" />
<tr>
<td valign="bottom">
<table class="navigation simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100" align="center">
<col width="*" />
<col width="48%" />
<col width="48%" />
<tr>
<td>&nbsp;</td>
<td align="center"><a href="dynamic_jaxb003.htm"><img src="../../dcommon/images/larrow.png" alt="Previous" border="0" height="16" width="16" /></a></td>
<td align="center"><a href="json.htm"><img src="../../dcommon/images/rarrow.png" alt="Next" border="0" height="16" width="16" /></a></td>
</tr>
</table>
</td>
<td align="center" width="34%"><a href="http://www.eclipse.org/eclipselink/" title="EclipseLink home"><img src="../../dcommon/images/ellogo.png" alt="EclipseLink" width="150" border="0" /></a><br />
<td valign="bottom" align="right">
<table class="simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="225">
<tr>
<td>&nbsp;</td>
<td align="center" valign="top"><a href="toc.htm"><img src="../../dcommon/images/contents.png" alt="Go To Table Of Contents" border="0" height="16" width="16" /><br />
</td><td>&nbsp;</td><td align="center"><a href="../../" target="_top" class="external text" title="Search" rel="nofollow"><img src="../../dcommon/images/search.png" alt="Search" style="border:0;" /><br /><span class="mini"></span></a></td><td>&nbsp;</td><td align="center"><a href="../eclipselink_moxy.pdf" title="PDF" target="_blank"><img src="../../dcommon/images/pdf_icon.png" style="padding-right:5px;border:0" alt="PDF"></a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<!-- class="footer" -->
<div id="copyright">Copyright &copy; 2013 by The Eclipse Foundation under the <a href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License (EPL)</a><br /> <script type="text/javascript">var LastUpdated = document.lastModified;document.writeln ("Updated: " + LastUpdated);</script> </div><!-- START: Analytics --><script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-1608008-2']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script><!-- END: Analytics --><!-- START: Sharethis --><script>var options={ "publisher": "e2fe9e07-fab6-4f84-83ea-0991b429842c", "position": "right", "ad": { "visible": false, "openDelay": 5, "closeDelay": 0}};var st_hover_widget = new sharethis.widgets.hoverbuttons(options);</script><!-- END: Sharethis --></body>
</html>