Class 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 the 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 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 Detail

      • userXMLTypes

        protected HashMap userXMLTypes
      • userJavaTypes

        protected HashMap userJavaTypes
      • isTypedTextField

        protected boolean isTypedTextField
      • leafElementType

        protected QName leafElementType
    • 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