Package net.sf.saxon.type
Class Converter
java.lang.Object
net.sf.saxon.type.Converter
- Direct Known Subclasses:
Converter.DoubleToDecimal
,Converter.DoubleToInteger
,Converter.DownCastingConverter
,Converter.FloatToDecimal
,Converter.FloatToInteger
,Converter.IdentityConverter
,Converter.NumericToDecimal
,Converter.NumericToInteger
,Converter.PromoterToAnyURI
,Converter.PromoterToBase64Binary
,Converter.PromoterToDouble
,Converter.PromoterToFloat
,Converter.PromoterToHexBinary
,Converter.PromoterToString
,Converter.TwoPhaseConverter
,Converter.UnfailingConverter
,StringConverter
,UntypedSequenceConverter.UntypedConverter
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
Converter.BooleanToDouble.INSTANCE
. In other cases the converter is parameterized 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 ClassesModifier and TypeClassDescriptionstatic class
Converts base64 to hexBinarystatic class
Converts a boolean to a decimalstatic class
Converts a boolean to a doublestatic class
Converts a boolean to an xs:floatstatic class
Converts a boolean to an integerstatic class
Converts a dateTime to a datestatic class
Converts a dateTime to a gDaystatic class
Converts a dateTime to a gMonthstatic class
Converts a dateTime to a gMonthDaystatic class
Converts a dateTime to a gYearstatic class
Converts a dateTime to a gYearMonthstatic class
Converts a dateTime to a timestatic class
Converts a date to a dateTimestatic class
Converts a decimal to an integer.static class
Convers a double to a decimalstatic class
Converts a double to an integerstatic class
Converter that checks that a value belonging to a supertype is a valid instance of a subtype, and returns an instance of the subtypestatic class
Converts a duration to a dayTimeDurationstatic class
Converts a duration to a yearMonthDurationstatic class
Converts a float to a decimalstatic class
Converts a float to an integerstatic class
Converts hexBinary to base64Binarystatic class
Converter that does nothing - it returns the input unchangedstatic class
Converts an integer to a decimalstatic class
Converts Notation to QNamestatic class
Converts a numeric value to a booleanstatic class
Converts any numeric value to a decimalstatic class
Converts any numeric value to a double.static class
Converts any numeric value to xs:floatstatic class
Converts any numeric value to an integer.static class
Converter that implements the promotion rules from xs:string to xs:anyURIstatic class
static class
Converter that implements the promotion rules to a required type of xs:doublestatic class
Converter that implements the promotion rules to a required type of xs:floatstatic class
Converter that implements the promotion rules from xs:string to xs:anyURIstatic class
Converter that implements the promotion rules from xs:anyURI to xs:stringstatic class
Converts QName to Notationstatic class
Converts any value to a stringstatic class
Converts any value to untyped atomicstatic class
Converter that operates in two phases, via an intermediate typestatic class
Specialisation for converters that always succeedstatic class
Converter that does nothing except change the type annotation of the value. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
protected
Converter
(ConversionRules rules) Construct a converter with a given set of conversion rules. -
Method Summary
Modifier and TypeMethodDescriptionabstract 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.final ConversionRules
Get the conversion rules to be used by this ConverterGet the namespace resolver if one has been suppliedboolean
Ask if this converter will always succeedboolean
Ask if this converter implements promotion rulesfinal void
Set the conversion rules to be used by this ConvertersetNamespaceResolver
(NamespaceResolver resolver) Provide a namespace resolver, needed for conversion to namespace-sensitive types such as QName and NOTATION.
-
Constructor Details
-
Converter
protected Converter() -
Converter
Construct a converter with a given set of conversion rules. For use in constructing subclasses- Parameters:
rules
- the conversion rules for the configuration
-
-
Method Details
-
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
-
convert
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 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
Set the conversion rules to be used by this Converter- Parameters:
rules
- the conversion rules
-
getConversionRules
Get the conversion rules to be used by this Converter- Returns:
- the conversion rules
-
isAlwaysSuccessful
public boolean isAlwaysSuccessful()Ask if this converter will always succeed- Returns:
- true if this Converter will never return a ValidationFailure
-
isPromoter
public boolean isPromoter()Ask if this converter implements promotion rules- Returns:
- true if this Converter handles type promotion in the coercion rules
-
setNamespaceResolver
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- Returns:
- a new Converter customised with the supplied namespace context. The original Converter is unchanged (see bug 2754)
-
getNamespaceResolver
Get the namespace resolver if one has been supplied- Returns:
- the namespace resolver, or null if none has been supplied
-