32.2. XML 命名空间映射

概述

XML Schema 类型、组和元素定义通过使用命名空间来有作用域。命名空间可防止使用相同名称的实体之间的可能命名冲突。Java 软件包具有类似目的。因此,Apache CXF 将架构文档的目标命名空间映射到包含实施架构文档中定义的结构所需的类软件包中。

软件包命名

生成的软件包的名称是通过以下算法从 schema 的目标命名空间衍生而来:

  1. URI 方案(如果存在)。

    注意

    Apache CXF 只会剥离 http:https:urn: 方案。

    例如,命名空间 http:\\www.widgetvendor.com\types\widgetTypes.xsd 变为 \\widgetvendor.com\types\widgetTypes.xsd

  2. 尾部的文件类型标识符(如果存在)被剥离。

    例如,\\www.widgetvendor.com\types\widgetTypes.xsd 变为 \\widgetvendor.com\types\widgetTypes

  3. 生成的字符串被分为一个字符串列表,使用 /: 作为分隔符。

    因此,\\www.widgetvendor.com\types\widgetTypes 变为列表 {"www.widegetvendor.com", "types", "widgetTypes"}.

  4. 如果列表中的第一个字符串是互联网域名,则按如下方式进行处理:

    1. 主要的 www. 被剥离。
    2. 剩余的字符串使用 划分为其组件部分 作为分隔符。
    3. 列表的顺序将被逆向。

      so, {"www.widegetvendor.com", "types", "widgetTypes"} become {"com", "widegetvendor", "types", "widgetTypes"}

      注意

      Internet 域名以以下一种结尾: .com.net、、.edu.org.gov 或在双字母国家/地区代码之一结尾。

  5. 字符串转换为所有小写。

    因此, {"com", "widegetvendor", "types", "widgetTypes"} become {"com", "widegetvendor", "types", "widgettypes"}.

  6. 字符串被规范化为有效的 Java 软件包名称组件,如下所示:

    1. 如果字符串包含任何特殊字符,则特殊字符将转换为下划线(_)。
    2. 如果有任何字符串是 Java 关键字,则 关键字的前缀为下划线(_)。
    3. 如果有任何字符串以 numeral 开头,则字符串前缀为下划线(_)。
  7. 字符串使用 . 作为分隔符。

    因此, {"com", "widegetvendor", "types", "widgettypes"} become the package name com.widgetvendor.types.widgettypes.

在命名空间 http:\\www.widgetvendor.com\types\widgetTypes.xsd 中定义的 XML Schema 结构被映射到 Java 软件包 com.widgetvendor.types.widgettypes

软件包内容

一个 JAXB 生成的软件包包含以下内容:

  • 实施架构中定义的各种复杂类型的类

    有关复杂类型映射的更多信息,请参阅 第 35 章 使用复杂类型

  • 使用 enumeration facet 定义的任何简单类型 枚举 类型

    有关如何映射枚举的更多信息,请参阅 第 34.3 节 “枚举”

  • 公共 对象工厂 类,其中包含从 schema 中实例化对象的方法

    有关 ObjectFactory 类的更多信息,请参阅 第 32.3 节 “对象因素”

  • package-info.java 文件,它提供有关软件包中类的元数据