org.apache.xerces.jaxp.datatype

## Class DatatypeFactoryImpl

- java.lang.Object
- - javax.xml.datatype.DatatypeFactory
  - - org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl

-     public class DatatypeFactoryImpl
      extends javax.xml.datatype.DatatypeFactory

  Factory that creates new `javax.xml.datatype` `Object`s that map XML to/from Java `Object`s.

  `DatatypeFactory.newInstance()` is used to create a new `DatatypeFactory`. The following implementation resolution mechanisms are used in the following order:

  1. If the system property specified by `DatatypeFactory.DATATYPEFACTORY_PROPERTY`, "`javax.xml.datatype.DatatypeFactory`", exists, a class with the name of the property's value is instantiated. Any Exception thrown during the instantiation process is wrapped as a `DatatypeConfigurationException`.
  2. If the file ${JAVA_HOME}/lib/jaxp.properties exists, it is loaded in a `Properties` `Object`. The `Properties` `Object` is then queried for the property as documented in the prior step and processed as documented in the prior step.
  3. The services resolution mechanism is used, e.g. `META-INF/services/java.xml.datatype.DatatypeFactory`. Any Exception thrown during the instantiation process is wrapped as a `DatatypeConfigurationException`.
  4. The final mechanism is to attempt to instantiate the `Class` specified by `DatatypeFactory.DATATYPEFACTORY_IMPLEMENTATION_CLASS`, "`javax.xml.datatype.DatatypeFactoryImpl`". Any Exception thrown during the instantiation process is wrapped as a `DatatypeConfigurationException`.
  Version:
    $Id: DatatypeFactoryImpl.java 554381 2007-07-08 16:03:48Z mrglavas $
  Author:
    Joseph Fialli, Jeff Suttor

- - ### Field Summary

    - ### Fields inherited from class javax.xml.datatype.DatatypeFactory

      `DATATYPEFACTORY_IMPLEMENTATION_CLASS, DATATYPEFACTORY_PROPERTY`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DatatypeFactoryImpl()` Public constructor is empty..

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `javax.xml.datatype.Duration` | `newDuration(boolean isPositive, java.math.BigInteger years, java.math.BigInteger months, java.math.BigInteger days, java.math.BigInteger hours, java.math.BigInteger minutes, java.math.BigDecimal seconds)` Obtain a new instance of a `Duration` specifying the `Duration` as isPositive, years, months, days, hours, minutes, seconds.
    `javax.xml.datatype.Duration` | `newDuration(long durationInMilliseconds)` Obtain a new instance of a `Duration` specifying the `Duration` as milliseconds.
    `javax.xml.datatype.Duration` | `newDuration(java.lang.String lexicalRepresentation)` Obtain a new instance of a `Duration` specifying the `Duration` as its string representation, "PnYnMnDTnHnMnS", as defined in XML Schema 1.0 section 3.2.6.1.
    `javax.xml.datatype.XMLGregorianCalendar` | `newXMLGregorianCalendar()` Create a new instance of an `XMLGregorianCalendar`.
    `javax.xml.datatype.XMLGregorianCalendar` | `newXMLGregorianCalendar(java.math.BigInteger year, int month, int day, int hour, int minute, int second, java.math.BigDecimal fractionalSecond, int timezone)` Constructor allowing for complete value spaces allowed by W3C XML Schema 1.0 recommendation for xsd:dateTime and related builtin datatypes.
    `javax.xml.datatype.XMLGregorianCalendar` | `newXMLGregorianCalendar(java.util.GregorianCalendar cal)` Create an `XMLGregorianCalendar` from a `GregorianCalendar`.
    `javax.xml.datatype.XMLGregorianCalendar` | `newXMLGregorianCalendar(int year, int month, int day, int hour, int minute, int second, int millisecond, int timezone)` Constructor of value spaces that a `java.util.GregorianCalendar` instance would need to convert to an `XMLGregorianCalendar` instance.
    `javax.xml.datatype.XMLGregorianCalendar` | `newXMLGregorianCalendar(java.lang.String lexicalRepresentation)` Create a new XMLGregorianCalendar by parsing the String as a lexical representation.

    - ### Methods inherited from class javax.xml.datatype.DatatypeFactory

      `newDuration, newDurationDayTime, newDurationDayTime, newDurationDayTime, newDurationDayTime, newDurationYearMonth, newDurationYearMonth, newDurationYearMonth, newDurationYearMonth, newInstance, newInstance, newXMLGregorianCalendarDate, newXMLGregorianCalendarTime, newXMLGregorianCalendarTime, newXMLGregorianCalendarTime`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### DatatypeFactoryImpl

          public DatatypeFactoryImpl()

      Public constructor is empty..

      Use `DatatypeFactory.newInstance()` to create a `DatatypeFactory`.

  - ### Method Detail

    - #### newDuration

          public javax.xml.datatype.Duration newDuration(java.lang.String lexicalRepresentation)

      Obtain a new instance of a `Duration` specifying the `Duration` as its string representation, "PnYnMnDTnHnMnS", as defined in XML Schema 1.0 section 3.2.6.1.

      XML Schema Part 2: Datatypes, 3.2.6 duration, defines `duration` as:

      > duration represents a duration of time. The value space of duration is a six-dimensional space where the coordinates designate the Gregorian year, month, day, hour, minute, and second components defined in Section 5.5.3.2 of [ISO 8601], respectively. These components are ordered in their significance by their order of appearance i.e. as year, month, day, hour, minute, and second.

      All six values are set and availabe from the created `Duration`

      The XML Schema specification states that values can be of an arbitrary size. Implementations may chose not to or be incapable of supporting arbitrarily large and/or small values. An `UnsupportedOperationException` will be thrown with a message indicating implementation limits if implementation capacities are exceeded.

      Specified by:
        `newDuration` in class `javax.xml.datatype.DatatypeFactory`
      Parameters:
        `lexicalRepresentation` - `String` representation of a `Duration`.
      Returns:
        New `Duration` created from parsing the `lexicalRepresentation`.
      Throws:
        `java.lang.IllegalArgumentException` - If `lexicalRepresentation` is not a valid representation of a `Duration`.
        `java.lang.UnsupportedOperationException` - If implementation cannot support requested values.
        `java.lang.NullPointerException` - if `lexicalRepresentation` is `null`.

    - #### newDuration

          public javax.xml.datatype.Duration newDuration(long durationInMilliseconds)

      Obtain a new instance of a `Duration` specifying the `Duration` as milliseconds.

      XML Schema Part 2: Datatypes, 3.2.6 duration, defines `duration` as:

      > duration represents a duration of time. The value space of duration is a six-dimensional space where the coordinates designate the Gregorian year, month, day, hour, minute, and second components defined in Section 5.5.3.2 of [ISO 8601], respectively. These components are ordered in their significance by their order of appearance i.e. as year, month, day, hour, minute, and second.

      All six values are set by computing their values from the specified milliseconds and are availabe using the `get` methods of the created `Duration`. The values conform to and are defined by:

      - ISO 8601:2000(E) Section 5.5.3.2 Alternative format
      - W3C XML Schema 1.0 Part 2, Appendix D, ISO 8601 Date and Time Formats
      - `XMLGregorianCalendar` Date/Time Datatype Field Mapping Between XML Schema 1.0 and Java Representation

      The default start instance is defined by `GregorianCalendar`'s use of the start of the epoch: i.e., `Calendar.YEAR` = 1970, `Calendar.MONTH` = `Calendar.JANUARY`, `Calendar.DATE` = 1, etc. This is important as there are variations in the Gregorian Calendar, e.g. leap years have different days in the month = `Calendar.FEBRUARY` so the result of `Duration.getMonths()` and `Duration.getDays()` can be influenced.

      Specified by:
        `newDuration` in class `javax.xml.datatype.DatatypeFactory`
      Parameters:
        `durationInMilliseconds` - Duration in milliseconds to create.
      Returns:
        New `Duration` representing `durationInMilliseconds`.

    - #### newDuration

          public javax.xml.datatype.Duration newDuration(boolean isPositive,
                                                java.math.BigInteger years,
                                                java.math.BigInteger months,
                                                java.math.BigInteger days,
                                                java.math.BigInteger hours,
                                                java.math.BigInteger minutes,
                                                java.math.BigDecimal seconds)

      Obtain a new instance of a `Duration` specifying the `Duration` as isPositive, years, months, days, hours, minutes, seconds.

      The XML Schema specification states that values can be of an arbitrary size. Implementations may chose not to or be incapable of supporting arbitrarily large and/or small values. An `UnsupportedOperationException` will be thrown with a message indicating implementation limits if implementation capacities are exceeded.

      Specified by:
        `newDuration` in class `javax.xml.datatype.DatatypeFactory`
      Parameters:
        `isPositive` - Set to `false` to create a negative duration. When the length of the duration is zero, this parameter will be ignored.
        `years` - of this `Duration`
        `months` - of this `Duration`
        `days` - of this `Duration`
        `hours` - of this `Duration`
        `minutes` - of this `Duration`
        `seconds` - of this `Duration`
      Returns:
        New `Duration` created from the specified values.
      Throws:
        `java.lang.IllegalArgumentException` - If values are not a valid representation of a `Duration`.
        `java.lang.UnsupportedOperationException` - If implementation cannot support requested values.
        `java.lang.NullPointerException` - If any values are `null`.
      See Also:
        `newDuration(boolean isPositive, BigInteger years, BigInteger months, BigInteger days, BigInteger hours, BigInteger minutes, BigDecimal seconds)`

    - #### newXMLGregorianCalendar

          public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar()

      Create a new instance of an `XMLGregorianCalendar`.

      All date/time datatype fields set to `DatatypeConstants.FIELD_UNDEFINED` or null.

      Specified by:
        `newXMLGregorianCalendar` in class `javax.xml.datatype.DatatypeFactory`
      Returns:
        New `XMLGregorianCalendar` with all date/time datatype fields set to `DatatypeConstants.FIELD_UNDEFINED` or null.

    - #### newXMLGregorianCalendar

          public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(java.lang.String lexicalRepresentation)

      Create a new XMLGregorianCalendar by parsing the String as a lexical representation.

      Parsing the lexical string representation is defined in XML Schema 1.0 Part 2, Section 3.2.[7-14].1, Lexical Representation.

      The string representation may not have any leading and trailing whitespaces.

      The parsing is done field by field so that the following holds for any lexically correct String x:

           newXMLGregorianCalendar(x).toXMLFormat().equals(x)

      Except for the noted lexical/canonical representation mismatches listed in XML Schema 1.0 errata, Section 3.2.7.2.

      Specified by:
        `newXMLGregorianCalendar` in class `javax.xml.datatype.DatatypeFactory`
      Parameters:
        `lexicalRepresentation` - Lexical representation of one the eight XML Schema date/time datatypes.
      Returns:
        `XMLGregorianCalendar` created from the `lexicalRepresentation`.
      Throws:
        `java.lang.IllegalArgumentException` - If the `lexicalRepresentation` is not a valid `XMLGregorianCalendar`.
        `java.lang.NullPointerException` - If `lexicalRepresentation` is `null`.

    - #### newXMLGregorianCalendar

          public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(java.util.GregorianCalendar cal)

      Create an `XMLGregorianCalendar` from a `GregorianCalendar`.

      Field by Field Conversion from `GregorianCalendar` to an `XMLGregorianCalendar`
      `java.util.GregorianCalendar` field | `javax.xml.datatype.XMLGregorianCalendar` field
      --- | ---
      `ERA == GregorianCalendar.BC ? -YEAR : YEAR` | `XMLGregorianCalendar.setYear(int year)`
      `MONTH + 1` | `XMLGregorianCalendar.setMonth(int month)`
      `DAY_OF_MONTH` | `XMLGregorianCalendar.setDay(int day)`
      `HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND` | `XMLGregorianCalendar.setTime(int hour, int minute, int second, BigDecimal fractional)`
      `(ZONE_OFFSET + DST_OFFSET) / (60*1000)` (in minutes) | `XMLGregorianCalendar.setTimezone(int offset)`*

      *conversion loss of information. It is not possible to represent a `java.util.GregorianCalendar` daylight savings timezone id in the XML Schema 1.0 date/time datatype representation.

      To compute the return value's `TimeZone` field,

      - when `this.getTimezone() != FIELD_UNDEFINED`, create a `java.util.TimeZone` with a custom timezone id using the `this.getTimezone()`.
      - else use the `GregorianCalendar` default timezone value for the host is defined as specified by `java.util.TimeZone.getDefault()`.
      Specified by:
        `newXMLGregorianCalendar` in class `javax.xml.datatype.DatatypeFactory`
      Parameters:
        `cal` - `java.util.GregorianCalendar` used to create `XMLGregorianCalendar`
      Returns:
        `XMLGregorianCalendar` created from `java.util.GregorianCalendar`
      Throws:
        `java.lang.NullPointerException` - If `cal` is `null`.

    - #### newXMLGregorianCalendar

          public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(int year,
                                                                        int month,
                                                                        int day,
                                                                        int hour,
                                                                        int minute,
                                                                        int second,
                                                                        int millisecond,
                                                                        int timezone)

      Constructor of value spaces that a `java.util.GregorianCalendar` instance would need to convert to an `XMLGregorianCalendar` instance.

      `XMLGregorianCalendar eon` and `fractionalSecond` are set to `null`

      A `DatatypeConstants.FIELD_UNDEFINED` value indicates that field isnot set.

      Overrides:
        `newXMLGregorianCalendar` in class `javax.xml.datatype.DatatypeFactory`
      Parameters:
        `year` - of `XMLGregorianCalendar` to be created.
        `month` - of `XMLGregorianCalendar` to be created.
        `day` - of `XMLGregorianCalendar` to be created.
        `hour` - of `XMLGregorianCalendar` to be created.
        `minute` - of `XMLGregorianCalendar` to be created.
        `second` - of `XMLGregorianCalendar` to be created.
        `millisecond` - of `XMLGregorianCalendar` to be created.
        `timezone` - of `XMLGregorianCalendar` to be created.
      Returns:
        `XMLGregorianCalendar` created from specified values.
      Throws:
        `java.lang.IllegalArgumentException` - If any individual parameter's value is outside the maximum value constraint for the field as determined by the Date/Time Data Mapping table in `XMLGregorianCalendar` or if the composite values constitute an invalid `XMLGregorianCalendar` instance as determined by `XMLGregorianCalendar.isValid()`.

    - #### newXMLGregorianCalendar

          public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(java.math.BigInteger year,
                                                                        int month,
                                                                        int day,
                                                                        int hour,
                                                                        int minute,
                                                                        int second,
                                                                        java.math.BigDecimal fractionalSecond,
                                                                        int timezone)

      Constructor allowing for complete value spaces allowed by W3C XML Schema 1.0 recommendation for xsd:dateTime and related builtin datatypes. Note that `year` parameter supports arbitrarily large numbers and fractionalSecond has infinite precision.

      Specified by:
        `newXMLGregorianCalendar` in class `javax.xml.datatype.DatatypeFactory`
      Parameters:
        `year` - of `XMLGregorianCalendar` to be created.
        `month` - of `XMLGregorianCalendar` to be created.
        `day` - of `XMLGregorianCalendar` to be created.
        `hour` - of `XMLGregorianCalendar` to be created.
        `minute` - of `XMLGregorianCalendar` to be created.
        `second` - of `XMLGregorianCalendar` to be created.
        `fractionalSecond` - of `XMLGregorianCalendar` to be created.
        `timezone` - of `XMLGregorianCalendar` to be created.
      Returns:
        `XMLGregorianCalendar` created from specified values.
      Throws:
        `java.lang.IllegalArgumentException` - If any individual parameter's value is outside the maximum value constraint for the field as determined by the Date/Time Data Mapping table in `XMLGregorianCalendar` or if the composite values constitute an invalid `XMLGregorianCalendar` instance as determined by `XMLGregorianCalendar.isValid()`.
        `java.lang.NullPointerException` - If any parameters are `null`.

Copyright © 1999-2022 The Apache Software Foundation. All Rights Reserved.