net.sf.saxon.type

## Class Converter

- java.lang.Object
- - net.sf.saxon.type.Converter

- Direct Known Subclasses:
    Converter.Base64BinaryToHexBinary, Converter.BooleanToDecimal, Converter.BooleanToDouble, Converter.BooleanToFloat, Converter.BooleanToInteger, Converter.DateTimeToDate, Converter.DateTimeToGDay, Converter.DateTimeToGMonth, Converter.DateTimeToGMonthDay, Converter.DateTimeToGYear, Converter.DateTimeToGYearMonth, Converter.DateTimeToTime, Converter.DateToDateTime, Converter.DecimalToInteger, Converter.DoubleToDecimal, Converter.DoubleToInteger, Converter.DownCastingConverter, Converter.DurationToDayTimeDuration, Converter.DurationToYearMonthDuration, Converter.FloatToDecimal, Converter.FloatToInteger, Converter.HexBinaryToBase64Binary, Converter.IntegerToDecimal, Converter.NotationToQName, Converter.NumericToBoolean, Converter.NumericToDecimal, Converter.NumericToDouble, Converter.NumericToFloat, Converter.NumericToInteger, Converter.PromoterToDouble, Converter.PromoterToFloat, Converter.QNameToNotation, Converter.ToStringConverter, Converter.ToUntypedAtomicConverter, Converter.UpCastingConverter, StringConverter, UntypedSequenceConverter.UntypedConverter

      public abstract class Converter
      extends Object

  A converter implements conversions from one atomic type to another - that is, it implements the casting rules for a (source type, destination type) pair.

  There is potentially one Converter implementation for each pair of (source, target) classes; though in many cases the same implementation handles a number of such pairs.

  In cases where the conversion rules are fixed (specifically, where they do not depend on differences between versions of the XSD or QT specifications), the appropriate Converter can be obtained as a static constant, for example `BOOLEAN_TO_DOUBLE`. In other cases the converter is paramaterized by the `ConversionRules` object, and should be obtained by calling the appropriate factory method on the ConversionRules.

  Where the source type of the conversion is xs:string, the converter will always be a subclass of `StringConverter`

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `Converter.Base64BinaryToHexBinary` Converts base64 to hexBinary
    `static class` | `Converter.BooleanToDecimal` Converts a boolean to a decimal
    `static class` | `Converter.BooleanToDouble` Converts a boolean to a double
    `static class` | `Converter.BooleanToFloat` Converts a boolean to an xs:float
    `static class` | `Converter.BooleanToInteger` Converts a boolean to an integer
    `static class` | `Converter.DateTimeToDate` Converts a dateTime to a date
    `static class` | `Converter.DateTimeToGDay` Converts a dateTime to a gDay
    `static class` | `Converter.DateTimeToGMonth` Converts a dateTime to a gMonth
    `static class` | `Converter.DateTimeToGMonthDay` Converts a dateTime to a gMonthDay
    `static class` | `Converter.DateTimeToGYear` Converts a dateTime to a gYear
    `static class` | `Converter.DateTimeToGYearMonth` Converts a dateTime to a gYearMonth
    `static class` | `Converter.DateTimeToTime` Converts a dateTime to a time
    `static class` | `Converter.DateToDateTime` Converts a date to a dateTime
    `static class` | `Converter.DecimalToInteger` Converts a decimal to an integer.
    `static class` | `Converter.DoubleToDecimal` Convers a double to a decimal
    `static class` | `Converter.DoubleToInteger` Converts a double to an integer
    `static class` | `Converter.DownCastingConverter` Converter that does nothing except change the type annotation of the value.
    `static class` | `Converter.DurationToDayTimeDuration` Converts a duration to a dayTimeDuration
    `static class` | `Converter.DurationToYearMonthDuration` Converts a duration to a yearMonthDuration
    `static class` | `Converter.FloatToDecimal` Converts a float to a decimal
    `static class` | `Converter.FloatToInteger` Converts a float to an integer
    `static class` | `Converter.HexBinaryToBase64Binary` Converts hexBinary to base64Binary
    `static class` | `Converter.IntegerToDecimal` Converts an integer to a decimal
    `static class` | `Converter.NotationToQName` Converts Notation to QName
    `static class` | `Converter.NumericToBoolean` Converts a numeric value to a boolean
    `static class` | `Converter.NumericToDecimal` Converts any numeric value to a decimal
    `static class` | `Converter.NumericToDouble` Converts any numeric value to a double.
    `static class` | `Converter.NumericToFloat` Converts any numeric value to xs:float
    `static class` | `Converter.NumericToInteger` Converts any numeric value to an integer.
    `static class` | `Converter.PromoterToDouble` Converter that implements the promotion rules to a required type of xs:double
    `static class` | `Converter.PromoterToFloat` Converter that implements the promotion rules to a required type of xs:float
    `static class` | `Converter.QNameToNotation` Converts QName to Notation
    `static class` | `Converter.StringToBase64BinaryConverter` Converts string to base64
    `static class` | `Converter.ToStringConverter` Converts any value to a string
    `static class` | `Converter.ToUntypedAtomicConverter` Converts any value to untyped atomic
    `static class` | `Converter.TwoPhaseConverter` Converter that operates in two phases, via an intermediate type
    `static class` | `Converter.UpCastingConverter` Converter that does nothing except change the type annotation of the value.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static Converter.Base64BinaryToHexBinary` | `BASE64_BINARY_TO_HEX_BINARY`
    `static Converter.BooleanToDecimal` | `BOOLEAN_TO_DECIMAL`
    `static Converter.BooleanToDouble` | `BOOLEAN_TO_DOUBLE`
    `static Converter.BooleanToFloat` | `BOOLEAN_TO_FLOAT`
    `static Converter.BooleanToInteger` | `BOOLEAN_TO_INTEGER`
    `static Converter.DateTimeToDate` | `DATE_TIME_TO_DATE`
    `static Converter.DateTimeToGDay` | `DATE_TIME_TO_G_DAY`
    `static Converter.DateTimeToGMonth` | `DATE_TIME_TO_G_MONTH`
    `static Converter.DateTimeToGMonthDay` | `DATE_TIME_TO_G_MONTH_DAY`
    `static Converter.DateTimeToGYear` | `DATE_TIME_TO_G_YEAR`
    `static Converter.DateTimeToGYearMonth` | `DATE_TIME_TO_G_YEAR_MONTH`
    `static Converter.DateTimeToTime` | `DATE_TIME_TO_TIME`
    `static Converter.DateToDateTime` | `DATE_TO_DATE_TIME`
    `static Converter.DecimalToInteger` | `DECIMAL_TO_INTEGER`
    `static Converter.DoubleToDecimal` | `DOUBLE_TO_DECIMAL`
    `static Converter.DoubleToInteger` | `DOUBLE_TO_INTEGER`
    `static Converter.DurationToDayTimeDuration` | `DURATION_TO_DAY_TIME_DURATION`
    `static Converter.DurationToYearMonthDuration` | `DURATION_TO_YEAR_MONTH_DURATION`
    `static Converter.FloatToDecimal` | `FLOAT_TO_DECIMAL`
    `static Converter.FloatToInteger` | `FLOAT_TO_INTEGER`
    `static Converter.HexBinaryToBase64Binary` | `HEX_BINARY_TO_BASE64_BINARY`
    `static StringConverter.IdentityConverter` | `IDENTITY_CONVERTER`
    `static Converter.IntegerToDecimal` | `INTEGER_TO_DECIMAL`
    `static Converter.NotationToQName` | `NOTATION_TO_QNAME`
    `static Converter.NumericToBoolean` | `NUMERIC_TO_BOOLEAN`
    `static Converter.NumericToDecimal` | `NUMERIC_TO_DECIMAL`
    `static Converter.NumericToDouble` | `NUMERIC_TO_DOUBLE`
    `static Converter.NumericToFloat` | `NUMERIC_TO_FLOAT`
    `static Converter.NumericToInteger` | `NUMERIC_TO_INTEGER`
    `static Converter.QNameToNotation` | `QNAME_TO_NOTATION`
    `static Converter.ToStringConverter` | `TO_STRING`
    `static Converter.ToUntypedAtomicConverter` | `TO_UNTYPED_ATOMIC`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `Converter()`
    `protected` | `Converter(ConversionRules rules)` Construct a converter with a given set of conversion rules.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `abstract ConversionResult` | `convert(AtomicValue input)` Convert an atomic value from the source type to the target type
    `static AtomicValue` | `convert(AtomicValue value, AtomicType targetType, ConversionRules rules)` Convenience method to convert a given value to a given type.
    `ConversionRules` | `getConversionRules()` Get the conversion rules to be used by this Converter
    `NamespaceResolver` | `getNamespaceResolver()` Get the namespace resolver if one has been supplied
    `boolean` | `isAlwaysSuccessful()` Ask if this converter will always succeed
    `boolean` | `isXPath30Conversion()` Ask if this converter implements a conversion that requires XPath 3.0 (or XQuery 3.0 etc) to be enabled
    `void` | `setConversionRules(ConversionRules rules)` Set the conversion rules to be used by this Converter
    `void` | `setNamespaceResolver(NamespaceResolver resolver)` Provide a namespace resolver, needed for conversion to namespace-sensitive types such as QName and NOTATION.

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

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

- - ### Field Detail

    - #### IDENTITY_CONVERTER

          public static final StringConverter.IdentityConverter IDENTITY_CONVERTER

    - #### TO_UNTYPED_ATOMIC

          public static final Converter.ToUntypedAtomicConverter TO_UNTYPED_ATOMIC

    - #### TO_STRING

          public static final Converter.ToStringConverter TO_STRING

    - #### NUMERIC_TO_FLOAT

          public static final Converter.NumericToFloat NUMERIC_TO_FLOAT

    - #### BOOLEAN_TO_FLOAT

          public static final Converter.BooleanToFloat BOOLEAN_TO_FLOAT

    - #### NUMERIC_TO_DOUBLE

          public static final Converter.NumericToDouble NUMERIC_TO_DOUBLE

    - #### BOOLEAN_TO_DOUBLE

          public static final Converter.BooleanToDouble BOOLEAN_TO_DOUBLE

    - #### DOUBLE_TO_DECIMAL

          public static final Converter.DoubleToDecimal DOUBLE_TO_DECIMAL

    - #### FLOAT_TO_DECIMAL

          public static final Converter.FloatToDecimal FLOAT_TO_DECIMAL

    - #### INTEGER_TO_DECIMAL

          public static final Converter.IntegerToDecimal INTEGER_TO_DECIMAL

    - #### NUMERIC_TO_DECIMAL

          public static final Converter.NumericToDecimal NUMERIC_TO_DECIMAL

    - #### BOOLEAN_TO_DECIMAL

          public static final Converter.BooleanToDecimal BOOLEAN_TO_DECIMAL

    - #### DOUBLE_TO_INTEGER

          public static final Converter.DoubleToInteger DOUBLE_TO_INTEGER

    - #### FLOAT_TO_INTEGER

          public static final Converter.FloatToInteger FLOAT_TO_INTEGER

    - #### DECIMAL_TO_INTEGER

          public static final Converter.DecimalToInteger DECIMAL_TO_INTEGER

    - #### NUMERIC_TO_INTEGER

          public static final Converter.NumericToInteger NUMERIC_TO_INTEGER

    - #### BOOLEAN_TO_INTEGER

          public static final Converter.BooleanToInteger BOOLEAN_TO_INTEGER

    - #### DURATION_TO_DAY_TIME_DURATION

          public static final Converter.DurationToDayTimeDuration DURATION_TO_DAY_TIME_DURATION

    - #### DURATION_TO_YEAR_MONTH_DURATION

          public static final Converter.DurationToYearMonthDuration DURATION_TO_YEAR_MONTH_DURATION

    - #### DATE_TO_DATE_TIME

          public static final Converter.DateToDateTime DATE_TO_DATE_TIME

    - #### DATE_TIME_TO_DATE

          public static final Converter.DateTimeToDate DATE_TIME_TO_DATE

    - #### DATE_TIME_TO_G_MONTH

          public static final Converter.DateTimeToGMonth DATE_TIME_TO_G_MONTH

    - #### DATE_TIME_TO_G_YEAR_MONTH

          public static final Converter.DateTimeToGYearMonth DATE_TIME_TO_G_YEAR_MONTH

    - #### DATE_TIME_TO_G_YEAR

          public static final Converter.DateTimeToGYear DATE_TIME_TO_G_YEAR

    - #### DATE_TIME_TO_G_MONTH_DAY

          public static final Converter.DateTimeToGMonthDay DATE_TIME_TO_G_MONTH_DAY

    - #### DATE_TIME_TO_G_DAY

          public static final Converter.DateTimeToGDay DATE_TIME_TO_G_DAY

    - #### DATE_TIME_TO_TIME

          public static final Converter.DateTimeToTime DATE_TIME_TO_TIME

    - #### NUMERIC_TO_BOOLEAN

          public static final Converter.NumericToBoolean NUMERIC_TO_BOOLEAN

    - #### BASE64_BINARY_TO_HEX_BINARY

          public static final Converter.Base64BinaryToHexBinary BASE64_BINARY_TO_HEX_BINARY

    - #### HEX_BINARY_TO_BASE64_BINARY

          public static final Converter.HexBinaryToBase64Binary HEX_BINARY_TO_BASE64_BINARY

    - #### NOTATION_TO_QNAME

          public static final Converter.NotationToQName NOTATION_TO_QNAME

    - #### QNAME_TO_NOTATION

          public static final Converter.QNameToNotation QNAME_TO_NOTATION

  - ### Constructor Detail

    - #### Converter

          protected Converter()

    - #### Converter

          protected Converter(ConversionRules rules)

      Construct a converter with a given set of conversion rules. For use in constructing subclasses
      Parameters:
        `rules` - the conversion rules for the configuration

  - ### Method Detail

    - #### convert

          public static AtomicValue convert(AtomicValue value,
                            AtomicType targetType,
                            ConversionRules rules)
                                     throws ValidationException

      Convenience method to convert a given value to a given type. Note: it is more efficient to obtain a converter in advance and to reuse it for multiple conversions
      Parameters:
        `value` - the value to be converted
        `targetType` - the type to which the value is to be converted
        `rules` - the conversion rules for the configuration
      Returns:
        the converted value
      Throws:
        `ValidationException` - if conversion fails

    - #### convert

          public abstract ConversionResult convert(AtomicValue input)

      Convert an atomic value from the source type to the target type
      Parameters:
        `input` - the atomic value to be converted, which the caller guarantees to be of the appropriate type for the converter. The results are undefined if the value is of the wrong type; possible outcomes are (apparent) success, or a ClassCastException.
      Returns:
        the result of the conversion, as an `AtomicValue`, if conversion succeeds, or a `ValidationFailure` object describing the reasons for failure if conversion is not possible. Note that the ValidationFailure object is not (and does not contain) an exception, because it does not necessarily result in an error being thrown, and creating exceptions on non-failure paths is expensive.

    - #### setConversionRules

          public final void setConversionRules(ConversionRules rules)

      Set the conversion rules to be used by this Converter
      Parameters:
        `rules` - the conversion rules

    - #### getConversionRules

          public final ConversionRules getConversionRules()

      Get the conversion rules to be used by this Converter
      Returns:
        the conversion rules

    - #### isXPath30Conversion

          public boolean isXPath30Conversion()

      Ask if this converter implements a conversion that requires XPath 3.0 (or XQuery 3.0 etc) to be enabled
      Returns:
        true if XPath 3.0 support is required

    - #### isAlwaysSuccessful

          public boolean isAlwaysSuccessful()

      Ask if this converter will always succeed
      Returns:
        true if this Converter will never return a ValidationFailure

    - #### setNamespaceResolver

          public void setNamespaceResolver(NamespaceResolver resolver)

      Provide a namespace resolver, needed for conversion to namespace-sensitive types such as QName and NOTATION. The resolver is ignored if the target type is not namespace-sensitive
      Parameters:
        `resolver` - the namespace resolver to be used

    - #### getNamespaceResolver

          public NamespaceResolver getNamespaceResolver()

      Get the namespace resolver if one has been supplied
      Returns:
        the namespace resolver, or null if none has been supplied

Copyright (c) 2004-2013 Saxonica Limited. All rights reserved.