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 name="customer" type="customer-type"/>
<xsd:complexType name="customer-type">
<xsd:sequence>
<xsd:element name="contact-methods" type="xsd:anyType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="address">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="phone-number" type="xsd:string"/>
</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.
| Modifier and Type | Field and Description |
|---|---|
| private boolean | |
| private ContainerPolicy | |
| private boolean | |
| private XMLField | |
| private boolean | |
| private boolean | |
| private boolean | |
| private boolean | |
| private XMLConverter | |
| private AbstractNullPolicy |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public void | buildBackupClone(Object
TODO clone, Object TODO backup, UnitOfWorkImpl TODO unitOfWork)Implements abstract org. |
| public void | buildClone(Object
TODO original, CacheKey TODO cacheKey, Object TODO clone, Integer TODO refreshCascade, AbstractSession TODO cloningSession)Implements abstract org. |
| public void | buildCloneFromRow(AbstractRecord
TODO databaseRow, JoinedAttributeManager TODO joinManager, Object TODO clone, CacheKey TODO sharedCacheKey, ObjectBuildingQuery TODO sourceQuery, UnitOfWorkImpl TODO unitOfWork, AbstractSession TODO executionSession)Implements abstract org. |
| protected AbstractRecord | buildCompositeRow(Object attributeValue, AbstractSession session, XMLDescriptor referenceDescriptor, AbstractRecord parentRow, DatabaseField field, Object originalObject, boolean wasXMLRoot)
|
| private Object | buildObjectValuesFromDOMRecord(DOMRecord record, AbstractSession session, ObjectBuildingQuery query, JoinedAttributeManager joinManager)
|
| public void | cascadePerformRemoveIfRequired(Object
TODO object, UnitOfWorkImpl TODO uow, Map<K, V> TODO visitedObjects)Implements abstract org. |
| public void | cascadeRegisterNewIfRequired(Object
TODO object, UnitOfWorkImpl TODO uow, Map<K, V> TODO visitedObjects)Implements abstract org. |
| public Object | |
| public ChangeRecord | Returns: prototype.changeset.ChangeRecordTODO clone, Object TODO backup, ObjectChangeSet TODO owner, AbstractSession TODO session)Implements abstract org. |
| public boolean | compareObjects(Object
TODO firstObject, Object TODO secondObject, AbstractSession TODO session)Implements abstract org. |
| public Object | convertDataValueToObjectValue(Object fieldValue, Session session, XMLUnmarshaller unmarshaller)
Implements org. |
| public Object | convertObjectValueToDataValue(Object value, Session session, XMLMarshaller marshaller)
Implements org. |
| public void | fixObjectReferences(Object
TODO object, Map<Object, ObjectDescriptor> TODO objectDescriptors, Map<Object, Object> TODO processedObjects, ObjectLevelReadQuery TODO query, DistributedSession TODO session)Implements abstract org. |
| public ContainerPolicy | getContainerPolicy()
Overrides org. Implements org. |
| public XMLConverter | |
| public DatabaseField | getField()
Overrides org. Implements org. |
| public Vector | getFields()
Overrides org. |
| private XPathFragment | |
| public boolean | getReuseContainer()
Implements org. |
| private ArrayList | |
| public AbstractNullPolicy | getWrapperNullPolicy()
Implements org. |
| public void | initialize(AbstractSession session)
Overrides org. |
| public boolean | isCollectionMapping()
Overrides org. Implements org. |
| public boolean | isDefaultEmptyContainer()
Implements org. |
| public boolean | |
| private boolean | |
| public boolean | isWhitespacePreservedForMixedContent()
Implements org. |
| public boolean | isXMLMapping()
Overrides org. |
| public void | iterate(DescriptorIterator iterator)
Implements abstract org. |
| public void | mergeChangesIntoObject(Object target, ChangeRecord changeRecord, Object source, MergeManager mergeManager, AbstractSession targetSession)
Implements abstract org. |
| public void | mergeIntoObject(Object target, boolean isTargetUninitialized, Object source, MergeManager mergeManager, AbstractSession targetSession)
Implements abstract org. |
| public void | setContainerPolicy(ContainerPolicy cp)
Implements org. |
| public void | |
| public void | setDefaultEmptyContainer(boolean defaultEmptyContainer)
Implements org. |
| public void | |
| public void | setMixedContent(boolean mixed)
Implements org. |
| public void | setPreserveWhitespaceForMixedContent(boolean preserveWhitespace)
Implements org. |
| public void | setReuseContainer(boolean reuseContainer)
Implements org. |
| public void | setUseXMLRoot(boolean useXMLRoot)
Implements org. |
| public void | setWrapperNullPolicy(AbstractNullPolicy policy)
Implements org. |
| public void | |
| public void | useCollectionClass(Class<?> concreteContainerClass)
Implements org. |
| public void | useCollectionClassName(String concreteContainerClassName)
Implements org. |
| public void | useListClassName(String concreteContainerClassName)
Implements org. |
| public void | useMapClass(Class<?> concreteContainerClass, String methodName)
Implements org. |
| public void | useMapClassName(String concreteContainerClass, String methodName)
Implements org. |
| public boolean | |
| public Object | valueFromRow(AbstractRecord row, JoinedAttributeManager joinManager, ObjectBuildingQuery sourceQuery, CacheKey cacheKey, AbstractSession executionSession, boolean isTargetProtected, Boolean[] wasCacheUsed)
Overrides org. |
| public void | writeFromObjectIntoRow(Object object, AbstractRecord row, AbstractSession session, DatabaseMapping.
Overrides org. |
| private void | writeSimpleValue(XMLField xmlRootField, Object element, Object originalObject, DOMRecord record, Document doc, Node root, boolean wasXMLRoot, AbstractSession session)
|
| public void | writeSingleValue(Object
- The value to be marshalled element, Object parent, XMLRecord - The Record the value is being marshalled too. row, AbstractSession session)Implements org. |