- java.lang.Object
-
- org.eclipse.persistence.internal.helper.DatabaseField
-
- org.eclipse.persistence.oxm.XMLField
-
- All Implemented Interfaces:
Serializable,Cloneable,CoreField,Field<XMLConversionManager,NamespaceResolver>
- Direct Known Subclasses:
XMLUnionField
public class XMLField extends DatabaseField implements Field<XMLConversionManager,NamespaceResolver>
TopLink XML mappings make use of XMLFields based on 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 field using thesetXPathmethod 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 statements 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.
XML schema type to Java type default 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 to XML schema type default conversion pairs 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:
XMLUnionField, Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected booleanisTypedTextFieldprotected QNameleafElementTypeprotected HashMapuserJavaTypesprotected HashMapuserXMLTypes-
Fields 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
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddConversion(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 entryObjectconvertValueBasedOnSchemaType(Object value, XMLConversionManager xmlConversionManager, AbstractUnmarshalRecord record)INTERNAL: Called from DOMRecord and XMLReader.booleanequals(Object object)Determine 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)INTERNALXPathFragmentgetLastXPathFragment()INTERNAL: Return the last XPathFragment.QNamegetLeafElementType()NamespaceResolvergetNamespaceResolver()Get the NamespaceResolver associated with this XMLFieldQNamegetSchemaType()Return the schema type associated with this fieldQNamegetSchemaTypeForValue(Object value, CoreAbstractSession session)INTERNAL:ArrayListgetUserJavaTypesForDeploymentXML()INTERNAL:ArrayListgetUserXMLTypesForDeploymentXML()INTERNAL:QNamegetXMLType(Class<?> javaClass)Return the qualified XML Schema type for a given classQNamegetXMLType(Class<?> javaClass, ConversionManager conversionManager)Return the qualified XML Schema type for a given classStringgetXPath()Returns the xpath statement associated with this XMLFieldXPathFragmentgetXPathFragment()INTERNAL: Maintain a direct pointer to the first XPathFragment.inthashCode()Return the hashcode of the name, because it is fairly unique.booleanhasLastXPathFragment()INTERNAL:voidinitialize()booleanisCDATA()INTERNAL:booleanisNestedArray()INTERNAL:booleanisRequired()Indicates if this XMLField represents a "required" XML element or attribute ([minOccurs="1"] for elements, [use="required"] for attributes).booleanisSchemaType(QName schemaType)INTERNALbooleanisSelfField()INTERNAL: Indicates if the xpath for this field is "."booleanisTypedTextField()Returns if the field is a typed text field True when we should base conversions on the "type" attribute on elementsbooleanisUnionField()INTERNAL: 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.voidsetName(String xPath)This has the same effect as calling the setXPath methodvoidsetName(String xPath, String startDelimiter, String endDelimiter)Override 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 appropriatelyvoidsetUserJavaTypesForDeploymentXML(ArrayList pairs)INTERNAL:voidsetUserXMLTypesForDeploymentXML(ArrayList pairs)INTERNAL:voidsetUsesSingleNode(boolean usesSingleNode)PUBLIC: Sets whether the mapping uses a single node.voidsetXPath(String xPath)Set the xpath statment for this XMLField.voidsetXPathFragment(XPathFragment xPathFragment)INTERNAL: Return the first XPathFragment.booleanusesSingleNode()PUBLIC: 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
-
-
-
-
Constructor Detail
-
XMLField
public XMLField()
Default constructor, create a new XMLField
-
XMLField
public XMLField(String xPath)
Default constructor, create a new XMLField based on the specified xPath- Parameters:
xPath- The xPath statement for this field
-
-
Method Detail
-
initialize
public void initialize()
- Specified by:
initializein interfaceField<XMLConversionManager,NamespaceResolver>
-
getXPath
public String getXPath()
Returns the xpath statement associated with this XMLField- Specified by:
getXPathin interfaceField<XMLConversionManager,NamespaceResolver>- Returns:
- The xpath statement associated with this XMLField
-
setXPath
public void setXPath(String xPath)
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
public NamespaceResolver getNamespaceResolver()
Get the NamespaceResolver associated with this XMLField- Specified by:
getNamespaceResolverin interfaceField<XMLConversionManager,NamespaceResolver>- Returns:
- The NamespaceResolver associated with this XMLField
- See Also:
NamespaceResolver
-
setNamespaceResolver
public void setNamespaceResolver(NamespaceResolver newNamespaceResolver)
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:
NamespaceResolver
-
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
public void setSchemaType(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 appropriately- Specified by:
setSchemaTypein interfaceField<XMLConversionManager,NamespaceResolver>- Parameters:
value- QName to be added to the list of schema types
-
getSchemaType
public QName 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
public void setName(String xPath, String startDelimiter, String endDelimiter)
Override setName in superclass- Overrides:
setNamein classDatabaseField
-
setName
public void setName(String xPath)
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
public XPathFragment 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
public void setXPathFragment(XPathFragment xPathFragment)
INTERNAL: Return the first XPathFragment.
-
getLastXPathFragment
public XPathFragment getLastXPathFragment()
INTERNAL: Return the last XPathFragment.- Specified by:
getLastXPathFragmentin interfaceField<XMLConversionManager,NamespaceResolver>
-
setLastXPathFragment
public void setLastXPathFragment(XPathFragment lastXPathFragment)
INTERNAL: Maintain a direct pointer to the last XPathFragment. For example given the following XPath first/middle/@last, @last is the last XPathFragment.
-
getJavaClass
public Class<?> getJavaClass(QName qname)
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
public Class<?> getJavaClass(QName qname, ConversionManager conversionManager)
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
public QName getXMLType(Class<?> javaClass)
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
public QName getXMLType(Class<?> javaClass, ConversionManager conversionManager)
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
public ArrayList getUserXMLTypesForDeploymentXML()
INTERNAL:
-
setUserXMLTypesForDeploymentXML
public void setUserXMLTypesForDeploymentXML(ArrayList pairs) throws Exception
INTERNAL:- Throws:
Exception
-
getUserJavaTypesForDeploymentXML
public ArrayList getUserJavaTypesForDeploymentXML()
INTERNAL:
-
setUserJavaTypesForDeploymentXML
public void setUserJavaTypesForDeploymentXML(ArrayList pairs) throws Exception
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
public void addXMLConversion(QName qname, Class<?> javaClass)
Add an XML to Java Conversion pair entry- Parameters:
qname- The qualified name of the XML schema typejavaClass- The class to add
-
addJavaConversion
public void addJavaConversion(Class<?> javaClass, QName qname)
Add a Java to XML Conversion pair entry- Parameters:
javaClass- The class to addqname- The qualified name of the XML schema type
-
addConversion
public void addConversion(QName qname, Class<?> javaClass)
Add an entry for both an XML Conversion and a Java Conversion entry- Parameters:
qname- The qualified name of the XML schema type
-
removeXMLConversion
public void removeXMLConversion(QName qname)
Remove an XML to Java Conversion entry
-
removeJavaConversion
public void removeJavaConversion(Class<?> javaClass)
Remove a Java to XML Conversion entry
-
removeConversion
public void removeConversion(QName qname, Class<?> javaClass)
Remove both a Java to XML Conversion and the corresponding XML to Java Conversion entry
-
setLeafElementType
public void setLeafElementType(QName type)
Assumes type is in the format prefix:localPart, or localPart.
-
getLeafElementType
public QName getLeafElementType()
- Specified by:
getLeafElementTypein interfaceField<XMLConversionManager,NamespaceResolver>
-
hasLastXPathFragment
public boolean hasLastXPathFragment()
INTERNAL:- Specified by:
hasLastXPathFragmentin interfaceField<XMLConversionManager,NamespaceResolver>
-
getSchemaTypeForValue
public QName getSchemaTypeForValue(Object value, CoreAbstractSession session)
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
public boolean isSchemaType(QName schemaType)
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:
SchemaModelGenerator
-
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:
SchemaModelGenerator
-
equals
public boolean equals(Object object)
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
-
-