ObjectModelFactory.java |
/* * JBoss, the OpenSource J2EE webOS * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.xml.binding; import org.xml.sax.Attributes; /** * The interface all object model factories must implement. Object model factories are used on unmarshalling * to build the object graph. * <p>Each object model factory must implement one method <code>newRoot</code> defined in the ObjectModelFactory interface * and a set of newChild, addChild and setValue methods descovered by the framework at runtime with introspection. * So the following methods should be implemented: * <p/> * <ul> * <li><code>newRoot</code> method * <pre> * public Object newRoot(java.lang.Object root, * org.jboss.xml.binding.ContentNavigator navigator, * java.lang.String namespaceURI, * java.lang.String localName, * org.xml.sax.Attributes attrs) * </pre> * This method is called on the object model factory by the framework and returns the root of the object model. * If the <code>root</code> argument is null the factory is supposed to create and return a new one. * If the <code>root</code> argument is not null (i.e. the user provided the root object through the * org.jboss.xml.binding.Unmarshaller) the factory should either just return it as is or extract the real root * from the <code>root</code> argument corresponding to the namespace URI and local name. * </li> * <li> * a set of <code>newChild</code> methods. * This method is called by the framework on the object model factory when parsing of a new XML element started. * Each <code>newChild</code> method must have five arguments: * <ol> * <li>parent object of a concrete Java type (not java.lang.Object) for this new child</li> * <li>instance of org.jboss.xml.binding.ContentNavigator</li> * <li>namespace URI of the child XML element as java.lang.String</li> * <li>local name of the child XML element as java.lang.String</li> * <li>attributes of the child XML element as org.xml.sax.Attributes</li> * </ol> * Each <code>newChild()</code> method returns either a new instance of * a child object that represents the XML element with the namespace URI and local name * (in this case, the child XML element is accepted, i.e. should be represented in the object graph) * or <code>null</code> if this child XML element should be ignored, i.e. not be represented in the object graph. * </li> * <li>a set of <code>addChild</code> methods * This method is called on the object model factory by the framework when parsing of a child XML element is complete. * The arguments of the <code>addChild()</code> method are: * <ol> * <li>parent object of a conrete Java type (not java.lang.Object) of the child</li> * <li>child object of a concrete Java type (returned earlier by the <code>newChild</code>)</li> * <li>instance of org.jboss.xml.binding.ContentNavigator</li> * <li>namespace URI for the child XML element as java.lang.String</li> * <li>local name for the child XML element as java.lang.String</li> * </ol> * When <code>addChild</code> method is called, the child object is supposed to be populated with all the data from * the corresponding XML element. The child object now can be validated and added to the parent. * </li> * <li>a set of <code>setValue</code> methods * This method is called on the object model factory by the framework when a new XML element with text content was parsed. * The method must have four arguments: * <ol> * <li>an object of a concrete Java type (not java.lang.Object) which was returned earlier by a <code>newChild</code> * for which the value of an XML element was read</li> * <li>instance of org.jboss.xml.binding.ContentNavigator</li> * <li>namespace URI of the child XML element as java.lang.String</li> * <li>local name of the child XML element as java.lang.String</li> * <li>the value of the child XML element as java.lang.String</li> * </ol> * In <code>setValue</code> method the object model factory is supposed to set a value on the field which represents * the parsed XML element possibly converting the parsed XML element value to the field's Java type. * </li> * </ul> * * @author <a href="mailto:alex@jboss.org">Alexey Loubyansky</a> * @version <tt>$Revision: 1.9.2.1 $</tt> */ public interface ObjectModelFactory { /** * This method is called by the object model factory and returns the root of the object graph. * If the <code>root</code> argument is null the factory is supposed to create and return a new one. * If the <code>root</code> argument is not null (i.e. the user provided the root object through the * org.jboss.xml.binding.Unmarshaller) then the factory should either just return it as is * or extract the real root from the <code>root</code> argument based on the namespace URI and local name. * * @param root an object that is the root or which contains the root object * @param navigator content navigator * @param namespaceURI namespace URI of the root * @param localName local name of the root * @param attrs attributes of the root object * @return the root of the object graph */ Object newRoot(Object root, ContentNavigator navigator, String namespaceURI, String localName, Attributes attrs); }
ObjectModelFactory.java |