net.sf.saxon.type
Class Converter

java.lang.Object
  extended by net.sf.saxon.type.Converter
Direct Known Subclasses:
AtomicSequenceConverter.UntypedConverter, 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

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
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
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
protected Converter()
           
protected Converter(ConversionRules rules)
          Construct a converter with a given set of conversion rules.
 
Method Summary
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
static Converter getConverter(AtomicType sourceType, AtomicType targetType, ConversionRules rules)
          Get a converter that handles conversion from one primitive type to another.
 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

getConverter

public static Converter getConverter(AtomicType sourceType,
                                     AtomicType targetType,
                                     ConversionRules rules)
Get a converter that handles conversion from one primitive type to another.

This method is intended for internal use only. The approved way to get a converter is using the factory method ConversionRules.getConverter(net.sf.saxon.type.AtomicType, net.sf.saxon.type.AtomicType)}

Parameters:
sourceType - the fingerprint of the source primitive type
targetType - the fingerprint of the target primitive type
rules - the conversion rules to be applied
Returns:
the converter if one is available; or null otherwise

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
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-2011 Saxonica Limited. All rights reserved.