- All Implemented Interfaces:
Serializable,Cloneable,CoreField,Field<XMLConversionManager,NamespaceResolver>
- Direct Known Subclasses:
XMLUnionField
setXPath method or by using the appropriate constructor.
The following XPath statements may be used to specify the location of XML data relating to an object's name attribute:
| XPath | Description |
|---|---|
| @name | The "@" character indicates that the node is an attribute. |
| text() | "text()" indicates that the node is a text node. In this case the name value in the text node belongs to the context node. |
| full-name/text() | The name information is stored in the text node of the full-name element. |
| personal-info/name/text() | The XPath statement may be used to specify any valid path. |
| name[2]/text() | The XPath statement may contain positional information. In this case the name information is stored in the text node of the second occurrence of the name element. |
Mapping to a Specific Schema Type: In most cases TopLink can determine the target format in the XML document. However, there are cases where you must specify which one of a number of possible targets TopLink should use. For example, a java.util.Calendar could be marshalled to a schema date, time, or dateTime, or a byte[] could be marshalled to a schema hexBinary or base64Binary node.
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="picture" type="xsd:hexBinary"/>
<xsd:element name="resume" type="xsd:base64Binary"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Code Sample
XMLField pictureField = new XMLField("picture/text()")
pictureField.setSchemaType(XMLConstants.HEX_BINARY_QNAME);
Setting custom conversion pairs: By default in TopLink XML built-in schema types are associated with java classes and vice versa. These default pairs can be modified by the user using the addJavaConversion and addXMLConversion api. For example by default a java.util.Calendar is mapped to the dateTime schema type so the XML will be formated based on that type. Below are the default schema type to java type conversion pairs and the default java type to schema type conversion pairs.
| Schema Type | Java Type |
|---|---|
| base64Binary | byte[] |
| boolean | boolean |
| byte | byte |
| date | java.util.Calendar |
| dateTime | java.util.Calendar |
| decimal | java.math.BigDecimal |
| double | double |
| float | float |
| hexBinary | byte[] |
| int | int |
| integer | java.math.BigInteger |
| long | long |
| QName | javax.xml.namespace.QName |
| time | java.util.Calendar |
| unsignedByte | short |
| unsignedInt | long |
| unsignedShort | int |
| anySimpleType | java.lang.String |
| Java Type | Schema Type |
|---|---|
| byte[] | hexBinary |
| java.lang.Byte[] | hexBinary |
| java.math.BigDecimal | decimal |
| java.math.BigInteger | integer |
| boolean | boolean |
| java.lang.Boolean | boolean |
| java.lang.Byte | Byte |
| byte | byte |
| java.util.Calendar | dateTime |
| java.util.GregorianCalendar | dateTime |
| double | double |
| java.lang.Double | double |
| float | float |
| java.lang.Float | float |
| int | int |
| java.lang.Integer | int |
| long | long |
| java.lang.Long | long |
| short | short |
| java.lang.Short | short |
| javax.xml.namespace.QName | QName |
| java.lang.String | string |
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected booleanprotected QNameprotected HashMapprotected HashMapFields inherited from class org.eclipse.persistence.internal.helper.DatabaseField
columnDefinition, index, isCreatable, isInsertable, isNullable, isPrimaryKey, isTranslated, isUnique, isUpdatable, keepInRow, length, name, nameForComparisons, NULL_SQL_TYPE, precision, qualifiedName, scale, sqlType, table, type, typeName, useDelimiters, useUpperCaseForComparisons -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddConversion(QName qname, Class<?> javaClass) Add an entry for both an XML Conversion and a Java Conversion entryvoidaddJavaConversion(Class<?> javaClass, QName qname) Add a Java to XML Conversion pair entryvoidaddXMLConversion(QName qname, Class<?> javaClass) Add an XML to Java Conversion pair entryconvertValueBasedOnSchemaType(Object value, XMLConversionManager xmlConversionManager, AbstractUnmarshalRecord record) INTERNAL: Called from DOMRecord and XMLReader.booleanDetermine whether the receiver is equal to a DatabaseField.Class<?> getJavaClass(QName qname) INTERNAL Return the class for a given qualified XML Schema typeClass<?> getJavaClass(QName qname, ConversionManager conversionManager) INTERNALINTERNAL: Return the last XPathFragment.Get the NamespaceResolver associated with this XMLFieldReturn the schema type associated with this fieldgetSchemaTypeForValue(Object value, CoreAbstractSession session) INTERNAL:INTERNAL:INTERNAL:getXMLType(Class<?> javaClass) Return the qualified XML Schema type for a given classgetXMLType(Class<?> javaClass, ConversionManager conversionManager) Return the qualified XML Schema type for a given classgetXPath()Returns the xpath statement associated with this XMLFieldINTERNAL: Maintain a direct pointer to the first XPathFragment.inthashCode()Return the hashcode of the name, because it is fairly unique.booleanINTERNAL:voidbooleanisCDATA()INTERNAL:booleanINTERNAL:booleanIndicates if this XMLField represents a "required" XML element or attribute ([minOccurs="1"] for elements, [use="required"] for attributes).booleanisSchemaType(QName schemaType) INTERNALbooleanINTERNAL: Indicates if the xpath for this field is "."booleanReturns if the field is a typed text field True when we should base conversions on the "type" attribute on elementsbooleanINTERNAL: Returns false since this is a union field The subclass XMLUnionField returns true for thisvoidremoveConversion(QName qname, Class<?> javaClass) Remove both a Java to XML Conversion and the corresponding XML to Java Conversion entryvoidremoveJavaConversion(Class<?> javaClass) Remove a Java to XML Conversion entryvoidremoveXMLConversion(QName qname) Remove an XML to Java Conversion entryvoidsetIsCDATA(boolean CDATA) INTERNAL:voidsetIsTypedTextField(boolean value) Set if the field is a typed text field True when we should base conversions on the "type" attribute on elementsvoidsetLastXPathFragment(XPathFragment lastXPathFragment) INTERNAL: Maintain a direct pointer to the last XPathFragment.voidsetLeafElementType(QName type) Assumes type is in the format prefix:localPart, or localPart.voidThis has the same effect as calling the setXPath methodvoidOverride setName in superclassvoidsetNamespaceResolver(NamespaceResolver newNamespaceResolver) Set the NamespaceResolver associated with this XMLFieldvoidsetNestedArray(boolean nestedArray) Set nested array flag.voidsetRequired(boolean isRequired) Set whether this XMLField represents a "required" XML element or attribute ([minOccurs="1"] for elements, [use="required"] for attributes).voidsetSchemaType(QName value) Sets the schematype associated with this XMLField This is an optional setting; when set the schema type will be used to format the XML appropriatelyvoidINTERNAL:voidINTERNAL:voidsetUsesSingleNode(boolean usesSingleNode) PUBLIC: Sets whether the mapping uses a single node.voidSet the xpath statment for this XMLField.voidsetXPathFragment(XPathFragment xPathFragment) INTERNAL: Return the first XPathFragment.booleanPUBLIC: Checks whether the mapping uses a single node.Methods inherited from class org.eclipse.persistence.internal.helper.DatabaseField
clone, convertClassNamesToClasses, equals, getColumnDefinition, getIndex, getLength, getName, getNameDelimited, getNameForComparisons, getPrecision, getQualifiedName, getQualifiedNameDelimited, getScale, getSqlType, getTable, getTableName, getType, getTypeName, getUseUpperCaseForComparisons, hasTableName, initDDLFields, isCreatable, isInsertable, isNullable, isObjectRelationalDatabaseField, isPrimaryKey, isReadOnly, isTranslated, isUnique, isUpdatable, keepInRow, resetQualifiedName, setColumnDefinition, setCreatable, setIndex, setInsertable, setIsTranslated, setKeepInRow, setLength, setName, setNameForComparisons, setNullable, setPrecision, setPrimaryKey, setScale, setSqlType, setTable, setTableName, setType, setTypeName, setUnique, setUpdatable, setUseDelimiters, shouldUseDelimiters, toString, useUpperCaseForComparisons
-
Field Details
-
userXMLTypes
-
userJavaTypes
-
isTypedTextField
protected boolean isTypedTextField -
leafElementType
-
-
Constructor Details
-
XMLField
public XMLField()Default constructor, create a new XMLField -
XMLField
Default constructor, create a new XMLField based on the specified xPath- Parameters:
xPath- The xPath statement for this field
-
-
Method Details
-
initialize
public void initialize()- Specified by:
initializein interfaceField<XMLConversionManager,NamespaceResolver>
-
getXPath
Returns the xpath statement associated with this XMLField- Specified by:
getXPathin interfaceField<XMLConversionManager,NamespaceResolver> - Returns:
- The xpath statement associated with this XMLField
-
setXPath
Set the xpath statment for this XMLField.- Specified by:
setXPathin interfaceField<XMLConversionManager,NamespaceResolver> - Parameters:
xPath- The xpath statement to be associated with this XMLField
-
getNamespaceResolver
Get the NamespaceResolver associated with this XMLField- Specified by:
getNamespaceResolverin interfaceField<XMLConversionManager,NamespaceResolver> - Returns:
- The NamespaceResolver associated with this XMLField
- See Also:
-
setNamespaceResolver
Set the NamespaceResolver associated with this XMLField- Specified by:
setNamespaceResolverin interfaceField<XMLConversionManager,NamespaceResolver> - Parameters:
newNamespaceResolver- The namespaceResolver to be associated with this XMLField- See Also:
-
setUsesSingleNode
public void setUsesSingleNode(boolean usesSingleNode) PUBLIC: Sets whether the mapping uses a single node.- Specified by:
setUsesSingleNodein interfaceField<XMLConversionManager,NamespaceResolver> - Parameters:
usesSingleNode- True if the items in the collection are in a single node or false if each of the items in the collection is in its own node
-
usesSingleNode
public boolean usesSingleNode()PUBLIC: Checks whether the mapping uses a single node.- Specified by:
usesSingleNodein interfaceField<XMLConversionManager,NamespaceResolver> - Returns:
- True if the items in the collection are in a single node or false if each of the items in the collection is in its own node.
-
setSchemaType
Sets the schematype associated with this XMLField This is an optional setting; when set the schema type will be used to format the XML appropriately- Specified by:
setSchemaTypein interfaceField<XMLConversionManager,NamespaceResolver> - Parameters:
value- QName to be added to the list of schema types
-
getSchemaType
Return the schema type associated with this field- Specified by:
getSchemaTypein interfaceField<XMLConversionManager,NamespaceResolver> - Returns:
- the schema type
-
isTypedTextField
public boolean isTypedTextField()Returns if the field is a typed text field True when we should base conversions on the "type" attribute on elements- Specified by:
isTypedTextFieldin interfaceField<XMLConversionManager,NamespaceResolver> - Returns:
- True when we should base conversions on the "type" attribute on elements, otherwise false
-
setIsTypedTextField
public void setIsTypedTextField(boolean value) Set if the field is a typed text field True when we should base conversions on the "type" attribute on elements- Specified by:
setIsTypedTextFieldin interfaceField<XMLConversionManager,NamespaceResolver> - Parameters:
value- The boolean value specifiy if this is a typed text field
-
isSelfField
public boolean isSelfField()INTERNAL: Indicates if the xpath for this field is "."- Specified by:
isSelfFieldin interfaceField<XMLConversionManager,NamespaceResolver> - Returns:
- true if the xpath is ".", false otherwise
-
isUnionField
public boolean isUnionField()INTERNAL: Returns false since this is a union field The subclass XMLUnionField returns true for this- Specified by:
isUnionFieldin interfaceField<XMLConversionManager,NamespaceResolver>
-
setName
Override setName in superclass- Overrides:
setNamein classDatabaseField
-
setName
This has the same effect as calling the setXPath method- Specified by:
setNamein interfaceCoreField- Overrides:
setNamein classDatabaseField- Parameters:
xPath- The xPath associated with this XMLField
-
getXPathFragment
INTERNAL: Maintain a direct pointer to the first XPathFragment. For example given the following XPath first/middle/@last, first is the first XPathFragment.- Specified by:
getXPathFragmentin interfaceField<XMLConversionManager,NamespaceResolver>
-
setXPathFragment
INTERNAL: Return the first XPathFragment. -
getLastXPathFragment
INTERNAL: Return the last XPathFragment.- Specified by:
getLastXPathFragmentin interfaceField<XMLConversionManager,NamespaceResolver>
-
setLastXPathFragment
INTERNAL: Maintain a direct pointer to the last XPathFragment. For example given the following XPath first/middle/@last, @last is the last XPathFragment. -
getJavaClass
INTERNAL Return the class for a given qualified XML Schema type- Parameters:
qname- The qualified name of the XML Schema type to use as a key in the lookup- Returns:
- The class corresponding to the specified schema type, if no corresponding match found returns null
-
getJavaClass
INTERNAL- Specified by:
getJavaClassin interfaceField<XMLConversionManager,NamespaceResolver> - Parameters:
qname- The qualified name of the XML Schema type to use as a key in the lookup- Returns:
- the class for a given qualified XML Schema type.
- Since:
- EclipseLink 2.6.0
-
getXMLType
Return the qualified XML Schema type for a given class- Parameters:
javaClass- The class to use as a key in the lookup- Returns:
- QName The qualified XML Schema type, if no corresponding match found returns null
-
getXMLType
Description copied from interface:FieldReturn the qualified XML Schema type for a given class- Specified by:
getXMLTypein interfaceField<XMLConversionManager,NamespaceResolver> - Parameters:
javaClass- The class to use as a key in the lookup- Returns:
- the XML Schema type for a given class.
- Since:
- EclipseLink 2.6.0
-
getUserXMLTypesForDeploymentXML
INTERNAL: -
setUserXMLTypesForDeploymentXML
INTERNAL:- Throws:
Exception
-
getUserJavaTypesForDeploymentXML
INTERNAL: -
setUserJavaTypesForDeploymentXML
INTERNAL:- Throws:
Exception
-
convertValueBasedOnSchemaType
public Object convertValueBasedOnSchemaType(Object value, XMLConversionManager xmlConversionManager, AbstractUnmarshalRecord record) INTERNAL: Called from DOMRecord and XMLReader. MappingNodeValues call XMLReader which calls this method so that other XMLReader subclasses can override.- Specified by:
convertValueBasedOnSchemaTypein interfaceField<XMLConversionManager,NamespaceResolver>
-
addXMLConversion
Add an XML to Java Conversion pair entry- Parameters:
qname- The qualified name of the XML schema typejavaClass- The class to add
-
addJavaConversion
Add a Java to XML Conversion pair entry- Parameters:
javaClass- The class to addqname- The qualified name of the XML schema type
-
addConversion
Add an entry for both an XML Conversion and a Java Conversion entry- Parameters:
qname- The qualified name of the XML schema type
-
removeXMLConversion
Remove an XML to Java Conversion entry -
removeJavaConversion
Remove a Java to XML Conversion entry -
removeConversion
Remove both a Java to XML Conversion and the corresponding XML to Java Conversion entry -
setLeafElementType
Assumes type is in the format prefix:localPart, or localPart. -
getLeafElementType
- Specified by:
getLeafElementTypein interfaceField<XMLConversionManager,NamespaceResolver>
-
hasLastXPathFragment
public boolean hasLastXPathFragment()INTERNAL:- Specified by:
hasLastXPathFragmentin interfaceField<XMLConversionManager,NamespaceResolver>
-
getSchemaTypeForValue
INTERNAL:- Specified by:
getSchemaTypeForValuein interfaceField<XMLConversionManager,NamespaceResolver>
-
setIsCDATA
public void setIsCDATA(boolean CDATA) INTERNAL:- Specified by:
setIsCDATAin interfaceField<XMLConversionManager,NamespaceResolver>
-
isCDATA
public boolean isCDATA()INTERNAL:- Specified by:
isCDATAin interfaceField<XMLConversionManager,NamespaceResolver>
-
isSchemaType
INTERNAL- Specified by:
isSchemaTypein interfaceField<XMLConversionManager,NamespaceResolver>
-
isRequired
public boolean isRequired()Indicates if this XMLField represents a "required" XML element or attribute ([minOccurs="1"] for elements, [use="required"] for attributes). NOTE: This API is used only for Schema Generation.- Specified by:
isRequiredin interfaceField<XMLConversionManager,NamespaceResolver> - See Also:
-
setRequired
public void setRequired(boolean isRequired) Set whether this XMLField represents a "required" XML element or attribute ([minOccurs="1"] for elements, [use="required"] for attributes). NOTE: This API is used only for Schema Generation.- Specified by:
setRequiredin interfaceField<XMLConversionManager,NamespaceResolver> - See Also:
-
equals
Description copied from class:DatabaseFieldDetermine whether the receiver is equal to a DatabaseField. Return true if the receiver and field have the same name and table. Also return true if the table of the receiver or field are unspecified, ie. have no name.- Overrides:
equalsin classDatabaseField
-
setNestedArray
public void setNestedArray(boolean nestedArray) Set nested array flag. Used in JSON marshalling.- Specified by:
setNestedArrayin interfaceField<XMLConversionManager,NamespaceResolver> - Parameters:
nestedArray- flag.
-
isNestedArray
public boolean isNestedArray()INTERNAL:- Specified by:
isNestedArrayin interfaceField<XMLConversionManager,NamespaceResolver> - Returns:
- True if content is nested array.
-
hashCode
public int hashCode()Description copied from class:DatabaseFieldReturn the hashcode of the name, because it is fairly unique.- Overrides:
hashCodein classDatabaseField
-