|
Oracle Fusion Middleware Java API Reference for Oracle TopLink 11g Release 1 (11.1.1) E28847-01 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object
org.eclipse.persistence.mappings.DatabaseMapping
org.eclipse.persistence.oxm.mappings.XMLAbstractAnyMapping
org.eclipse.persistence.oxm.mappings.XMLAnyCollectionMapping
public class XMLAnyCollectionMapping
Any collection XML mappings map an attribute that contains a heterogenous collection of objects to multiple XML elements. Unlike composite collection XML mappings, the referenced objects may be of different types (including String), and do not need to be related to each other through inheritance or a common interface. The corresponding object attribute should be generic enough for all possible application values. Note that each of the referenced objects (except String) must specify a default root element on their descriptor.
Any collection mappings are useful with the following XML schema constructs:
Setting the XPath: TopLink XML mappings make use of XPath statements to find the relevant data in an XML document. The XPath statement is relative to the context node specified in the descriptor. The XPath may contain node type, path, and positional information. The XPath is specified on the mapping using the setXPath
method. Note that for XML Any Collection Mappings the XPath is optional.
The following XPath statements may be used to specify the location of XML data relating to an object's name attribute:
XPath | Description |
---|---|
contact-methods | The name information is stored in the contact-methods element. |
contact-methods/info | The XPath statement may be used to specify any valid path. |
contact-methods[2] | The XPath statement may contain positional information. In this case the contact information is stored in the second occurrence of the contact-methods element. |
Mapping an element of type xs:anyType as an Any Collection Mapping:
XML Schema
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element />
<xsd:complexType >
<xsd:sequence>
<xsd:element />
</xsd:sequence>
</xsd:complexType>
<xsd:element >
<xsd:complexType>
<xsd:sequence>
<xsd:element />
<xsd:element />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element />
</xsd:schema>
Code Sample
XMLAnyCollectionMapping contactMethodsMapping = new XMLAnyCollectionMapping();
contactMethodsMapping.setAttributeName("contactMethods");
contactMethodsMapping.setXPath("contact-methods");
More Information: For more information about using the XML Any Collection Mapping, see the "Understanding XML Mappings" chapter of the Oracle TopLink Developer's Guide.
Nested Class Summary |
---|
Nested classes/interfaces inherited from class org.eclipse.persistence.mappings.DatabaseMapping |
---|
DatabaseMapping.WriteType |
Field Summary | |
---|---|
private boolean |
areOtherMappingInThisContext |
private org.eclipse.persistence.internal.queries.ContainerPolicy |
containerPolicy |
private XMLField |
field |
private boolean |
isWhitespacePreservedForMixedContent |
private boolean |
mixedContent |
private boolean |
reuseContainer |
private boolean |
useXMLRoot |
private XMLConverter |
valueConverter |
Fields inherited from class org.eclipse.persistence.mappings.DatabaseMapping |
---|
attributeAccessor, attributeName, derivedIdMapping, derivesId, descriptor, fields, isCacheable, isJPAId, isLazy, isMapKeyMapping, isOptional, isPrimaryKeyMapping, isReadOnly, isRemotelyInitialized, mapsIdValue, NO_FIELDS, NO_WEIGHT, properties, weight, WEIGHT_AGGREGATE, WEIGHT_DIRECT, WEIGHT_TO_ONE, WEIGHT_TRANSFORM |
Constructor Summary | |
---|---|
XMLAnyCollectionMapping() |
Method Summary | |
---|---|
void |
buildBackupClone(java.lang.Object clone, java.lang.Object backup, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork) INTERNAL: Clone the attribute from the clone and assign it to the backup. |
void |
buildClone(java.lang.Object original, org.eclipse.persistence.internal.identitymaps.CacheKey cacheKey, java.lang.Object clone, org.eclipse.persistence.internal.sessions.AbstractSession cloningSession) INTERNAL: Clone the attribute from the original and assign it to the clone. |
void |
buildCloneFromRow(org.eclipse.persistence.internal.sessions.AbstractRecord databaseRow, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, java.lang.Object clone, org.eclipse.persistence.internal.identitymaps.CacheKey sharedCacheKey, ObjectBuildingQuery sourceQuery, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, org.eclipse.persistence.internal.sessions.AbstractSession executionSession) INTERNAL: A combination of readFromRowIntoObject and buildClone. |
protected org.eclipse.persistence.internal.sessions.AbstractRecord |
buildCompositeRow(java.lang.Object attributeValue, org.eclipse.persistence.internal.sessions.AbstractSession session, XMLDescriptor referenceDescriptor, org.eclipse.persistence.internal.sessions.AbstractRecord parentRow, org.eclipse.persistence.internal.helper.DatabaseField field, java.lang.Object originalObject, boolean wasXMLRoot) |
private java.lang.Object |
buildObjectValuesFromDOMRecord(DOMRecord record, org.eclipse.persistence.internal.sessions.AbstractSession session, ObjectBuildingQuery query, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager) |
void |
cascadePerformRemoveIfRequired(java.lang.Object object, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, java.util.Map visitedObjects) INTERNAL: Cascade perform delete through mappings that require the cascade |
void |
cascadeRegisterNewIfRequired(java.lang.Object object, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, java.util.Map visitedObjects) INTERNAL: Cascade registerNew for Create through mappings that require the cascade |
java.lang.Object |
clone() INTERNAL: Clones itself. |
org.eclipse.persistence.internal.sessions.ChangeRecord |
compareForChange(java.lang.Object clone, java.lang.Object backup, org.eclipse.persistence.internal.sessions.ObjectChangeSet owner, org.eclipse.persistence.internal.sessions.AbstractSession session) INTERNAL: This method was created in VisualAge. |
boolean |
compareObjects(java.lang.Object firstObject, java.lang.Object secondObject, org.eclipse.persistence.internal.sessions.AbstractSession session) INTERNAL: Compare the attributes belonging to this mapping for the objects. |
void |
fixObjectReferences(java.lang.Object object, java.util.Map objectDescriptors, java.util.Map processedObjects, ObjectLevelReadQuery query, RemoteSession session) INTERNAL: An object has been serialized from the server to the client. |
org.eclipse.persistence.internal.queries.ContainerPolicy |
getContainerPolicy() INTERNAL: Return the mapping's containerPolicy. |
XMLConverter |
getConverter() |
org.eclipse.persistence.internal.helper.DatabaseField |
getField() INTERNAL: Return the field associated with this mapping if there is exactly one. |
java.util.Vector |
getFields() INTERNAL: Returns a vector of all the fields this mapping represents. |
private org.eclipse.persistence.internal.oxm.XPathFragment |
getFragmentToCompare(XMLField field, XMLField context) |
boolean |
getReuseContainer() Return true if the original container on the object should be used if present. |
private java.util.ArrayList |
getUnmappedChildNodes(org.w3c.dom.NodeList nodes) |
void |
initialize(org.eclipse.persistence.internal.sessions.AbstractSession session) INTERNAL: Allow for initialization of properties and validation. |
boolean |
isCollectionMapping() INTERNAL: Related mapping should implement this method to return true. |
boolean |
isMixedContent() |
private boolean |
isUnmappedContent(org.w3c.dom.Node node) |
boolean |
isWhitespacePreservedForMixedContent() Setting this to true indicates that text nodes containing *only* whitespaces should still be added to the collection as strings for mixed content. |
boolean |
isXMLMapping() INTERNAL: All relational mappings should implement this method to return true. |
void |
iterate(org.eclipse.persistence.internal.descriptors.DescriptorIterator iterator) INTERNAL: Iterate on the appropriate attribute value. |
void |
mergeChangesIntoObject(java.lang.Object target, org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord, java.lang.Object source, org.eclipse.persistence.internal.sessions.MergeManager mergeManager, org.eclipse.persistence.internal.sessions.AbstractSession targetSession) INTERNAL: Merge changes from the source to the target object. |
void |
mergeIntoObject(java.lang.Object target, boolean isTargetUninitialized, java.lang.Object source, org.eclipse.persistence.internal.sessions.MergeManager mergeManager, org.eclipse.persistence.internal.sessions.AbstractSession targetSession) INTERNAL: Merge changes from the source to the target object. |
void |
setContainerPolicy(org.eclipse.persistence.internal.queries.ContainerPolicy cp) PUBLIC: Set the mapping's container policy. |
void |
setConverter(XMLConverter conv) |
void |
setField(org.eclipse.persistence.internal.helper.DatabaseField field) |
void |
setMixedContent(boolean mixed) |
void |
setPreserveWhitespaceForMixedContent(boolean preserveWhitespace) |
void |
setReuseContainer(boolean reuseContainer) Specify whether the original container on the object should be used if present. |
void |
setUseXMLRoot(boolean useXMLRoot) |
void |
setXPath(java.lang.String xpath) |
void |
useCollectionClass(java.lang.Class concreteContainerClass) PUBLIC: Configure the mapping to use an instance of the specified container class to hold the target objects. |
void |
useMapClass(java.lang.Class concreteContainerClass, java.lang.String methodName) PUBLIC: Configure the mapping to use an instance of the specified container class to hold the target objects. |
boolean |
usesXMLRoot() |
java.lang.Object |
valueFromRow(org.eclipse.persistence.internal.sessions.AbstractRecord row, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, ObjectBuildingQuery sourceQuery, org.eclipse.persistence.internal.identitymaps.CacheKey cacheKey, org.eclipse.persistence.internal.sessions.AbstractSession executionSession, boolean isTargetProtected, java.lang.Boolean[] wasCacheUsed) INTERNAL: A subclass should implement this method if it wants different behavior. |
void |
writeFromObjectIntoRow(java.lang.Object object, org.eclipse.persistence.internal.sessions.AbstractRecord row, org.eclipse.persistence.internal.sessions.AbstractSession session, DatabaseMapping.WriteType writeType) INTERNAL: A subclass should implement this method if it wants different behavior. |
private void |
writeSimpleValue(XMLField xmlRootField, java.lang.Object element, java.lang.Object originalObject, DOMRecord record, org.w3c.dom.Document doc, org.w3c.dom.Node root, boolean wasXMLRoot, org.eclipse.persistence.internal.sessions.AbstractSession session) |
void |
writeSingleValue(java.lang.Object element, java.lang.Object parent, XMLRecord row, org.eclipse.persistence.internal.sessions.AbstractSession session) INTERNAL: A method that marshals a single value to the provided Record based on this mapping's XPath. |
Methods inherited from class org.eclipse.persistence.oxm.mappings.XMLAbstractAnyMapping |
---|
buildObjectAndWrapInXMLRoot, buildObjectForNonXMLRoot, buildObjectNoReferenceDescriptor, buildXMLRoot, buildXMLRootForText, getDescriptor, getKeepAsElementPolicy, isWriteOnly, preInitialize, setAttributeValueInObject, setIsWriteOnly, setKeepAsElementPolicy |
Methods inherited from class java.lang.Object |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Methods inherited from interface org.eclipse.persistence.oxm.mappings.XMLMapping |
---|
isWriteOnly, setIsWriteOnly |
Field Detail |
---|
private XMLField field
private org.eclipse.persistence.internal.queries.ContainerPolicy containerPolicy
private boolean useXMLRoot
private boolean mixedContent
private boolean isWhitespacePreservedForMixedContent
private boolean areOtherMappingInThisContext
private XMLConverter valueConverter
private boolean reuseContainer
Constructor Detail |
---|
public XMLAnyCollectionMapping()
Method Detail |
---|
public void buildBackupClone(java.lang.Object clone, java.lang.Object backup, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork)
buildBackupClone
in class DatabaseMapping
public void buildClone(java.lang.Object original, org.eclipse.persistence.internal.identitymaps.CacheKey cacheKey, java.lang.Object clone, org.eclipse.persistence.internal.sessions.AbstractSession cloningSession)
buildClone
in class DatabaseMapping
public void buildCloneFromRow(org.eclipse.persistence.internal.sessions.AbstractRecord databaseRow, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, java.lang.Object clone, org.eclipse.persistence.internal.identitymaps.CacheKey sharedCacheKey, ObjectBuildingQuery sourceQuery, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, org.eclipse.persistence.internal.sessions.AbstractSession executionSession)
DatabaseMapping
buildClone assumes the attribute value exists on the original and can simply be copied.
readFromRowIntoObject assumes that one is building an original.
Both of the above assumptions are false in this method, and actually attempts to do both at the same time.
Extract value from the row and set the attribute to this value in the working copy clone. In order to bypass the shared cache when in transaction a UnitOfWork must be able to populate working copies directly from the row.
buildCloneFromRow
in class DatabaseMapping
public void cascadePerformRemoveIfRequired(java.lang.Object object, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, java.util.Map visitedObjects)
cascadePerformRemoveIfRequired
in class DatabaseMapping
public void cascadeRegisterNewIfRequired(java.lang.Object object, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, java.util.Map visitedObjects)
cascadeRegisterNewIfRequired
in class DatabaseMapping
public java.lang.Object clone()
DatabaseMapping
clone
in class DatabaseMapping
public org.eclipse.persistence.internal.sessions.ChangeRecord compareForChange(java.lang.Object clone, java.lang.Object backup, org.eclipse.persistence.internal.sessions.ObjectChangeSet owner, org.eclipse.persistence.internal.sessions.AbstractSession session)
compareForChange
in class DatabaseMapping
public boolean compareObjects(java.lang.Object firstObject, java.lang.Object secondObject, org.eclipse.persistence.internal.sessions.AbstractSession session)
compareObjects
in class DatabaseMapping
public void fixObjectReferences(java.lang.Object object, java.util.Map objectDescriptors, java.util.Map processedObjects, ObjectLevelReadQuery query, RemoteSession session)
fixObjectReferences
in class DatabaseMapping
public org.eclipse.persistence.internal.queries.ContainerPolicy getContainerPolicy()
getContainerPolicy
in interface ContainerMapping
getContainerPolicy
in class DatabaseMapping
public org.eclipse.persistence.internal.helper.DatabaseField getField()
DatabaseMapping
getField
in class DatabaseMapping
public void initialize(org.eclipse.persistence.internal.sessions.AbstractSession session) throws DescriptorException
DatabaseMapping
initialize
in class DatabaseMapping
DescriptorException
public void iterate(org.eclipse.persistence.internal.descriptors.DescriptorIterator iterator)
iterate
in class DatabaseMapping
public void setXPath(java.lang.String xpath)
public void mergeChangesIntoObject(java.lang.Object target, org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord, java.lang.Object source, org.eclipse.persistence.internal.sessions.MergeManager mergeManager, org.eclipse.persistence.internal.sessions.AbstractSession targetSession)
mergeChangesIntoObject
in class DatabaseMapping
public void mergeIntoObject(java.lang.Object target, boolean isTargetUninitialized, java.lang.Object source, org.eclipse.persistence.internal.sessions.MergeManager mergeManager, org.eclipse.persistence.internal.sessions.AbstractSession targetSession)
mergeIntoObject
in class DatabaseMapping
public void setContainerPolicy(org.eclipse.persistence.internal.queries.ContainerPolicy cp)
ContainerMapping
setContainerPolicy
in interface ContainerMapping
public void setField(org.eclipse.persistence.internal.helper.DatabaseField field)
public java.lang.Object valueFromRow(org.eclipse.persistence.internal.sessions.AbstractRecord row, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, ObjectBuildingQuery sourceQuery, org.eclipse.persistence.internal.identitymaps.CacheKey cacheKey, org.eclipse.persistence.internal.sessions.AbstractSession executionSession, boolean isTargetProtected, java.lang.Boolean[] wasCacheUsed) throws DatabaseException
DatabaseMapping
valueFromRow
in class DatabaseMapping
DatabaseException
private java.lang.Object buildObjectValuesFromDOMRecord(DOMRecord record, org.eclipse.persistence.internal.sessions.AbstractSession session, ObjectBuildingQuery query, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager)
public void writeFromObjectIntoRow(java.lang.Object object, org.eclipse.persistence.internal.sessions.AbstractRecord row, org.eclipse.persistence.internal.sessions.AbstractSession session, DatabaseMapping.WriteType writeType) throws DescriptorException
DatabaseMapping
writeFromObjectIntoRow
in class DatabaseMapping
DescriptorException
public void writeSingleValue(java.lang.Object element, java.lang.Object parent, XMLRecord row, org.eclipse.persistence.internal.sessions.AbstractSession session)
XMLMapping
writeSingleValue
in interface XMLMapping
element
- - The value to be marshalledrow
- - The Record the value is being marshalled too.private void writeSimpleValue(XMLField xmlRootField, java.lang.Object element, java.lang.Object originalObject, DOMRecord record, org.w3c.dom.Document doc, org.w3c.dom.Node root, boolean wasXMLRoot, org.eclipse.persistence.internal.sessions.AbstractSession session)
protected org.eclipse.persistence.internal.sessions.AbstractRecord buildCompositeRow(java.lang.Object attributeValue, org.eclipse.persistence.internal.sessions.AbstractSession session, XMLDescriptor referenceDescriptor, org.eclipse.persistence.internal.sessions.AbstractRecord parentRow, org.eclipse.persistence.internal.helper.DatabaseField field, java.lang.Object originalObject, boolean wasXMLRoot)
public boolean isXMLMapping()
DatabaseMapping
isXMLMapping
in class DatabaseMapping
public java.util.Vector getFields()
DatabaseMapping
getFields
in class DatabaseMapping
public void useCollectionClass(java.lang.Class concreteContainerClass)
jdk1.2.x: The container class must implement (directly or indirectly) the Collection interface.
jdk1.1.x: The container class must be a subclass of Vector.
useCollectionClass
in interface ContainerMapping
public void useMapClass(java.lang.Class concreteContainerClass, java.lang.String methodName)
ContainerMapping
Map
is the value returned by a call to the specified zero-argument method. The method must be implemented by the class (or a superclass) of any value to be inserted into the Map
.
The container class must implement (directly or indirectly) the java.util.Map
interface.
To facilitate resolving the method, the mapping's referenceClass must set before calling this method.
useMapClass
in interface ContainerMapping
public void setUseXMLRoot(boolean useXMLRoot)
public boolean usesXMLRoot()
public boolean isMixedContent()
public void setMixedContent(boolean mixed)
private boolean isUnmappedContent(org.w3c.dom.Node node)
private org.eclipse.persistence.internal.oxm.XPathFragment getFragmentToCompare(XMLField field, XMLField context)
private java.util.ArrayList getUnmappedChildNodes(org.w3c.dom.NodeList nodes)
public boolean isCollectionMapping()
DatabaseMapping
isCollectionMapping
in class DatabaseMapping
public void setConverter(XMLConverter conv)
public XMLConverter getConverter()
public boolean isWhitespacePreservedForMixedContent()
public void setPreserveWhitespaceForMixedContent(boolean preserveWhitespace)
public boolean getReuseContainer()
public void setReuseContainer(boolean reuseContainer)
|
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |