1 /*
   2  * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javax.xml.bind;
  27 
  28 /**
  29  * <p>
  30  * The DatatypeConverterInterface is for JAXB provider use only. A
  31  * JAXB provider must supply a class that implements this interface.
  32  * JAXB Providers are required to call the
  33  * {@link DatatypeConverter#setDatatypeConverter(DatatypeConverterInterface)
  34  * DatatypeConverter.setDatatypeConverter} api at
  35  * some point before the first marshal or unmarshal operation (perhaps during
  36  * the call to JAXBContext.newInstance).  This step is necessary to configure
  37  * the converter that should be used to perform the print and parse
  38  * functionality.  Calling this api repeatedly will have no effect - the
  39  * DatatypeConverter instance passed into the first invocation is the one that
  40  * will be used from then on.
  41  * </p>
  42  *
  43  * <p>
  44  * This interface defines the parse and print methods. There is one
  45  * parse and print method for each XML schema datatype specified in the
  46  * the default binding Table 5-1 in the JAXB specification.
  47  * </p>
  48  *
  49  * <p>
  50  * The parse and print methods defined here are invoked by the static parse
  51  * and print methods defined in the {@link DatatypeConverter DatatypeConverter}
  52  * class.
  53  * </p>
  54  *
  55  * <p>
  56  * A parse method for a XML schema datatype must be capable of converting any
  57  * lexical representation of the XML schema datatype ( specified by the
  58  * <a href="http://www.w3.org/TR/xmlschema-2/"> XML Schema Part2: Datatypes
  59  * specification</a> into a value in the value space of the XML schema datatype.
  60  * If an error is encountered during conversion, then an IllegalArgumentException
  61  * or a subclass of IllegalArgumentException must be thrown by the method.
  62  *
  63  * </p>
  64  *
  65  * <p>
  66  * A print method for a XML schema datatype can output any lexical
  67  * representation that is valid with respect to the XML schema datatype.
  68  * If an error is encountered during conversion, then an IllegalArgumentException,
  69  * or a subclass of IllegalArgumentException must be thrown by the method.
  70  * </p>
  71  *
  72  * The prefix xsd: is used to refer to XML schema datatypes
  73  * <a href="http://www.w3.org/TR/xmlschema-2/"> XML Schema Part2: Datatypes
  74  * specification.</a>
  75  *
  76  * <p>
  77  * @author <ul><li>Sekhar Vajjhala, Sun Microsystems, Inc.</li><li>Joe Fialli, Sun Microsystems Inc.</li><li>Kohsuke Kawaguchi, Sun Microsystems, Inc.</li><li>Ryan Shoemaker,Sun Microsystems Inc.</li></ul>
  78  * @see DatatypeConverter
  79  * @see ParseConversionEvent
  80  * @see PrintConversionEvent
  81  * @since 1.6, JAXB 1.0
  82  */
  83 
  84 public interface DatatypeConverterInterface {
  85     /**
  86      * <p>
  87      * Convert the string argument into a string.
  88      * @param lexicalXSDString
  89      *     A lexical representation of the XML Schema datatype xsd:string
  90      * @return
  91      *     A string that is the same as the input string.
  92      */
  93     public String parseString( String lexicalXSDString );
  94 
  95     /**
  96      * <p>
  97      * Convert the string argument into a BigInteger value.
  98      * @param lexicalXSDInteger
  99      *     A string containing a lexical representation of
 100      *     xsd:integer.
 101      * @return
 102      *     A BigInteger value represented by the string argument.
 103      * @throws NumberFormatException <code>lexicalXSDInteger</code> is not a valid string representation of a {@link java.math.BigInteger} value.
 104      */
 105     public java.math.BigInteger parseInteger( String lexicalXSDInteger );
 106 
 107     /**
 108      * <p>
 109      * Convert the string argument into an int value.
 110      * @param lexicalXSDInt
 111      *     A string containing a lexical representation of
 112      *     xsd:int.
 113      * @return
 114      *     An int value represented byte the string argument.
 115      * @throws NumberFormatException <code>lexicalXSDInt</code> is not a valid string representation of an <code>int</code> value.
 116      */
 117     public int parseInt( String lexicalXSDInt );
 118 
 119     /**
 120      * <p>
 121      * Converts the string argument into a long value.
 122      * @param lexicalXSDLong
 123      *     A string containing lexical representation of
 124      *     xsd:long.
 125      * @return
 126      *     A long value represented by the string argument.
 127      * @throws NumberFormatException <code>lexicalXSDLong</code> is not a valid string representation of a <code>long</code> value.
 128      */
 129     public long parseLong( String lexicalXSDLong );
 130 
 131     /**
 132      * <p>
 133      * Converts the string argument into a short value.
 134      * @param lexicalXSDShort
 135      *     A string containing lexical representation of
 136      *     xsd:short.
 137      * @return
 138      *     A short value represented by the string argument.
 139      * @throws NumberFormatException <code>lexicalXSDShort</code> is not a valid string representation of a <code>short</code> value.
 140      */
 141     public short parseShort( String lexicalXSDShort );
 142 
 143     /**
 144      * <p>
 145      * Converts the string argument into a BigDecimal value.
 146      * @param lexicalXSDDecimal
 147      *     A string containing lexical representation of
 148      *     xsd:decimal.
 149      * @return
 150      *     A BigDecimal value represented by the string argument.
 151      * @throws NumberFormatException <code>lexicalXSDDecimal</code> is not a valid string representation of {@link java.math.BigDecimal}.
 152      */
 153     public java.math.BigDecimal parseDecimal( String lexicalXSDDecimal );
 154 
 155     /**
 156      * <p>
 157      * Converts the string argument into a float value.
 158      * @param lexicalXSDFloat
 159      *     A string containing lexical representation of
 160      *     xsd:float.
 161      * @return
 162      *     A float value represented by the string argument.
 163      * @throws NumberFormatException <code>lexicalXSDFloat</code> is not a valid string representation of a <code>float</code> value.
 164      */
 165     public float parseFloat( String lexicalXSDFloat );
 166 
 167     /**
 168      * <p>
 169      * Converts the string argument into a double value.
 170      * @param lexicalXSDDouble
 171      *     A string containing lexical representation of
 172      *     xsd:double.
 173      * @return
 174      *     A double value represented by the string argument.
 175      * @throws NumberFormatException <code>lexicalXSDDouble</code> is not a valid string representation of a <code>double</code> value.
 176      */
 177     public double parseDouble( String lexicalXSDDouble );
 178 
 179     /**
 180      * <p>
 181      * Converts the string argument into a boolean value.
 182      * @param lexicalXSDBoolean
 183      *     A string containing lexical representation of
 184      *     xsd:boolean.
 185      * @return
 186      *     A boolean value represented by the string argument.
 187      * @throws IllegalArgumentException if string parameter does not conform to lexical value space defined in XML Schema Part 2: Datatypes for xsd:boolean.
 188      */
 189     public boolean parseBoolean( String lexicalXSDBoolean );
 190 
 191     /**
 192      * <p>
 193      * Converts the string argument into a byte value.
 194      * @param lexicalXSDByte
 195      *     A string containing lexical representation of
 196      *     xsd:byte.
 197      * @return
 198      *     A byte value represented by the string argument.
 199      * @throws NumberFormatException <code>lexicalXSDByte</code> does not contain a parseable byte.
 200      * @throws IllegalArgumentException if string parameter does not conform to lexical value space defined in XML Schema Part 2: Datatypes for xsd:byte.
 201      */
 202     public byte parseByte( String lexicalXSDByte );
 203 
 204     /**
 205      * <p>
 206      * Converts the string argument into a QName value.
 207      *
 208      * <p>
 209      * String parameter <tt>lexicalXSDQname</tt> must conform to lexical value space specifed at
 210      * <a href="http://www.w3.org/TR/xmlschema-2/#QName">XML Schema Part 2:Datatypes specification:QNames</a>
 211      *
 212      * @param lexicalXSDQName
 213      *     A string containing lexical representation of xsd:QName.
 214      * @param nsc
 215      *     A namespace context for interpreting a prefix within a QName.
 216      * @return
 217      *     A QName value represented by the string argument.
 218      * @throws IllegalArgumentException  if string parameter does not conform to XML Schema Part 2 specification or
 219      *      if namespace prefix of <tt>lexicalXSDQname</tt> is not bound to a URI in NamespaceContext <tt>nsc</tt>.
 220      */
 221     public javax.xml.namespace.QName parseQName( String lexicalXSDQName,
 222                                              javax.xml.namespace.NamespaceContext nsc);
 223 
 224     /**
 225      * <p>
 226      * Converts the string argument into a Calendar value.
 227      * @param lexicalXSDDateTime
 228      *     A string containing lexical representation of
 229      *     xsd:datetime.
 230      * @return
 231      *     A Calendar object represented by the string argument.
 232      * @throws IllegalArgumentException if string parameter does not conform to lexical value space defined in XML Schema Part 2: Datatypes for xsd:dateTime.
 233      */
 234     public java.util.Calendar parseDateTime( String lexicalXSDDateTime );
 235 
 236     /**
 237      * <p>
 238      * Converts the string argument into an array of bytes.
 239      * @param lexicalXSDBase64Binary
 240      *     A string containing lexical representation
 241      *     of xsd:base64Binary.
 242      * @return
 243      *     An array of bytes represented by the string argument.
 244      * @throws IllegalArgumentException if string parameter does not conform to lexical value space defined in XML Schema Part 2: Datatypes for xsd:base64Binary
 245      */
 246     public byte[] parseBase64Binary( String lexicalXSDBase64Binary );
 247 
 248     /**
 249      * <p>
 250      * Converts the string argument into an array of bytes.
 251      * @param lexicalXSDHexBinary
 252      *     A string containing lexical representation of
 253      *     xsd:hexBinary.
 254      * @return
 255      *     An array of bytes represented by the string argument.
 256      * @throws IllegalArgumentException if string parameter does not conform to lexical value space defined in XML Schema Part 2: Datatypes for xsd:hexBinary.
 257      */
 258     public byte[] parseHexBinary( String lexicalXSDHexBinary );
 259 
 260     /**
 261      * <p>
 262      * Converts the string argument into a long value.
 263      * @param lexicalXSDUnsignedInt
 264      *     A string containing lexical representation
 265      *     of xsd:unsignedInt.
 266      * @return
 267      *     A long value represented by the string argument.
 268      * @throws NumberFormatException if string parameter can not be parsed into a <tt>long</tt> value.
 269      */
 270     public long parseUnsignedInt( String lexicalXSDUnsignedInt );
 271 
 272     /**
 273      * <p>
 274      * Converts the string argument into an int value.
 275      * @param lexicalXSDUnsignedShort
 276      *     A string containing lexical
 277      *     representation of xsd:unsignedShort.
 278      * @return
 279      *     An int value represented by the string argument.
 280      * @throws NumberFormatException if string parameter can not be parsed into an <tt>int</tt> value.
 281      */
 282     public int parseUnsignedShort( String lexicalXSDUnsignedShort );
 283 
 284     /**
 285      * <p>
 286      * Converts the string argument into a Calendar value.
 287      * @param lexicalXSDTime
 288      *     A string containing lexical representation of
 289      *     xsd:Time.
 290      * @return
 291      *     A Calendar value represented by the string argument.
 292      * @throws IllegalArgumentException if string parameter does not conform to lexical value space defined in XML Schema Part 2: Datatypes for xsd:Time.
 293      */
 294     public java.util.Calendar parseTime( String lexicalXSDTime );
 295 
 296     /**
 297      * <p>
 298      * Converts the string argument into a Calendar value.
 299      * @param lexicalXSDDate
 300      *     A string containing lexical representation of
 301      *     xsd:Date.
 302      * @return
 303      *     A Calendar value represented by the string argument.
 304      * @throws IllegalArgumentException if string parameter does not conform to lexical value space defined in XML Schema Part 2: Datatypes for xsd:Date.
 305      */
 306     public java.util.Calendar parseDate( String lexicalXSDDate );
 307 
 308     /**
 309      * <p>
 310      * Return a string containing the lexical representation of the
 311      * simple type.
 312      * @param lexicalXSDAnySimpleType
 313      *     A string containing lexical
 314      *     representation of the simple type.
 315      * @return
 316      *     A string containing the lexical representation of the
 317      *     simple type.
 318      */
 319     public String parseAnySimpleType( String lexicalXSDAnySimpleType );
 320 
 321     /**
 322      * <p>
 323      * Converts the string argument into a string.
 324      * @param val
 325      *     A string value.
 326      * @return
 327      *     A string containing a lexical representation of xsd:string
 328      */
 329     public String printString( String val );
 330 
 331     /**
 332      * <p>
 333      * Converts a BigInteger value into a string.
 334      * @param val
 335      *     A BigInteger value
 336      * @return
 337      *     A string containing a lexical representation of xsd:integer
 338      * @throws IllegalArgumentException <tt>val</tt> is null.
 339      */
 340     public String printInteger( java.math.BigInteger val );
 341 
 342     /**
 343      * <p>
 344      * Converts an int value into a string.
 345      * @param val
 346      *     An int value
 347      * @return
 348      *     A string containing a lexical representation of xsd:int
 349      */
 350     public String printInt( int val );
 351 
 352 
 353     /**
 354      * <p>
 355      * Converts a long value into a string.
 356      * @param val
 357      *     A long value
 358      * @return
 359      *     A string containing a lexical representation of xsd:long
 360      */
 361     public String printLong( long val );
 362 
 363     /**
 364      * <p>
 365      * Converts a short value into a string.
 366      * @param val
 367      *     A short value
 368      * @return
 369      *     A string containing a lexical representation of xsd:short
 370      */
 371     public String printShort( short val );
 372 
 373     /**
 374      * <p>
 375      * Converts a BigDecimal value into a string.
 376      * @param val
 377      *     A BigDecimal value
 378      * @return
 379      *     A string containing a lexical representation of xsd:decimal
 380      * @throws IllegalArgumentException <tt>val</tt> is null.
 381      */
 382     public String printDecimal( java.math.BigDecimal val );
 383 
 384     /**
 385      * <p>
 386      * Converts a float value into a string.
 387      * @param val
 388      *     A float value
 389      * @return
 390      *     A string containing a lexical representation of xsd:float
 391      */
 392     public String printFloat( float val );
 393 
 394     /**
 395      * <p>
 396      * Converts a double value into a string.
 397      * @param val
 398      *     A double value
 399      * @return
 400      *     A string containing a lexical representation of xsd:double
 401      */
 402     public String printDouble( double val );
 403 
 404     /**
 405      * <p>
 406      * Converts a boolean value into a string.
 407      * @param val
 408      *     A boolean value
 409      * @return
 410      *     A string containing a lexical representation of xsd:boolean
 411      */
 412     public String printBoolean( boolean val );
 413 
 414     /**
 415      * <p>
 416      * Converts a byte value into a string.
 417      * @param val
 418      *     A byte value
 419      * @return
 420      *     A string containing a lexical representation of xsd:byte
 421      */
 422     public String printByte( byte val );
 423 
 424     /**
 425      * <p>
 426      * Converts a QName instance into a string.
 427      * @param val
 428      *     A QName value
 429      * @param nsc
 430      *     A namespace context for interpreting a prefix within a QName.
 431      * @return
 432      *     A string containing a lexical representation of QName
 433      * @throws IllegalArgumentException if <tt>val</tt> is null or
 434      * if <tt>nsc</tt> is non-null or <tt>nsc.getPrefix(nsprefixFromVal)</tt> is null.
 435      */
 436     public String printQName( javax.xml.namespace.QName val,
 437                               javax.xml.namespace.NamespaceContext nsc );
 438 
 439     /**
 440      * <p>
 441      * Converts a Calendar value into a string.
 442      * @param val
 443      *     A Calendar value
 444      * @return
 445      *     A string containing a lexical representation of xsd:dateTime
 446      * @throws IllegalArgumentException if <tt>val</tt> is null.
 447      */
 448     public String printDateTime( java.util.Calendar val );
 449 
 450     /**
 451      * <p>
 452      * Converts an array of bytes into a string.
 453      * @param val
 454      *     an array of bytes
 455      * @return
 456      *     A string containing a lexical representation of xsd:base64Binary
 457      * @throws IllegalArgumentException if <tt>val</tt> is null.
 458      */
 459     public String printBase64Binary( byte[] val );
 460 
 461     /**
 462      * <p>
 463      * Converts an array of bytes into a string.
 464      * @param val
 465      *     an array of bytes
 466      * @return
 467      *     A string containing a lexical representation of xsd:hexBinary
 468      * @throws IllegalArgumentException if <tt>val</tt> is null.
 469      */
 470     public String printHexBinary( byte[] val );
 471 
 472     /**
 473      * <p>
 474      * Converts a long value into a string.
 475      * @param val
 476      *     A long value
 477      * @return
 478      *     A string containing a lexical representation of xsd:unsignedInt
 479      */
 480     public String printUnsignedInt( long val );
 481 
 482     /**
 483      * <p>
 484      * Converts an int value into a string.
 485      * @param val
 486      *     An int value
 487      * @return
 488      *     A string containing a lexical representation of xsd:unsignedShort
 489      */
 490     public String printUnsignedShort( int val );
 491 
 492     /**
 493      * <p>
 494      * Converts a Calendar value into a string.
 495      * @param val
 496      *     A Calendar value
 497      * @return
 498      *     A string containing a lexical representation of xsd:time
 499      * @throws IllegalArgumentException if <tt>val</tt> is null.
 500      */
 501     public String printTime( java.util.Calendar val );
 502 
 503     /**
 504      * <p>
 505      * Converts a Calendar value into a string.
 506      * @param val
 507      *     A Calendar value
 508      * @return
 509      *     A string containing a lexical representation of xsd:date
 510      * @throws IllegalArgumentException if <tt>val</tt> is null.
 511      */
 512     public String printDate( java.util.Calendar val );
 513 
 514     /**
 515      * <p>
 516      * Converts a string value into a string.
 517      * @param val
 518      *     A string value
 519      * @return
 520      *     A string containing a lexical representation of xsd:AnySimpleType
 521      */
 522     public String printAnySimpleType( String val );
 523 }