Class DatatypeConverterImpl

java.lang.Object
javax.xml.bind.DatatypeConverterImpl
All Implemented Interfaces:
DatatypeConverterInterface

final class DatatypeConverterImpl extends Object implements DatatypeConverterInterface
This class is the JAXB RI's default implementation of the DatatypeConverterInterface.

When client applications specify the use of the static print/parse methods in DatatypeConverter, it will delegate to this class.

This class is responsible for whitespace normalization.

Since:
JAXB 2.1
  • Field Details

    • theInstance

      public static final DatatypeConverterInterface theInstance
      To avoid re-creating instances, we cache one instance.
    • hexCode

      private static final char[] hexCode
    • decodeMap

      private static final byte[] decodeMap
    • PADDING

      private static final byte PADDING
      See Also:
    • encodeMap

      private static final char[] encodeMap
    • datatypeFactory

      private static final DatatypeFactory datatypeFactory
  • Constructor Details

    • DatatypeConverterImpl

      protected DatatypeConverterImpl()
  • Method Details

    • parseString

      public String parseString(String lexicalXSDString)
      Description copied from interface: DatatypeConverterInterface
      Convert the string argument into a string.
      Specified by:
      parseString in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDString - A lexical representation of the XML Schema datatype xsd:string
      Returns:
      A string that is the same as the input string.
    • parseInteger

      public BigInteger parseInteger(String lexicalXSDInteger)
      Description copied from interface: DatatypeConverterInterface
      Convert the string argument into a BigInteger value.
      Specified by:
      parseInteger in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDInteger - A string containing a lexical representation of xsd:integer.
      Returns:
      A BigInteger value represented by the string argument.
    • _parseInteger

      public static BigInteger _parseInteger(CharSequence s)
    • printInteger

      public String printInteger(BigInteger val)
      Description copied from interface: DatatypeConverterInterface
      Converts a BigInteger value into a string.
      Specified by:
      printInteger in interface DatatypeConverterInterface
      Parameters:
      val - A BigInteger value
      Returns:
      A string containing a lexical representation of xsd:integer
    • _printInteger

      public static String _printInteger(BigInteger val)
    • parseInt

      public int parseInt(String s)
      Description copied from interface: DatatypeConverterInterface
      Convert the string argument into an int value.
      Specified by:
      parseInt in interface DatatypeConverterInterface
      Parameters:
      s - A string containing a lexical representation of xsd:int.
      Returns:
      An int value represented byte the string argument.
    • _parseInt

      public static int _parseInt(CharSequence s)
      Faster but less robust String->int conversion. Note that:
      1. XML Schema allows '+', but Integer.valueOf(String) is not.
      2. XML Schema allows leading and trailing (but not in-between) whitespaces. Integer.valueOf(String) doesn't allow any.
    • parseLong

      public long parseLong(String lexicalXSLong)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a long value.
      Specified by:
      parseLong in interface DatatypeConverterInterface
      Parameters:
      lexicalXSLong - A string containing lexical representation of xsd:long.
      Returns:
      A long value represented by the string argument.
    • _parseLong

      public static long _parseLong(CharSequence s)
    • parseShort

      public short parseShort(String lexicalXSDShort)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a short value.
      Specified by:
      parseShort in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDShort - A string containing lexical representation of xsd:short.
      Returns:
      A short value represented by the string argument.
    • _parseShort

      public static short _parseShort(CharSequence s)
    • printShort

      public String printShort(short val)
      Description copied from interface: DatatypeConverterInterface
      Converts a short value into a string.
      Specified by:
      printShort in interface DatatypeConverterInterface
      Parameters:
      val - A short value
      Returns:
      A string containing a lexical representation of xsd:short
    • _printShort

      public static String _printShort(short val)
    • parseDecimal

      public BigDecimal parseDecimal(String content)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a BigDecimal value.
      Specified by:
      parseDecimal in interface DatatypeConverterInterface
      Parameters:
      content - A string containing lexical representation of xsd:decimal.
      Returns:
      A BigDecimal value represented by the string argument.
    • _parseDecimal

      public static BigDecimal _parseDecimal(CharSequence content)
    • parseFloat

      public float parseFloat(String lexicalXSDFloat)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a float value.
      Specified by:
      parseFloat in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDFloat - A string containing lexical representation of xsd:float.
      Returns:
      A float value represented by the string argument.
    • _parseFloat

      public static float _parseFloat(CharSequence _val)
    • printFloat

      public String printFloat(float v)
      Description copied from interface: DatatypeConverterInterface
      Converts a float value into a string.
      Specified by:
      printFloat in interface DatatypeConverterInterface
      Parameters:
      v - A float value
      Returns:
      A string containing a lexical representation of xsd:float
    • _printFloat

      public static String _printFloat(float v)
    • parseDouble

      public double parseDouble(String lexicalXSDDouble)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a double value.
      Specified by:
      parseDouble in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDDouble - A string containing lexical representation of xsd:double.
      Returns:
      A double value represented by the string argument.
    • _parseDouble

      public static double _parseDouble(CharSequence _val)
    • parseBoolean

      public boolean parseBoolean(String lexicalXSDBoolean)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a boolean value.
      Specified by:
      parseBoolean in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDBoolean - A string containing lexical representation of xsd:boolean.
      Returns:
      A boolean value represented by the string argument.
    • _parseBoolean

      public static Boolean _parseBoolean(CharSequence literal)
    • printBoolean

      public String printBoolean(boolean val)
      Description copied from interface: DatatypeConverterInterface
      Converts a boolean value into a string.
      Specified by:
      printBoolean in interface DatatypeConverterInterface
      Parameters:
      val - A boolean value
      Returns:
      A string containing a lexical representation of xsd:boolean
    • _printBoolean

      public static String _printBoolean(boolean val)
    • parseByte

      public byte parseByte(String lexicalXSDByte)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a byte value.
      Specified by:
      parseByte in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDByte - A string containing lexical representation of xsd:byte.
      Returns:
      A byte value represented by the string argument.
    • _parseByte

      public static byte _parseByte(CharSequence literal)
    • printByte

      public String printByte(byte val)
      Description copied from interface: DatatypeConverterInterface
      Converts a byte value into a string.
      Specified by:
      printByte in interface DatatypeConverterInterface
      Parameters:
      val - A byte value
      Returns:
      A string containing a lexical representation of xsd:byte
    • _printByte

      public static String _printByte(byte val)
    • parseQName

      public QName parseQName(String lexicalXSDQName, NamespaceContext nsc)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a QName value.

      String parameter lexicalXSDQname must conform to lexical value space specifed at XML Schema Part 2:Datatypes specification:QNames

      Specified by:
      parseQName in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDQName - A string containing lexical representation of xsd:QName.
      nsc - A namespace context for interpreting a prefix within a QName.
      Returns:
      A QName value represented by the string argument.
    • _parseQName

      public static QName _parseQName(CharSequence text, NamespaceContext nsc)
      Returns:
      null if fails to convert.
    • parseDateTime

      public Calendar parseDateTime(String lexicalXSDDateTime)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a Calendar value.
      Specified by:
      parseDateTime in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDDateTime - A string containing lexical representation of xsd:datetime.
      Returns:
      A Calendar object represented by the string argument.
    • _parseDateTime

      public static GregorianCalendar _parseDateTime(CharSequence s)
    • printDateTime

      public String printDateTime(Calendar val)
      Description copied from interface: DatatypeConverterInterface
      Converts a Calendar value into a string.
      Specified by:
      printDateTime in interface DatatypeConverterInterface
      Parameters:
      val - A Calendar value
      Returns:
      A string containing a lexical representation of xsd:dateTime
    • _printDateTime

      public static String _printDateTime(Calendar val)
    • parseBase64Binary

      public byte[] parseBase64Binary(String lexicalXSDBase64Binary)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into an array of bytes.
      Specified by:
      parseBase64Binary in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDBase64Binary - A string containing lexical representation of xsd:base64Binary.
      Returns:
      An array of bytes represented by the string argument.
    • parseHexBinary

      public byte[] parseHexBinary(String s)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into an array of bytes.
      Specified by:
      parseHexBinary in interface DatatypeConverterInterface
      Parameters:
      s - A string containing lexical representation of xsd:hexBinary.
      Returns:
      An array of bytes represented by the string argument.
    • hexToBin

      private static int hexToBin(char ch)
    • printHexBinary

      public String printHexBinary(byte[] data)
      Description copied from interface: DatatypeConverterInterface
      Converts an array of bytes into a string.
      Specified by:
      printHexBinary in interface DatatypeConverterInterface
      Parameters:
      data - an array of bytes
      Returns:
      A string containing a lexical representation of xsd:hexBinary
    • parseUnsignedInt

      public long parseUnsignedInt(String lexicalXSDUnsignedInt)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a long value.
      Specified by:
      parseUnsignedInt in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDUnsignedInt - A string containing lexical representation of xsd:unsignedInt.
      Returns:
      A long value represented by the string argument.
    • printUnsignedInt

      public String printUnsignedInt(long val)
      Description copied from interface: DatatypeConverterInterface
      Converts a long value into a string.
      Specified by:
      printUnsignedInt in interface DatatypeConverterInterface
      Parameters:
      val - A long value
      Returns:
      A string containing a lexical representation of xsd:unsignedInt
    • parseUnsignedShort

      public int parseUnsignedShort(String lexicalXSDUnsignedShort)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into an int value.
      Specified by:
      parseUnsignedShort in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDUnsignedShort - A string containing lexical representation of xsd:unsignedShort.
      Returns:
      An int value represented by the string argument.
    • parseTime

      public Calendar parseTime(String lexicalXSDTime)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a Calendar value.
      Specified by:
      parseTime in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDTime - A string containing lexical representation of xsd:Time.
      Returns:
      A Calendar value represented by the string argument.
    • printTime

      public String printTime(Calendar val)
      Description copied from interface: DatatypeConverterInterface
      Converts a Calendar value into a string.
      Specified by:
      printTime in interface DatatypeConverterInterface
      Parameters:
      val - A Calendar value
      Returns:
      A string containing a lexical representation of xsd:time
    • parseDate

      public Calendar parseDate(String lexicalXSDDate)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a Calendar value.
      Specified by:
      parseDate in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDDate - A string containing lexical representation of xsd:Date.
      Returns:
      A Calendar value represented by the string argument.
    • printDate

      public String printDate(Calendar val)
      Description copied from interface: DatatypeConverterInterface
      Converts a Calendar value into a string.
      Specified by:
      printDate in interface DatatypeConverterInterface
      Parameters:
      val - A Calendar value
      Returns:
      A string containing a lexical representation of xsd:date
    • _printDate

      public static String _printDate(Calendar val)
    • parseAnySimpleType

      public String parseAnySimpleType(String lexicalXSDAnySimpleType)
      Description copied from interface: DatatypeConverterInterface
      Return a string containing the lexical representation of the simple type.
      Specified by:
      parseAnySimpleType in interface DatatypeConverterInterface
      Parameters:
      lexicalXSDAnySimpleType - A string containing lexical representation of the simple type.
      Returns:
      A string containing the lexical representation of the simple type.
    • printString

      public String printString(String val)
      Description copied from interface: DatatypeConverterInterface
      Converts the string argument into a string.
      Specified by:
      printString in interface DatatypeConverterInterface
      Parameters:
      val - A string value.
      Returns:
      A string containing a lexical representation of xsd:string
    • printInt

      public String printInt(int val)
      Description copied from interface: DatatypeConverterInterface
      Converts an int value into a string.
      Specified by:
      printInt in interface DatatypeConverterInterface
      Parameters:
      val - An int value
      Returns:
      A string containing a lexical representation of xsd:int
    • _printInt

      public static String _printInt(int val)
    • printLong

      public String printLong(long val)
      Description copied from interface: DatatypeConverterInterface
      Converts a long value into a string.
      Specified by:
      printLong in interface DatatypeConverterInterface
      Parameters:
      val - A long value
      Returns:
      A string containing a lexical representation of xsd:long
    • _printLong

      public static String _printLong(long val)
    • printDecimal

      public String printDecimal(BigDecimal val)
      Description copied from interface: DatatypeConverterInterface
      Converts a BigDecimal value into a string.
      Specified by:
      printDecimal in interface DatatypeConverterInterface
      Parameters:
      val - A BigDecimal value
      Returns:
      A string containing a lexical representation of xsd:decimal
    • _printDecimal

      public static String _printDecimal(BigDecimal val)
    • printDouble

      public String printDouble(double v)
      Description copied from interface: DatatypeConverterInterface
      Converts a double value into a string.
      Specified by:
      printDouble in interface DatatypeConverterInterface
      Parameters:
      v - A double value
      Returns:
      A string containing a lexical representation of xsd:double
    • _printDouble

      public static String _printDouble(double v)
    • printQName

      public String printQName(QName val, NamespaceContext nsc)
      Description copied from interface: DatatypeConverterInterface
      Converts a QName instance into a string.
      Specified by:
      printQName in interface DatatypeConverterInterface
      Parameters:
      val - A QName value
      nsc - A namespace context for interpreting a prefix within a QName.
      Returns:
      A string containing a lexical representation of QName
    • _printQName

      public static String _printQName(QName val, NamespaceContext nsc)
    • printBase64Binary

      public String printBase64Binary(byte[] val)
      Description copied from interface: DatatypeConverterInterface
      Converts an array of bytes into a string.
      Specified by:
      printBase64Binary in interface DatatypeConverterInterface
      Parameters:
      val - an array of bytes
      Returns:
      A string containing a lexical representation of xsd:base64Binary
    • printUnsignedShort

      public String printUnsignedShort(int val)
      Description copied from interface: DatatypeConverterInterface
      Converts an int value into a string.
      Specified by:
      printUnsignedShort in interface DatatypeConverterInterface
      Parameters:
      val - An int value
      Returns:
      A string containing a lexical representation of xsd:unsignedShort
    • printAnySimpleType

      public String printAnySimpleType(String val)
      Description copied from interface: DatatypeConverterInterface
      Converts a string value into a string.
      Specified by:
      printAnySimpleType in interface DatatypeConverterInterface
      Parameters:
      val - A string value
      Returns:
      A string containing a lexical representation of xsd:AnySimpleType
    • installHook

      public static String installHook(String s)
      Just return the string passed as a parameter but installs an instance of this class as the DatatypeConverter implementation. Used from static fixed value initializers.
    • initDecodeMap

      private static byte[] initDecodeMap()
    • guessLength

      private static int guessLength(String text)
      computes the length of binary data speculatively.

      Our requirement is to create byte[] of the exact length to store the binary data. If we do this in a straight-forward way, it takes two passes over the data. Experiments show that this is a non-trivial overhead (35% or so is spent on the first pass in calculating the length.)

      So the approach here is that we compute the length speculatively, without looking at the whole contents. The obtained speculative value is never less than the actual length of the binary data, but it may be bigger. So if the speculation goes wrong, we'll pay the cost of reallocation and buffer copying.

      If the base64 text is tightly packed with no indentation nor illegal char (like what most web services produce), then the speculation of this method will be correct, so we get the performance benefit.

    • _parseBase64Binary

      public static byte[] _parseBase64Binary(String text)
      Parameters:
      text - base64Binary data is likely to be long, and decoding requires each character to be accessed twice (once for counting length, another for decoding.) A benchmark showed that taking String is faster, presumably because JIT can inline a lot of string access (with data of 1K chars, it was twice as fast)
    • initEncodeMap

      private static char[] initEncodeMap()
    • encode

      public static char encode(int i)
    • encodeByte

      public static byte encodeByte(int i)
    • _printBase64Binary

      public static String _printBase64Binary(byte[] input)
    • _printBase64Binary

      public static String _printBase64Binary(byte[] input, int offset, int len)
    • _printBase64Binary

      public static int _printBase64Binary(byte[] input, int offset, int len, char[] buf, int ptr)
      Encodes a byte array into a char array by doing base64 encoding. The caller must supply a big enough buffer.
      Returns:
      the value of ptr+((len+2)/3)*4, which is the new offset in the output buffer where the further bytes should be placed.
    • _printBase64Binary

      public static int _printBase64Binary(byte[] input, int offset, int len, byte[] out, int ptr)
      Encodes a byte array into another byte array by first doing base64 encoding then encoding the result in ASCII. The caller must supply a big enough buffer.
      Returns:
      the value of ptr+((len+2)/3)*4, which is the new offset in the output buffer where the further bytes should be placed.
    • removeOptionalPlus

      private static CharSequence removeOptionalPlus(CharSequence s)
    • isDigitOrPeriodOrSign

      private static boolean isDigitOrPeriodOrSign(char ch)