Class Converter
- java.lang.Object
-
- 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 java.lang.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 theConversionRules
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 Description static class
Converter.Base64BinaryToHexBinary
Converts base64 to hexBinarystatic class
Converter.BooleanToDecimal
Converts a boolean to a decimalstatic class
Converter.BooleanToDouble
Converts a boolean to a doublestatic class
Converter.BooleanToFloat
Converts a boolean to an xs:floatstatic class
Converter.BooleanToInteger
Converts a boolean to an integerstatic class
Converter.DateTimeToDate
Converts a dateTime to a datestatic class
Converter.DateTimeToGDay
Converts a dateTime to a gDaystatic class
Converter.DateTimeToGMonth
Converts a dateTime to a gMonthstatic class
Converter.DateTimeToGMonthDay
Converts a dateTime to a gMonthDaystatic class
Converter.DateTimeToGYear
Converts a dateTime to a gYearstatic class
Converter.DateTimeToGYearMonth
Converts a dateTime to a gYearMonthstatic class
Converter.DateTimeToTime
Converts a dateTime to a timestatic class
Converter.DateToDateTime
Converts a date to a dateTimestatic class
Converter.DecimalToInteger
Converts a decimal to an integer.static class
Converter.DoubleToDecimal
Convers a double to a decimalstatic class
Converter.DoubleToInteger
Converts a double to an integerstatic class
Converter.DownCastingConverter
Converter that does nothing except change the type annotation of the value.static class
Converter.DurationToDayTimeDuration
Converts a duration to a dayTimeDurationstatic class
Converter.DurationToYearMonthDuration
Converts a duration to a yearMonthDurationstatic class
Converter.FloatToDecimal
Converts a float to a decimalstatic class
Converter.FloatToInteger
Converts a float to an integerstatic class
Converter.HexBinaryToBase64Binary
Converts hexBinary to base64Binarystatic class
Converter.IntegerToDecimal
Converts an integer to a decimalstatic class
Converter.NotationToQName
Converts Notation to QNamestatic class
Converter.NumericToBoolean
Converts a numeric value to a booleanstatic class
Converter.NumericToDecimal
Converts any numeric value to a decimalstatic class
Converter.NumericToDouble
Converts any numeric value to a double.static class
Converter.NumericToFloat
Converts any numeric value to xs:floatstatic 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:doublestatic class
Converter.PromoterToFloat
Converter that implements the promotion rules to a required type of xs:floatstatic class
Converter.QNameToNotation
Converts QName to Notationstatic class
Converter.StringToBase64BinaryConverter
Converts string to base64static class
Converter.ToStringConverter
Converts any value to a stringstatic class
Converter.ToUntypedAtomicConverter
Converts any value to untyped atomicstatic class
Converter.TwoPhaseConverter
Converter that operates in two phases, via an intermediate typestatic class
Converter.UpCastingConverter
Converter that does nothing except change the type annotation of the value.
-
Field Summary
-
Constructor Summary
Constructors Modifier Constructor Description protected
Converter()
protected
Converter(ConversionRules rules)
Construct a converter with a given set of conversion rules.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract ConversionResult
convert(AtomicValue input)
Convert an atomic value from the source type to the target typestatic 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 Converterstatic 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 suppliedboolean
isAlwaysSuccessful()
Ask if this converter will always succeedboolean
isXPath30Conversion()
Ask if this converter implements a conversion that requires XPath 3.0 (or XQuery 3.0 etc) to be enabledvoid
setConversionRules(ConversionRules rules)
Set the conversion rules to be used by this Convertervoid
setNamespaceResolver(NamespaceResolver resolver)
Provide a namespace resolver, needed for conversion to namespace-sensitive types such as QName and NOTATION.
-
-
-
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 convertedtargetType
- the type to which the value is to be convertedrules
- 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 typetargetType
- the fingerprint of the target primitive typerules
- 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 aValidationFailure
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
-
-