Schema Datatype Handling

### Schema datatypes

CodeGen uses standard Java types to represent the most-commonly-used schema datatypes, as listed below. In case where both a primitive type and an object type are used to represent a schema datatype, the primitive type is used for required values while the object type is used for optional values. As shown in the table, all schema types with no specific Java equivalent are handled using `java.lang.String`.

#### Default representations of schema datatypes

Schema type | Primitive type | Object type
--- | --- | ---
xs:base64Binary |  | `byte[]`
xs:boolean | `boolean` | `java.lang.Boolean`
xs:byte | `byte` | `java.lang.Byte`
xs:date |  | `java.sql.Date`
xs:dateTime |  | `java.util.Date`
xs:decimal |  | `java.math.BigDecimal`
xs:double | `double` | `java.lang.Double`
xs:float | `float` | `java.lang.Float`
xs:hexbinary |  | `byte[]`
xs:int | `int` | `java.lang.Integer`
xs:long | `long` | `java.lang.Long`
xs:short | `short` | `java.lang.Short`
xs:QName |  | `org.jibx.runtime.QName`
all others |  | `java.lang.String`

To change these defaults, you can use the schema-type code generation extension element to change the Java representation of a schema type, the way the type is serialized and deserialized, or both. You can also substitute one schema type (or user type) for another using the type-substitutions nesting customization attribute (as in the More Customizations example).