Skip to main content

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.

Jump to: navigation, search

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

Line 42: Line 42:
 
   
 
   
 
}
 
}
 +
</source>
 +
 +
 +
== XmlAccessorType and XmlTransient ==
 +
 +
If you are using an <tt>@XmlAccessorType</tt> other than <tt>AccessType.PROPERTY</tt>, you will need to mark your virtual properties Map attribute to be <tt>@XmlTransient</tt>, to prevent the Map itself from being bound to XML.
 +
 +
<source lang="java">
 +
@XmlRootElement
 +
@XmlVirtualAccessMethods
 +
@XmlAccessorType(AccessType.FIELD)
 +
public class Customer {
 +
 +
  @XmlTransient
 +
  private Map<String, Object> extensions;
 +
  ...
 
</source>
 
</source>

Revision as of 16:25, 20 June 2011

EclipseLink MOXy

Eclipselink-logo.gif
EclipseLink
Website
Download
Community
Mailing ListForumsIRCmattermost
Issues
OpenHelp WantedBug Day
Contribute
Browse Source

Virtual Access Methods

In addition to the standard JAXB access methods (public member, field, property, etc.), EclipseLink MOXy 2.3 introduces the concept of "virtual access methods", which instead rely on special get() and set() methods to maintain mapping data. For example, you might want to use a HashMap as the underlying data structure to hold all of your mapping data.


Example Model

For this example we will use the following Employee class. In addition to some conventional JAXB mappings, we also specify that this class contains virtual access methods by including the @XmlVirtualAccessMethods annotation.

@XmlRootElement
@XmlVirtualAccessMethods
@XmlAccessorType(AccessType.PROPERTY)
public class Customer {
 
   private int id;
 
   private String name;
 
   private Map<String, Object> extensions = new HashMap<String, Object>();
 
   public Object get(String name) {
      return extensions.get(name);
   }
 
   public void set(String name, Object value) {
      extensions.put(name, value);
   }
 
   @XmlAttribute
   public int getId() {
   ...
 
}


XmlAccessorType and XmlTransient

If you are using an @XmlAccessorType other than AccessType.PROPERTY, you will need to mark your virtual properties Map attribute to be @XmlTransient, to prevent the Map itself from being bound to XML.

@XmlRootElement
@XmlVirtualAccessMethods
@XmlAccessorType(AccessType.FIELD)
public class Customer {
 
   @XmlTransient
   private Map<String, Object> extensions;
   ...

Back to the top