{"id":11302,"date":"2013-04-17T16:00:15","date_gmt":"2013-04-17T13:00:15","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=11302"},"modified":"2013-04-17T12:40:06","modified_gmt":"2013-04-17T09:40:06","slug":"moxys-object-graphs-dynamic-jaxb","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html","title":{"rendered":"MOXy&#8217;s Object Graphs &amp; Dynamic JAXB"},"content":{"rendered":"<p><a href=\"http:\/\/jcp.org\/en\/jsr\/detail?id=222\" target=\"_blank\">JAXB (JSR-222)<\/a> makes it easy for you to convert instances of your domain classes to\/from XML.\u00a0 The <a href=\"http:\/\/www.eclipse.org\/eclipselink\/moxy.php\" target=\"_blank\">EclipseLink MOXy<\/a> implementation offers an extension called Dynamic JAXB where instead of real classes you have instances of a map like class called <i>DynamicEntity<\/i>. You can access the data on your <i>DynamicEntity <\/i>using get and set methods that take the property name (i.e. <i>customer.get(&#8220;address&#8221;)<\/i> and <i>customer.set(&#8216;name&#8221;, &#8220;Jane Doe&#8221;)<\/i>. In this post, first we will bootstrap a dynamic <i>JAXBContext<\/i> based on an external mapping file.\u00a0 Then we unmarshal an XML document to dynamic entities, and finally we will apply an object graph to scope the resulting JSON output.<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\nYou can try this out today by downloading an EclipseLink 2.5.0 nightly download starting on March 24, 2013 from:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.eclipse.org\/eclipselink\/downloads\/nightly.php\">http:\/\/www.eclipse.org\/eclipselink\/downloads\/nightly.php<\/a><\/li>\n<\/ul>\n<h2>Dynamic Java Model<\/h2>\n<p>With a static model the metadata is derived from the Java classes and augmented by any provided metadata (see: <a href=\"http:\/\/blog.bdoughan.com\/2012\/07\/jaxb-no-annotations-required.html\">JAXB &#8211; No Annotations Required <\/a>). \u00a0 Since in MOXy&#8217;s dynamic JAXB there are no domain classes the types must be completely defined by metadata.\u00a0 This can be done from an XML schema or as done in this example using MOXy&#8217;s external mapping document.<\/p>\n<h4>oxm.xml<\/h4>\n<p>Since there are no real Java classes, in the external mapping document we need to specify each mapping, and for each mapping the type of the Java property.<\/p>\n<pre class=\"brush:xml; toolbar:false; highlight:[6,7,8,9,10,11,12,13,14,15,16,17,18,45,46,47,48,49]\">&lt;?xml version=\"1.0\"?&gt;\r\n&lt;xml-bindings xmlns=\"http:\/\/www.eclipse.org\/eclipselink\/xsds\/persistence\/oxm\"\r\n    package-name=\"blog.objectgraphs.dynamic\"&gt;\r\n    &lt;java-types&gt;\r\n        &lt;java-type name=\"Customer\"&gt;\r\n            &lt;xml-named-object-graphs&gt;\r\n                &lt;xml-named-object-graph name=\"contact info\"&gt;\r\n                    &lt;xml-named-attribute-node name=\"name\"\/&gt;\r\n                    &lt;xml-named-attribute-node name=\"billingAddress\" \r\n                        subgraph=\"location\"\/&gt;\r\n                    &lt;xml-named-attribute-node name=\"phoneNumbers\" \r\n                        subgraph=\"simple\"\/&gt;\r\n                    &lt;xml-named-subgraph name=\"location\"&gt;\r\n                        &lt;xml-named-attribute-node name=\"city\"\/&gt;\r\n                        &lt;xml-named-attribute-node name=\"province\"\/&gt;\r\n                    &lt;\/xml-named-subgraph&gt;\r\n                &lt;\/xml-named-object-graph&gt;\r\n            &lt;\/xml-named-object-graphs&gt;\r\n            &lt;xml-root-element\/&gt;\r\n            &lt;java-attributes&gt;\r\n                &lt;xml-attribute java-attribute=\"id\" type=\"java.lang.Integer\"\/&gt;\r\n                &lt;xml-element java-attribute=\"name\" type=\"java.lang.String\"\/&gt;\r\n                &lt;xml-element java-attribute=\"billingAddress\" \r\n                    type=\"blog.objectgraphs.dynamic.Address\"\/&gt;\r\n                &lt;xml-element java-attribute=\"shippingAddress\" \r\n                    type=\"blog.objectgraphs.dynamic.Address\"\/&gt;\r\n                &lt;xml-element \r\n                    java-attribute=\"phoneNumbers\" \r\n                    name=\"phoneNumber\" \r\n                    type=\"blog.objectgraphs.dynamic.PhoneNumber\" \r\n                    container-type=\"java.util.List\"&gt;\r\n                    &lt;xml-element-wrapper\/&gt;\r\n                &lt;\/xml-element&gt;\r\n            &lt;\/java-attributes&gt;\r\n        &lt;\/java-type&gt;\r\n        &lt;java-type name=\"Address\"&gt;\r\n            &lt;java-attributes&gt;\r\n                &lt;xml-element java-attribute=\"street\" type=\"java.lang.String\"\/&gt;\r\n                &lt;xml-element java-attribute=\"city\" type=\"java.lang.String\"\/&gt;\r\n                &lt;xml-element java-attribute=\"province\" type=\"java.lang.String\"\/&gt;\r\n                &lt;xml-element java-attribute=\"postalCode\" type=\"java.lang.String\"\/&gt;\r\n            &lt;\/java-attributes&gt;\r\n        &lt;\/java-type&gt;\r\n        &lt;java-type name=\"PhoneNumber\"&gt;\r\n            &lt;xml-named-object-graphs&gt;\r\n                &lt;xml-named-object-graph name=\"simple\"&gt;\r\n                    &lt;xml-named-attribute-node name=\"value\"\/&gt;\r\n                &lt;\/xml-named-object-graph&gt;\r\n            &lt;\/xml-named-object-graphs&gt;\r\n            &lt;java-attributes&gt;\r\n                &lt;xml-attribute java-attribute=\"type\" type=\"java.lang.String\"\/&gt;\r\n                &lt;xml-value java-attribute=\"value\" type=\"java.lang.String\"\/&gt;\r\n            &lt;\/java-attributes&gt;\r\n        &lt;\/java-type&gt;\r\n    &lt;\/java-types&gt;\r\n&lt;\/xml-bindings&gt;<\/pre>\n<h4>jaxb.properties<\/h4>\n<p>A <i>jaxb.properties<\/i> file is used to specify the JAXB provider.\u00a0 For dynamic JAXB the contents of this file are slightly different than usual when using MOXy (compare with <a href=\"http:\/\/blog.bdoughan.com\/2011\/05\/specifying-eclipselink-moxy-as-your.html\">Specifying EclipseLink MOXy as your JAXB Provider<\/a>).\u00a0 This file goes in the same package as the domain model, since here we have a virtual domain model the <i>jaxb.properties<\/i> file would be the only real item in the <i>blog.objectgraphs.dynamic<\/i> package.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\" brush:bash\">javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory<\/pre>\n<h2>Demo Code<\/h2>\n<p>Below we will explore two different approaches for using object graphs.<\/p>\n<h4>Demo &#8211; Object Graph Specified through Metadata <\/h4>\n<p>In the demo code below we will leverage the object graph that was defined in the external mapping document.\u00a0 The object graph was defined for the dynamic model exactly as it was for the corresponding static model (see: <a href=\"http:\/\/blog.bdoughan.com\/2013\/03\/moxys-object-graphs-inputoutput-partial.html\">MOXy&#8217;s Object Graphs &#8211; Input\/Ouput Partial Models to XML &amp; JSON<\/a>).\u00a0 The only thing that is different is that the object we get from the unmarshal call is an instance of <i>DynamicEntity<\/i> rather than <i>Customer<\/i>.<\/p>\n<pre class=\"brush:xml; toolbar:false; highlight:[29]\">package blog.objectgraphs.dynamic;\r\n\r\nimport java.io.File;\r\nimport java.util.*;\r\nimport javax.xml.bind.*;\r\nimport org.eclipse.persistence.dynamic.DynamicEntity;\r\nimport org.eclipse.persistence.jaxb.JAXBContextProperties;\r\nimport org.eclipse.persistence.jaxb.MarshallerProperties;\r\n\r\npublic class DemoMetadata {\r\n\r\n    public static void main(String[] args) throws Exception {\r\n        Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;(1);\r\n        properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, \r\n            \"blog\/objectgraphs\/dynamic\/oxm.xml\");\r\n        JAXBContext jc = JAXBContext.newInstance(\"blog.objectgraphs.dynamic\", \r\n            DemoMetadata.class.getClassLoader(), properties);\r\n\r\n        Unmarshaller unmarshaller = jc.createUnmarshaller();\r\n        File xml = new File(\"src\/blog\/objectgraphs\/dynamic\/input.xml\");\r\n        DynamicEntity customer = (DynamicEntity) unmarshaller.unmarshal(xml);\r\n\r\n        \/\/ Output XML\r\n        Marshaller marshaller = jc.createMarshaller();\r\n        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);\r\n        marshaller.marshal(customer, System.out);\r\n\r\n        \/\/ Output XML - Based on Object Graph\r\n        marshaller.setProperty(MarshallerProperties.OBJECT_GRAPH, \"contact info\");\r\n        marshaller.marshal(customer, System.out);\r\n\r\n        \/\/ Output JSON - Based on Object Graph\r\n        marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, \"application\/json\");\r\n        marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);\r\n        marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);\r\n        marshaller.marshal(customer, System.out);\r\n    }\r\n\r\n}<\/pre>\n<h4>Demo &#8211; Object Graph Created Programatically<\/h4>\n<p>In the demo code below we will create object graph programmatically.\u00a0 The object graph was created for the dynamic model exactly as it was for the corresponding static model (see: <a href=\"http:\/\/blog.bdoughan.com\/2013\/03\/moxys-object-graphs-partial-models-on.html\">MOXy&#8217;s Object Gaphs &#8211; Partial Models on the Fly to\/from XML &amp; JSON<\/a>).\u00a0 What is different is that we used the name of the dynamic entity to create the object graph instead of the class, and we get an instance of <i>DynamicEntity<\/i> rather than <i>Customer<\/i> from the unmarshal call.<\/p>\n<pre class=\"brush:xml; toolbar:false; highlight:[32,33,34,35,36,37,38,41]\">package blog.objectgraphs.dynamic;\r\n\r\nimport java.io.File;\r\nimport java.util.*;\r\nimport javax.xml.bind.*;\r\nimport org.eclipse.persistence.dynamic.DynamicEntity;\r\nimport org.eclipse.persistence.jaxb.JAXBContextProperties;\r\nimport org.eclipse.persistence.jaxb.JAXBHelper;\r\nimport org.eclipse.persistence.jaxb.MarshallerProperties;\r\nimport org.eclipse.persistence.jaxb.ObjectGraph;\r\nimport org.eclipse.persistence.jaxb.Subgraph;\r\n\r\npublic class DemoRuntime {\r\n\r\n    public static void main(String[] args) throws Exception {\r\n        Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;(1);\r\n        properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, \r\n            \"blog\/objectgraphs\/dynamic\/oxm.xml\");\r\n        JAXBContext jc = JAXBContext.newInstance(\"blog.objectgraphs.dynamic\", \r\n            DemoMetadata.class.getClassLoader(), properties);\r\n\r\n        Unmarshaller unmarshaller = jc.createUnmarshaller();\r\n        File xml = new File(\"src\/blog\/objectgraphs\/dynamic\/input.xml\");\r\n        DynamicEntity customer = (DynamicEntity) unmarshaller.unmarshal(xml);\r\n\r\n        \/\/ Output XML\r\n        Marshaller marshaller = jc.createMarshaller();\r\n        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);\r\n        marshaller.marshal(customer, System.out);\r\n\r\n        \/\/ Create the Object Graph\r\n        ObjectGraph contactInfo = JAXBHelper.getJAXBContext(jc)\r\n            .createObjectGraph(\"blog.objectgraphs.dynamic.Customer\");\r\n        contactInfo.addAttributeNodes(\"name\");\r\n        Subgraph location = contactInfo.addSubgraph(\"billingAddress\");\r\n        location.addAttributeNodes(\"city\", \"province\");\r\n        Subgraph simple = contactInfo.addSubgraph(\"phoneNumbers\");\r\n        simple.addAttributeNodes(\"value\");\r\n\r\n        \/\/ Output XML - Based on Object Graph\r\n        marshaller.setProperty(MarshallerProperties.OBJECT_GRAPH, contactInfo);\r\n        marshaller.marshal(customer, System.out);\r\n\r\n        \/\/ Output JSON - Based on Object Graph\r\n        marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, \"application\/json\");\r\n        marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);\r\n        marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);\r\n        marshaller.marshal(customer, System.out);\r\n    }\r\n\r\n}<\/pre>\n<h2>Input\/Output<\/h2>\n<p>The following input and output are the same for both the metadata driven and programmatic demos.<\/p>\n<h4>input.xml\/Output <\/h4>\n<p>We will use the following document to populate our domain model.\u00a0 We will also marshal it back out to demonstrate that all of the content is actually mapped.<\/p>\n<pre class=\" brush:xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;customer id=\"123\"&gt;\r\n   &lt;name&gt;Jane Doe&lt;\/name&gt;\r\n   &lt;billingAddress&gt;\r\n      &lt;street&gt;1 A Street&lt;\/street&gt;\r\n      &lt;city&gt;Any Town&lt;\/city&gt;\r\n      &lt;province&gt;Ontario&lt;\/province&gt;\r\n      &lt;postalCode&gt;A1B 2C3&lt;\/postalCode&gt;\r\n   &lt;\/billingAddress&gt;\r\n   &lt;shippingAddress&gt;\r\n      &lt;street&gt;2 B Road&lt;\/street&gt;\r\n      &lt;city&gt;Another Place&lt;\/city&gt;\r\n      &lt;province&gt;Quebec&lt;\/province&gt;\r\n      &lt;postalCode&gt;X7Y 8Z9&lt;\/postalCode&gt;\r\n   &lt;\/shippingAddress&gt;\r\n   &lt;phoneNumbers&gt;\r\n      &lt;phoneNumber type=\"work\"&gt;555-1111&lt;\/phoneNumber&gt;\r\n      &lt;phoneNumber type=\"home\"&gt;555-2222&lt;\/phoneNumber&gt;\r\n   &lt;\/phoneNumbers&gt;\r\n&lt;\/customer&gt;<\/pre>\n<h4>XML Output Based on Object Graph<\/h4>\n<p>The XML below was produced by the exact same model as the previous XML document.\u00a0 The difference is that we leveraged an object graph to select a subset of the mapped content.<\/p>\n<pre class=\" brush:xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;customer&gt;\r\n   &lt;name&gt;Jane Doe&lt;\/name&gt;\r\n   &lt;billingAddress&gt;\r\n      &lt;city&gt;Any Town&lt;\/city&gt;\r\n      &lt;province&gt;Ontario&lt;\/province&gt;\r\n   &lt;\/billingAddress&gt;\r\n   &lt;phoneNumbers&gt;\r\n      &lt;phoneNumber&gt;555-1111&lt;\/phoneNumber&gt;\r\n      &lt;phoneNumber&gt;555-2222&lt;\/phoneNumber&gt;\r\n   &lt;\/phoneNumbers&gt;\r\n&lt;\/customer&gt;<\/pre>\n<h4>JSON Output Based on Object Graph<\/h4>\n<p>Below is the same subset as the previous XML document represented as JSON.\u00a0 We have used the new <i>JSON_WRAPPER_AS_ARRAY_NAME <\/i>property (see <a href=\"http:\/\/blog.bdoughan.com\/2013\/03\/binding-to-json-xml-handling-collections.html\">Binding to JSON &amp; XML &#8211; Handling Collections <\/a>) to improve the representation of collection values.<\/p>\n<pre class=\" brush:java\">{\r\n   \"name\" : \"Jane Doe\",\r\n   \"billingAddress\" : {\r\n      \"city\" : \"Any Town\",\r\n      \"province\" : \"Ontario\"\r\n   },\r\n   \"phoneNumbers\" : [ \"555-1111\", \"555-2222\" ]\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<div style=\"border: 1px solid #D8D8D8; background: #FAFAFA; width: 100%; padding-left: 5px;\"><b><i>Reference: <\/i><\/b><a href=\"http:\/\/blog.bdoughan.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html\">MOXy&#8217;s Object Graphs &amp; Dynamic JAXB<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/jcg\">JCG partner<\/a> Blaise Doughan at the <a href=\"http:\/\/blog.bdoughan.com\/\">Java XML &amp; JSON Binding<\/a> blog.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>JAXB (JSR-222) makes it easy for you to convert instances of your domain classes to\/from XML.\u00a0 The EclipseLink MOXy implementation offers an extension called Dynamic JAXB where instead of real classes you have instances of a map like class called DynamicEntity. You can access the data on your DynamicEntity using get and set methods that &hellip;<\/p>\n","protected":false},"author":51,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[144,729,107],"class_list":["post-11302","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-jaxb","tag-moxy","tag-xml"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MOXy&#039;s Object Graphs &amp; Dynamic JAXB<\/title>\n<meta name=\"description\" content=\"JAXB (JSR-222) makes it easy for you to convert instances of your domain classes to\/from XML.\u00a0 The EclipseLink MOXy implementation offers an extension\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MOXy&#039;s Object Graphs &amp; Dynamic JAXB\" \/>\n<meta property=\"og:description\" content=\"JAXB (JSR-222) makes it easy for you to convert instances of your domain classes to\/from XML.\u00a0 The EclipseLink MOXy implementation offers an extension\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2013-04-17T13:00:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Blaise Doughan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/bdoughan\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Blaise Doughan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html\"},\"author\":{\"name\":\"Blaise Doughan\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/aa63986b9b274cb85d2c6ea9d73bfda8\"},\"headline\":\"MOXy&#8217;s Object Graphs &amp; Dynamic JAXB\",\"datePublished\":\"2013-04-17T13:00:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html\"},\"wordCount\":651,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"keywords\":[\"JAXB\",\"MOXy\",\"XML\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html\",\"name\":\"MOXy's Object Graphs &amp; Dynamic JAXB\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2013-04-17T13:00:15+00:00\",\"description\":\"JAXB (JSR-222) makes it easy for you to convert instances of your domain classes to\\\/from XML.\u00a0 The EclipseLink MOXy implementation offers an extension\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/04\\\/moxys-object-graphs-dynamic-jaxb.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"MOXy&#8217;s Object Graphs &amp; Dynamic JAXB\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/aa63986b9b274cb85d2c6ea9d73bfda8\",\"name\":\"Blaise Doughan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/375230a428542e375a6e404b30a2d5620afc3aadb16e21d1268227def78b3703?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/375230a428542e375a6e404b30a2d5620afc3aadb16e21d1268227def78b3703?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/375230a428542e375a6e404b30a2d5620afc3aadb16e21d1268227def78b3703?s=96&d=mm&r=g\",\"caption\":\"Blaise Doughan\"},\"description\":\"Team lead for the TopLink\\\/EclipseLink JAXB &amp; SDO implementations, and the Oracle representative on those specifications.\",\"sameAs\":[\"http:\\\/\\\/blog.bdoughan.com\\\/\",\"http:\\\/\\\/ca.linkedin.com\\\/in\\\/bdoughan\",\"https:\\\/\\\/x.com\\\/http:\\\/\\\/twitter.com\\\/bdoughan\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/blaise-doughan\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MOXy's Object Graphs &amp; Dynamic JAXB","description":"JAXB (JSR-222) makes it easy for you to convert instances of your domain classes to\/from XML.\u00a0 The EclipseLink MOXy implementation offers an extension","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html","og_locale":"en_US","og_type":"article","og_title":"MOXy's Object Graphs &amp; Dynamic JAXB","og_description":"JAXB (JSR-222) makes it easy for you to convert instances of your domain classes to\/from XML.\u00a0 The EclipseLink MOXy implementation offers an extension","og_url":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2013-04-17T13:00:15+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","type":"image\/jpeg"}],"author":"Blaise Doughan","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/bdoughan","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Blaise Doughan","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html"},"author":{"name":"Blaise Doughan","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/aa63986b9b274cb85d2c6ea9d73bfda8"},"headline":"MOXy&#8217;s Object Graphs &amp; Dynamic JAXB","datePublished":"2013-04-17T13:00:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html"},"wordCount":651,"commentCount":1,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","keywords":["JAXB","MOXy","XML"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html","url":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html","name":"MOXy's Object Graphs &amp; Dynamic JAXB","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2013-04-17T13:00:15+00:00","description":"JAXB (JSR-222) makes it easy for you to convert instances of your domain classes to\/from XML.\u00a0 The EclipseLink MOXy implementation offers an extension","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2013\/04\/moxys-object-graphs-dynamic-jaxb.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"MOXy&#8217;s Object Graphs &amp; Dynamic JAXB"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/aa63986b9b274cb85d2c6ea9d73bfda8","name":"Blaise Doughan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/375230a428542e375a6e404b30a2d5620afc3aadb16e21d1268227def78b3703?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/375230a428542e375a6e404b30a2d5620afc3aadb16e21d1268227def78b3703?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/375230a428542e375a6e404b30a2d5620afc3aadb16e21d1268227def78b3703?s=96&d=mm&r=g","caption":"Blaise Doughan"},"description":"Team lead for the TopLink\/EclipseLink JAXB &amp; SDO implementations, and the Oracle representative on those specifications.","sameAs":["http:\/\/blog.bdoughan.com\/","http:\/\/ca.linkedin.com\/in\/bdoughan","https:\/\/x.com\/http:\/\/twitter.com\/bdoughan"],"url":"https:\/\/www.javacodegeeks.com\/author\/blaise-doughan"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/11302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=11302"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/11302\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=11302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=11302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=11302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}