30.2. XML Namespace Mapping


XML Schema type, group, and element definitions are scoped using namespaces. The namespaces prevent possible naming clashes between entities that use the same name. Java packages serve a similar purpose. Therefore, Apache CXF maps the target namespace of a schema document into a package containing the classes necessary to implement the structures defined in the schema document.

Package naming

The name of the generated package is derived from a schema's target namespace using the following algorithm:
  1. The URI scheme, if present, is stripped.
    Apache CXF will only strip the http:, https:, and urn: schemes.
    For example, the namespace http:\\www.widgetvendor.com\types\widgetTypes.xsd becomes \\widgetvendor.com\types\widgetTypes.xsd.
  2. The trailing file type identifier, if present, is stripped.
    For example, \\www.widgetvendor.com\types\widgetTypes.xsd becomes \\widgetvendor.com\types\widgetTypes.
  3. The resulting string is broken into a list of strings using / and : as separators.
    So, \\www.widgetvendor.com\types\widgetTypes becomes the list {"www.widegetvendor.com", "types", "widgetTypes"}.
  4. If the first string in the list is an internet domain name, it is decomposed as follows:
    1. The leading www. is stripped.
    2. The remaining string is split into its component parts using the . as the separator.
    3. The order of the list is reversed.
    So, {"www.widegetvendor.com", "types", "widgetTypes"} becomes {"com", "widegetvendor", "types", "widgetTypes"}
    Internet domain names end in one of the following: .com, .net, .edu, .org, .gov, or in one of the two-letter country codes.
  5. The strings are converted into all lower case.
    So, {"com", "widegetvendor", "types", "widgetTypes"} becomes {"com", "widegetvendor", "types", "widgettypes"}.
  6. The strings are normalized into valid Java package name components as follows:
    1. If the strings contain any special characters, the special characters are converted to an underscore(_).
    2. If any of the strings are a Java keyword, the keyword is prefixed with an underscore(_).
    3. If any of the strings begin with a numeral, the string is prefixed with an underscore(_).
  7. The strings are concatenated using . as a separator.
    So, {"com", "widegetvendor", "types", "widgettypes"} becomes the package name com.widgetvendor.types.widgettypes.
The XML Schema constructs defined in the namespace http:\\www.widgetvendor.com\types\widgetTypes.xsd are mapped to the Java package com.widgetvendor.types.widgettypes.

Package contents

A JAXB generated package contains the following:
  • A class implementing each complex type defined in the schema
    For more information on complex type mapping see Chapter 33, Using Complex Types.
  • An enum type for any simple types defined using the enumeration facet
    For more information on how enumerations are mapped see Section 32.3, “Enumerations”.
  • A public ObjectFactory class that contains methods for instantiating objects from the schema
    For more information on the ObjectFactory class see Section 30.3, “The Object Factory”.
  • A package-info.java file that provides metadata about the classes in the package